Jak umieścić skrypt AppleScript pod kontrolą wersji?

Zastanawiałem się, czy to jest najlepsze rozwiązanie:

  • Umieść .applescript pliki pod kontrolą wersji
  • Utwórz skrypt instalacyjny, aby skompilować pliki za pomocą osacompile

Ale jest też katalog .scptd. Czy Mogę umieścić zarówno .applescript jak i .scpt pliki pod kontrolą wersji?

Jakie jest najlepsze rozwiązanie?

Author: Peter Mortensen, 2011-10-04

4 answers

Zawsze kładę .applescript (plain text files) in version control (SVN ). W ten sposób mogę łatwo porównać różne wersje, i jest to również dość łatwe, jeśli dla wielu użytkowników. Możesz wyróżnić zmiany wprowadzone przez innych użytkowników. Nie jest to możliwe w przypadku plików binarnych, takich jak skompilowane pliki skryptów.

 6
Author: dj bazzie wazzie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-11 08:43:40

Uwielbiam@DanielTrebbien ' s solution , ale jest to trochę zbyt skomplikowane dla mnie oczekiwać, że ludzie będą implementować w celu wykorzystania mojego projektu github. Prostszą opcją, która pozwala zobaczyć zmiany tekstu w różnicowaniu, jest polecenie procesu różnicowania do textconv za pomocą osadecompile.

Dodaj do .gitattributes

*.scpt diff=scpt

Dodaj do .git / config

[diff "scpt"]
  textconv = osadecompile
  binary=true

Oto przykładowy diff z mojego AppleScript-droplet github project

$ 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
Wielkie podziękowania dla @DanielTrebbien za odpowiedź, która doprowadziła mnie do osadecompile.
 21
Author: Bruno Bronosky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:20

Jeśli używasz git, możesz użyć sterownika filtra , aby transparentnie (1) dekompilować pliki SCPT tak, aby tylko kod źródłowy AppleScript został zatwierdzony (zwany "czyszczeniem" binarnego SCPT) i (2) przekompilować z powrotem do SCPT podczas sprawdzania (zwany "rozmazywaniem" Źródła AppleScript).

Najpierw dodaj następujący skrypt powłoki o nazwie git-ascr-filter do /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

Upewnij się, że chmod a+x scenariusz.

Skonfiguruj filtr 'ascr' uruchamiając:

git config filter.ascr.clean "git-ascr-filter --clean %f"
git config filter.ascr.smudge "git-ascr-filter --smudge %f"

Następnie dodaj do .gitattributes:

*.scpt filter=ascr

Teraz, gdy dokonasz zmiany w pliku SCPT i git add to, dekompilowane źródło Applescriptu będzie wystawione zamiast binarnego SCPT. Ponadto, za każdym razem, gdy sprawdzasz plik SCPT (który jest tak naprawdę przechowywany jako obiekt blob AppleScript w repozytorium), plik SCPT jest ponownie tworzony na dysku.

 14
Author: Daniel Trebbien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-14 13:14:49

Zachowuję zwykły tekst .pliki applescript w Git i mam prosty skrypt Bash, który uruchamiam za każdym razem, gdy chcę stworzyć kompilację aplikacji, która zajmuje się kompilacją AppleScript. Oto mój scenariusz:

#!/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

Ten skrypt zakłada, że cała Twoja aplikacja (tj. folder Contents/ i wszystko w nim) znajduje się w folderze app/ w katalogu głównym repozytorium Git. Kopiuje wszystko do nowej kopii aplikacji w dist/, a następnie kompiluje wszystkie pliki AppleScript w Contents/Resources/Scripts/ folder nowej kopii.

Aby użyć tego samodzielnie, polecam skopiować mój skrypt do bin/build.sh w katalogu głównym repozytorium, uruchomić chmod +x bin/build.sh, aby uczynić go wykonywalnym, a następnie po prostu uruchomić ./bin/build.sh w dowolnym momencie, gdy chcesz nową kompilację aplikacji.

 2
Author: Hayden Schiff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-03 15:31:00