2 votes

hook pre-commit Git qui vérifie les applications ouvertes

J'utilise git pour gérer un projet qui comporte quelques fichiers binaires qui doivent être fermés avant d'être validés. J'ai donc besoin d'un hook git, qui vérifie si l'application qui a ces fichiers ouverts est en cours d'exécution.

Voici le script que j'utilise

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

Mais j'obtiens cette erreur lorsque je commets ou exécute le pré-commit. Même lorsque "Some App" n'est pas en cours d'exécution.

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

Les permissions sur le fichier sont

-rwxr-xr-x@ 1 toddgeist  staff   263 Dec  7 07:33 pre-commit

1voto

ganbustein Points 1312

Vous ne dites pas quel problème vous rencontrez, alors laissez-moi deviner.

Si vous avez des difficultés à formuler la partie "-- afficher un message et quitter avec un statut non nul", utilisez la fonction erreur commandement :

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

Le nombre (5 dans l'exemple) n'a pas d'importance ; osascript quittera avec le statut 1 quel que soit le nombre que vous choisissez. Vous n'avez pas le contrôle sur le formatage du message, mais un statut de sortie non nul bloquera le commit.

Si vous avez des difficultés à faire fonctionner le hook pre-commit, n'oubliez pas de le sauvegarder sous le nom de .git/hooks/pre-commit. et le rendre exécutable .

(mise à jour) Si vous obtenez l'erreur -10810, essayez de le faire sans les événements système. Par exemple

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

0voto

MERM Points 631

Si votre osascript (ci-dessus) fonctionne, vous pouvez le lancer via un shell script. Transformez l'osascript en une application avec l'éditeur script. Ensuite, ce shell script pourrait être votre hook pre-commit git. Quelque chose comme :

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

J'utilise cette technique pour lancer scripts via crontab donc cela devrait fonctionner dans votre situation.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X