Frage

Ich habe ein post-commit Haken in Svn, die fein von der Kommandozeile ausgeführt wird, wenn ich laufe

env - ./foo.sh /path/to/svn/repos/ 12345

aber, wenn das Skript aufgerufen wird aus dem SVN es nicht zur Arbeit erscheint.

Was ich im Grunde tue, um die engagierten Dateien überprüft und, wenn eine bestimmte Datei geändert wird, kann ich einen SVN-Export von ihm zu einer Netzwerkfreigabe. Adaequat von der Kommandozeile aus.

Der Post-Commit-Skript wie folgt:

#!/bin/sh

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

CHANGED=`/usr/bin/svnlook changed -r "$REV" "$REPOS"`
SOURCE="svn+ssh://localhost/path/to/svn/repos/somefile.zip"
DEST="/mnt/build/somefile-r$REV.zip"

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        `/usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST`
fi

exit 0

Gibt es eine Möglichkeit zur Ausgabe von Fehlermeldungen in eine Datei, wenn das Skript ausgeführt wird, oder speziell die SVN-Export Linie (wo ich es denken könnte ein Problem sein)?

War es hilfreich?

Lösung

Die Standardausgabe von einem Hook-Skript wird verworfen, aber der Standardfehler geht zurück an den Client, zumindest in der letzten Versionen von Subversion. Ich dachte, es wie dies für eine Weile gewesen, aber das SVN 1.4 Buch sagt, dass die Ausgabe verworfen wird, so dass Sie überprüfen vielleicht gefallen, dass Sie die Version des Servers eine up-to-date laufen - den Standardfehler zu sehen Strom ist ein guter Weg, Frühwarn gemeinsamer Fehlerarten zu erhalten.

Um die Ausgabe eines Befehls in eine Datei und schließen die Standard-Fehlerausgabe in der Datei zu senden zu halten alles an einem Ort, tun

command >/path/to/logfile 2>&1

Verwenden >> statt > zu Append in die Datei:

command >>/path/to/logfile 2>&1

Da die Standard-Fehlerausgabe zurück zum SVN-Client gesendet wird, können Sie auch die Informationen aus der Standardausgabe zurück passieren, dass Art und Weise, entweder für einen einzelnen Befehl,

command 1>&2

oder für das gesamte Skript, indem

exec 1>&2

an der Spitze des Skripts.

Auf einen Blick sehe ich ein Problem mit Ihrem Skript: die einfachen Anführungszeichen auf der SVN-Export Linie unter der Annahme nicht ein Artefakt des Markup, sollten Sie sie entfernen. (Sie werden den Exportbefehl ausführen, dass Sie geschrieben haben, und dann seinen Ausgang nehmen, und führen Sie diese Ausgabe als einen anderen Befehl -. Ziemlicher Sicherheit nicht das, was Sie beabsichtigt)

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        /usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST 1>&2
fi

(ich wusste nicht, über die Doppel eckige Klammer Test Syntax in bash, die für mich eine schöne neue Entdeckung ist!)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top