Как бы вы поместили скрипт AppleScript под контроль версий? - PullRequest
25 голосов
/ 04 октября 2011

Мне было интересно, было ли это лучшим решением:

  • Поместить файлы .applescript под контроль версий
  • Создайте скрипт установки для компиляции файлов с osacompile

Но есть также каталог .scptd. Или я могу поставить оба файла .applescript и .scpt под контроль версий?

Какое лучшее решение?

Ответы [ 4 ]

25 голосов
/ 05 марта 2013

Мне нравится @ решение 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.

17 голосов
/ 20 января 2013

При использовании 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 воссоздается на диске.

6 голосов
/ 07 декабря 2011

Я всегда помещаю .applescript (текстовые файлы) в систему управления версиями ( SVN ).Таким образом, я могу легко сравнить разные версии, и это также довольно легко, если для мультипользователей.Вы можете выделить изменения, которые были сделаны другими пользователями.Это невозможно с двоичными файлами, такими как скомпилированные файлы сценариев.

2 голосов
/ 03 октября 2017

Я храню простые текстовые файлы .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 в любое время, когда вам понадобится новая сборка вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...