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?
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.
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.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.
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.
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