5 Stimmen

Wie kann ich einen Post-Commit-Hook haben, der nur aufgerufen wird, wenn Commits an TRUNK gemacht werden?

Ich habe ein Repository, das die folgenden Verzeichnisse enthält:

  • Zweigstellen
  • tags
  • Kofferraum

Das trunk-Verzeichnis enthält die Hauptlinie der Entwicklung. Ich habe ein Post-Commit-Hook-Skript für das Repository erstellt, das eine Arbeitskopie (von trunk) aktualisiert, wenn ein Benutzer in das Repository zurückmeldet.

Es sieht in etwa so aus:

/usr/bin/svn update /path/to/a/working/copy

Ich habe gerade einen Zweig des Codes erstellt, da ich im Begriff bin, einige größere Änderungen vorzunehmen, aber bemerkt habe, dass, wenn ich meine Änderungen an den Zweig übertrage, er den Post-Commit-Hook aufruft und die Arbeitskopie (Kopie des Stammes) aktualisiert.

Gibt es eine Möglichkeit, entweder mein Post-Commit-Hook-Skript zu modifizieren oder eine Einstellung vorzunehmen, die die Arbeitskopie nur dann aktualisiert, wenn der Commit in das Trunk-Verzeichnis und nicht in ein anderes Verzeichnis erfolgt ist?

4voto

Valentin Rocher Punkte 11493

Wie Sie sehen können in diese Dokumentation werden Parameter an das Post-Commit-Skript übergeben.

Das Repository übergibt diesem Programm zwei Argumente: den Pfad zum Repository und die neue Revisionsnummer, die erstellt wurde.

Der Post-Commit-Hook kann ein Programm beliebigen Typs sein: ein Bash-Skript, ein C-Programm, ein Python-Skript... Was passiert, ist, dass die Shell dieses Programm mit den beiden Parametern startet.

Sie können eine Liste interessanter Skripte finden aquí . Ein guter Anfang wäre dieses Python-Skript die die Python-SVN-Libs verwendet.

Bitte beachten Sie, dass der angegebene Pfad nicht mit dem Pfad zu der Datei übereinstimmt, die Sie einchecken wollen (siehe Pauls Antwort ). Aber wenn Sie diese Information zusammen mit der revnum verwenden, sollten Sie eine Liste der Änderungen erhalten, anhand derer Sie feststellen können, ob Operationen an trunk durchgeführt wurden oder nicht.

0 Stimmen

Ich bin mir nicht sicher, wie ich das Post-Commit-Hook-Skript ändern kann, um das zu tun, was Sie vorschlagen. Soweit ich weiß, ist das Skript nur eine Art Batch-Datei. Es enthält lediglich Befehle, die ich ausführen möchte. Wie kann ich die Logik nutzen und welche Sprache würde ich verwenden?

0 Stimmen

Ich werde meine Antwort ändern, um diese Details zu präzisieren.

0 Stimmen

Da es sich um eine Batch-Datei handelt, haben Sie Zugriff auf die zugrunde liegenden Funktionen der Batch-Sprache. Es ist also genau so, als würde man eine .bat (für Windows) oder eine .sh (für Unix) schreiben. Man muss bedenken, dass die Umgebung, in der ein Post-Commit-Hook ausgeführt wird, ziemlich leer ist. Möglicherweise müssen Sie einige Variablen einrichten, insbesondere PATH. Sobald das eingerichtet ist, können Sie die normalen Funktionen des Betriebssystems für Batchdateien nutzen, die Conditionnals, Schleifen und so weiter enthalten.

2voto

Paul Wagland Punkte 25524

Zusätzlich zu den Antwort von Bishiboosh Es ist erwähnenswert, dass die Häkchen jede Programm. Das heißt, wenn Sie es wollten, könnten Sie das Programm in C . Die Parameter, die übergeben werden, werden beschrieben im Dokument .

Eine gute Sammlung von Skripten, von der Sie sich inspirieren lassen können, finden Sie unter die Seite der Subversion-Werkzeuge . Im Allgemeinen ist es am einfachsten, Python zu verwenden, wenn Sie eine bedingte Verarbeitung auf der Grundlage des Transaktionsinhalts durchführen wollen, und das tun Sie, da Sie nur verarbeiten wollen, wenn sich die Dateien im Stamm befinden, da es eine Reihe von Werkzeugen zur Untersuchung der Transaktionen enthält. Dieses Skript ist eine gute Anlaufstelle für die Suche nach Inspiration.

Beachten Sie, dass der Pfad zum Parameter nicht mit dem Pfad zu der Datei übereinstimmt, die Sie einchecken wollen. Es können ja auch mehrere Dateien eingecheckt werden Was Ihnen übergeben wird, ist der Ort des Repositorys und die Revision der Änderung. Mit diesen beiden Informationen können Sie die Informationen über die Änderung aus dem Repository abrufen und anhand dieser Informationen entscheiden, ob eine Aktion im Post-Commit-Hook durchgeführt werden soll oder nicht.

Hier ist anderes Beispiel (in Perl), das explizit den Pfad der Dateien im Checkin überprüft. Dieses Skript ist viel komplizierter, aber die wichtigsten Teile können wahrscheinlich herausgenommen und wiederverwendet werden.

0 Stimmen

Stört es Sie, wenn ich Informationen aus Ihrer Antwort in meine einfüge? Ich habe Ihre bereits ergänzt, aber alle Antworten in einer Frage zusammenzufassen, kann anderen helfen, sie besser zu verstehen?

0 Stimmen

Das ist sehr hilfreich. Ich fange besser an, Python zu lernen. Kennen Sie irgendwelche guten Tutorials für Python?

0 Stimmen

@Camsoft: < stackoverflow.com/questions/70577/ > oder < stackoverflow.com/questions/207701/ > sind gute Ausgangspunkte ;-) Ich habe die Antwort auch mit einem Perl-Skript aktualisiert, das vielleicht hilfreicher ist, wenn Sie Perl bereits kennen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X