Ich verwende Git, um ein Projekt zu verwalten, das einige Binärdateien enthält, die vor dem Festschreiben geschlossen werden müssen. Also brauche ich einen Git-Hook, der überprüft, ob die Anwendung, die diese Dateien geöffnet hat, ausgeführt wird.
Hier ist das Skript, das ich verwende
#!/usr/bin/env osascript
tell application "System Events"
set apps to the name of every process whose background only is false
end tell
if "Some App" is in apps then
error "Some App is running. Can't commit until Some App is quit" number 5
end if
Aber ich erhalte diesen Fehler, wenn ich das Pre-Commit übergebe oder ausführe. Auch wenn "Some App" nicht läuft.
.git/hooks/pre-commit:50:106: execution error: An error of type -10810 has occurred. (-10810)
Berechtigungen für die Datei sind
-rwxr-xr-x@ 1 toddgeist staff 263 Dec 7 07:33 pre-commit
Sie sagen nicht, auf welches Problem Sie stoßen, also lassen Sie mich raten.
Wenn Sie Schwierigkeiten haben, den Teil „-- eine Nachricht anzeigen und mit einem Nicht-Null-Status beenden“ zu formulieren, verwenden Sie den Fehlerbefehl :
#!/usr/bin/env osascript
tell application "System Events"
set apps to the name of every process whose background only is false
end tell
if "Some Application" is in apps then
error "Some Application is running" number 5
end if
Die Zahl (5 im Beispiel) spielt keine Rolle; osascript wird mit Status 1 beendet, egal welche Nummer Sie wählen. Sie haben keine Kontrolle über die Formatierung der Nachricht, aber der Exit-Status ungleich Null blockiert den Commit.
Wenn Sie Probleme haben, den Pre-Commit-Hook überhaupt zum Laufen zu bringen, denken Sie daran, ihn als .git/hooks/pre-commit zu speichern und ihn ausführbar zu machen .
(Update) Wenn Sie den Fehler -10810 erhalten, versuchen Sie es ohne Systemereignisse. So was
#!/usr/bin/env osascript
set someApp to "Some App"
set appIsRunning to false
if application someApp is running then
set appIsRunning to true
end if
if appIsRunning then
error "Can't commit. Please quit Some App" number 5
end if
Wenn Ihr Osascript (oben) funktioniert, können Sie es über ein Shell-Skript starten. Verwandeln Sie das Osascript mit dem Skripteditor in eine App. Dann könnte dieses Shell-Skript Ihr Git-Pre-Commit-Hook sein. Etwas wie:
#!/bin/bash
/usr/bin/osascript $HOME/bin/YOUR_OSASCRIPT.app 2>/dev/null
Ich verwende diese Technik, um Skripte über crontab zu starten, damit es in Ihrer Situation funktionieren sollte.
Todgeist
Todgeist
Ganbüstein
Todgeist
Todgeist
Ganbüstein
Todgeist
Todgeist
Ganbüstein