2009-07-01 6 views
5

Ich bin auf der Suche nach einer Möglichkeit, git-commit warten auf Standard-Eingabe. Ich bin Codierung dies in PHP, als meine bash Fähigkeiten nicht existierend sind, so dass ich thougth eine regelmäßigeLesen von STDIN auf einem Git Pre-Commit Hook (mit PHP)

<?php 
$input = trim(fgets(STDIN)); 
fscanf(STDIN, "%d\n", $line); 
?> 

den Trick tun würde, zu tun, und warten, bis ich Sachen schreiben in fortzusetzen, aber es geht einfach weiter und weiterhin mein PHP-Skript ausführen.

Die Idee dahinter ist, dass git nach dem Taggen eines Releases HEAD an den Test-Webserver sendet, ein paar Tweets sendet und mir einige Details über das Release im CHANGELOG mitteilt.

Während ich das Schreiben in eine Datei (unter Verwendung exec('mate -w')) erreichen kann, möchte ich, dass es durchhält, bis ich einen schnellen Test auf dem Server mache. Dies würde mir erlauben, ein Rollback durchzuführen, wenn ich irgendwelche Fehler feststelle (faul, ich weiß).

Danke für jede Hilfe!

+2

Versuchen 'exec mit

Antwort

3

Die meisten git Hooks haben entweder etwas Spezielles, oder haben sich vom Terminal gelöst. Sie sind alle so konzipiert, dass sie nicht interaktiv ausgeführt werden können. Daher glaube ich nicht, dass ein Hook für das geeignet ist, was Sie tun möchten. Sie können natürlich manuell mit /dev/tty sprechen, aber ich denke nicht, dass es eine sehr gute Idee ist.

Ich glaube auch nicht, dass der 'pre-commit' Hook für Ihre Aufgabe geeignet ist, sicherlich wird nicht jedes Commit, das Sie machen, eine Veröffentlichung irgendeiner Art sein? Ein Post-Receive-Hook auf dem Test-Webserver-Computer klingt passender.

+0

Ja, tatsächlich fand ich, dass es besser wäre, einige Variablen in der .git/config-Datei für diese Zwecke zu behalten und den Server mit diesen verwandten Aufgaben zu beschäftigen. Es war eher ein Problem meiner Idee eines Workflows als Git selbst, wie sich herausstellt. Danke! – Roberto

1

Ich brauche Benutzereingabe in meinem Post-Merge-Hook (geschrieben in PHP).

Ich löste es mit diesem Stück Code: trim(exec('exec < /dev/tty && read input && echo $input'))

Fragen Sie nicht, es funktioniert;)