2 Stimmen

Abrufen des Projektnamens im Subversion-Hook nach der Übergabe

Ich habe ein Subversion-Repository, das wie folgt aufgebaut ist:

Repo
    ProjectA
        trunk
        branches
        tags
    ProjectB
        trunk
        branches
        tags

Ich versuche, ein Post-Commit-Hook-Skript zu schreiben, das nur für ein Projekt gilt, aber ich habe gerade gelernt, dass sie im Root des Repositorys untergebracht sind.

Die einzigen beiden Parameter, die ich erhalte, sind der Repository-Pfad und die Revisionsnummer. Gibt es eine Möglichkeit, dieses Skript nur für ein bestimmtes Projekt auszuführen?

Danke,

Lösung: Die endgültige Lösung sah in etwa so aus:

#!/bin/bash
REPOS="$1"
REV="$2"
if svnlook changed -r $REV $REPOS | grep ProjectA; then
    echo "do stuff"
fi

3voto

gbjbaanb Punkte 50303

Ja, verwenden svnlook um die Liste der in der übergebenen Revision geänderten Dateien zu erhalten, dann grep auf die Namen mit einem geeigneten Regex, um festzustellen, ob der Pfad nach der Übergabe Ihren Projektnamen an der richtigen Stelle enthält, wenn ja, führen Sie den Code aus, andernfalls springen Sie zum Ende des Skripts und geben 0 zurück.

1voto

Chris Jenks Punkte 113

Ich bin hierher gekommen, um die Antwort auf diese Frage für VisualSVN auf einem Windows 2012 Server zu suchen. Nachdem ich einige weitere Informationen gesammelt habe, ist hier die Lösung, die ich für eine Windows-Batch-Datei mit Post-Commit-Hook auf VisualSVN gefunden habe, die ein PHP-Skript auf einem Entwicklungsserver lädt, um das spezifische Projekt auf diesem Server bereitzustellen. Der Hook-Befehl besteht aus einer Zeile:

svnlook changed "%1" | findstr /L "ProjectA/trunk/" && powershell -Command "Invoke-WebRequest http://192.168.0.177/checkout_on_commit/checkout_on_commit.php -OutFile $ENV:SYSTEMROOT\Temp\commit.txt" || rem

Die rem wurde als "no-op" benötigt, um zu verhindern, dass der Haken von Tortoise als fehlgeschlagen für Übertragungen an andere Projekte gemeldet wird. Die Inhalte von checkout_on_commit.php, die das Projekt auf dem Linux Server bereitstellen, sind:

<?php
`date >> checkout.log`;
`svn sw --non-interactive --no-auth-cache --username project_a_readonly --password trytoguess https://svnserver/svn/GroupA/ProjectA/trunk /app/www/ >> checkout.log`;
?>

0voto

khmarbaise Punkte 86559

In Subversion gibt es keine Definition wie ein "Projekt"...die Definition muss von Ihnen vorgenommen werden. Das bedeutet, dass Subversion die Änderungen im Repository ausführt und nicht auf der Basis des "Projekts"...

Sie können die Informationen, die Sie erhalten, wie das Repository und die Revisionsnummer, verwenden, um die benötigten Informationen zu extrahieren... Sie können dies einfach tun, indem Sie svnlook mit den entsprechenden Parametern aufrufen, um die benötigten Informationen zu extrahieren.

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