Git pre-commit Git che verifica la presenza di un'applicazione aperta

2

Sto usando git per gestire un progetto che ha alcuni file binari che devono essere chiusi prima di essere impegnati. Quindi ho bisogno di un hook git, che controlli se l'applicazione che ha questi file aperti sia in esecuzione.

Ecco lo script che sto usando

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

Ma sto ricevendo questo errore quando commetto o eseguo il pre-commit. Anche quando "Some App" non è in esecuzione.

.git/hooks/pre-commit:50:106: execution error: An error of type -10810 has occurred. (-10810)

Le autorizzazioni sul file sono

-rwxr-xr-x@ 1 toddgeist  staff   263 Dec  7 07:33 pre-commit
    
posta toddgeist 06.12.2014 - 21:43
fonte

2 risposte

1

Non dici il problema che stai incontrando, quindi fammi indovinare.

Se hai problemi con la frase "- mostra un messaggio e esci con lo stato non zero", usa il comando errore :

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

Il numero (5 nell'esempio) non ha importanza; osascript uscirà con lo stato 1 indipendentemente dal numero che scegli. Non hai il controllo sulla formattazione del messaggio, ma lo stato di uscita diverso da zero bloccherà il commit.

Se hai difficoltà a far sì che anche il commit pre-commit venga eseguito, ricorda di salvarlo come .git / hooks / pre-commit e renderlo eseguibile .

(aggiornamento) se ottieni l'errore -10810 prova a farlo senza gli eventi di sistema. In questo modo

#!/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
    
risposta data 06.12.2014 - 23:53
fonte
0

Se il tuo osScript (sopra) funziona, puoi avviarlo tramite uno script di shell. Trasforma l'osascript in un'app con l'editor di script. Quindi questo script di shell potrebbe essere il tuo hook di pre-commit git. Qualcosa come:

#!/bin/bash
/usr/bin/osascript $HOME/bin/YOUR_OSASCRIPT.app 2>/dev/null

Uso questa tecnica per avviare script tramite crontab, quindi dovrebbe funzionare nella tua situazione.

    
risposta data 06.12.2014 - 22:50
fonte

Leggi altre domande sui tag