Как бы вы поместили скрипт AppleScript под контроль версий?
Мне было интересно, если это было лучшее решение:
- Поместите файлы .applescript под контроль версий
- Создайте скрипт установки для компиляции файлов с
osacompile
Но есть и .scptd
каталог. Или я мог бы поставить оба .applescript
а также .scpt
файлы под контролем версий?
Какое лучшее решение?
4 ответа
Я всегда помещаю.applescript (текстовые файлы) в систему управления версиями ( SVN). Таким образом, я могу легко сравнить разные версии, и это также довольно легко, если для мультипользователей. Вы можете выделить изменения, которые были сделаны другими пользователями. Это невозможно с двоичными файлами, такими как файлы скомпилированных скриптов.
Мне нравится решение @DanielTrebbien, но для меня слишком сложно ожидать, что люди будут внедрять его для использования в моем проекте на github. Более простой вариант, который дает вам возможность видеть изменения текста в diff - это указать процессу diff для textconv с osadecompile.
Добавить в.gitattributes
*.scpt diff=scpt
Добавить в.git / config
[diff "scpt"]
textconv = osadecompile
binary=true
Вот пример diff из моего проекта AppleScript-droplet github
$ git diff
--- a/AppleScript-droplet.app/Contents/Resources/Scripts/main.scpt
+++ b/AppleScript-droplet.app/Contents/Resources/Scripts/main.scpt
@@ -1,3 +1,3 @@
-on open filelist
- ## Set useTerminal to true to run the script in a terminal
- set useTerminal to true
+on open file_list
+ ## Set use_terminal to true to run the script in a terminal
+ set use_terminal to true
Большое спасибо @DanielTrebbien за его ответ, который привел меня к osadecompile.
При использовании git вы можете использовать драйвер фильтра для прозрачной (1) декомпиляции файлов SCPT, чтобы фиксировать только исходный код AppleScript (называемый "очисткой" двоичного SCPT), и (2) перекомпилировать обратно в SCPT при извлечении (называемом ""). смазывание "источника AppleScript).
Сначала добавьте следующий скрипт оболочки с именем git-ascr-filter
в /usr/local/bin
:
#!/bin/sh
if [ $# -ne 2 ]; then
echo "Usage: $0 --clean/--smudge FILE">&2
exit 1
else
if [ "$1" = "--clean" ]; then
osadecompile "$2" | sed 's/[[:space:]]*$//'
elif [ "$1" = "--smudge" ]; then
TMPFILE=`mktemp -t tempXXXXXX`
if [ $? -ne 0 ]; then
echo "Error: \`mktemp' failed to create a temporary file.">&2
exit 3
fi
if ! mv "$TMPFILE" "$TMPFILE.scpt" ; then
echo "Error: Failed to create a temporary SCPT file.">&2
rm "$TMPFILE"
exit 4
fi
TMPFILE="$TMPFILE.scpt"
# Compile the AppleScript source on stdin.
if ! osacompile -l AppleScript -o "$TMPFILE" ; then
rm "$TMPFILE"
exit 5
fi
cat "$TMPFILE" && rm "$TMPFILE"
else
echo "Error: Unknown mode '$1'">&2
exit 2
fi
fi
Убедись в chmod a+x
сценарий.
Настройте фильтр "ascr", выполнив:
git config filter.ascr.clean "git-ascr-filter --clean% f" git config filter.ascr.smudge "git-ascr-filter --smudge% f"
Затем добавьте к .gitattributes
:
*.scpt filter = ascr
Теперь, когда вы вносите изменения в файл SCPT и git add
это, декомпилированный источник AppleScript будет размещен вместо двоичного SCPT. Кроме того, всякий раз, когда вы извлекаете файл SCPT (который на самом деле хранится в виде хранилища AppleScript в хранилище), файл SCPT воссоздается на диске.
Я храню простые текстовые файлы.applescript в Git, и у меня есть простой скрипт Bash, который я запускаю каждый раз, когда хочу создать сборку приложения, которая заботится о компиляции AppleScript. Вот мой сценарий:
#!/usr/bin/env bash
APPNAME="My Awesome App"
# make sure we're in the right place
if [ ! -d ".git" ]; then
echo "ERROR: This script must be run from the root of the repository."
exit
fi
# clear out old build
rm -r dist/*
mkdir -p "dist/$APPNAME.app/"
# copy files
cp -r app/* "dist/$APPNAME.app/"
# compile all applescript
cd "dist/$APPNAME.app/Contents/Resources/Scripts/"
for f in *.applescript
do
osacompile -o "`basename -s .applescript "$f"`.scpt" "$f"
rm "$f"
done
Этот сценарий предполагает, что у вас есть все ваше приложение (т.е. Contents/
папка и все в ней) внутри папки app/
в корне вашего репозитория Git. Он копирует все в новую копию приложения в dist/
, а затем компилирует все файлы AppleScript в Contents/Resources/Scripts/
папка новой копии.
Чтобы использовать это самостоятельно, я рекомендую скопировать мой скрипт в bin/build.sh
в корне вашего репозитория, запустив chmod +x bin/build.sh
чтобы сделать его исполняемым, а затем просто запустить ./bin/build.sh
в любое время вы хотите новую сборку вашего приложения.