Post-Commit-Hook für mehrere Checkout-Instanzen von Subversion?

Post-Commit-Hook für mehrere Checkout-Instanzen von Subversion?

Der Titel mag seltsam klingen, aber ich versuche Folgendes zu erreichen:

Speicherort des SVN-Repository: /home/flx/svn/flxdev SVN-Repository-Struktur „flxdev“:

 + Project1
 ++ files
 + Project2
 + Project3
 + Project4

Ich versuche, einen Post-Commit-Hook einzurichten, der am anderen Ende automatisch ausgecheckt wird, wenn ich ein Commit ausführe.

Im Post-Commit-Dokument ist Folgendes explizit aufgeführt:

# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit.  Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the
# following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REV          (the number of the revision just committed)

Also habe ich zum Testen den folgenden Befehl eingegeben:

REPOS="$1"
REV="$2"
echo "Updated project $REPOS to $REV"

Wenn ich jedoch beispielsweise Dateien in Project1 bearbeite, wird Folgendes ausgegeben:„Projekt /home/flx/svn/flxdev auf 1016 aktualisiert“

Ich hätte gerne Folgendes:„Projekt Project1 auf 1016 aktualisiert“

Mit dieser Variable kann ich angeben, dass nach dem Commit unterschiedliche Aktionen pro Projekt ausgeführt werden sollen. Wie kann ich den Projektparameter angeben?

Danke!

Dennis

Antwort1

Das Folgende könnte das gewünschte Ergebnis liefern:

#!/bin/bash

REPOS="$1"
REV="$2"

echo In revision $REV, the following projects were changed:
svnlook dirs-changed "$REPOS" --revision "$REV" \ 
    | sed 's%/.*%%' \
    | sort -u \
    | while read PROJ ; do
          echo "$PROJ"
      done

Eine Erklärung dessen, was passiert, falls Sie mit Shell-Skripten nicht so vertraut sind:

  • Wir verwenden svnlook, um die Liste der Verzeichnisse zu erhalten, die geändert wurden
  • sedNormalerweise schneiden wir das erste " /" und alles danach ab, sodass wir eine Liste von Projektnamen haben, möglicherweise mit Duplikaten.
  • Wir verwenden sort -u("sort unique") um Duplikate zu eliminieren
  • Nacheinander lesen wir jeden Namen in $PROJ ein und machen etwas damit.

Sie können die echo "$PROJ"Zeile durch alles ersetzen, was Sie mit dem Projektnamen machen möchten. Wenn mehrere Projekte im selben Commit geändert wurden, wird alles, was Sie dort eingeben, einmal für jedes geänderte Projekt ausgeführt, wobei $PROJ entsprechend gesetzt wird.

Dieses Skript zeigt nicht an, ob Dateien zum Stammverzeichnis des Repository hinzugefügt wurden. Wenn jedoch Verzeichnisse hinzugefügt wurden, werden diese in der Liste der geänderten Projekte angezeigt. Wenn Sie möchten, dass auch das Stammverzeichnis aufgelistet wird, können Sie die folgende sed-Zeile ersetzen, und sie wird als "/" angezeigt. Wenn Sie dies tun, achten Sie darauf, dass Sie nicht versehentlich das gesamte Repository auschecken!

...
    | sed '/^\/$/!s%/.*%%' \
...

verwandte Informationen