Wie ein Trigger gesetzt Commits zu verhindern, mit mergeinfo Eigenschaft SVN?
-
18-09-2019 - |
Frage
würde Ich mag href="https://stackoverflow.com/questions/1984598/how-to-avoid-svnmergeinfos-on-sub-folders"> zum auf alles andere als die Wurzel der Zweige. Wir haben einen Stamm Zweig und einige andere Zweige.
Unter der Annahme, ich weiß absolut nichts über svn Trigger, welche Schritte muss ich für das Einrichten eines pre-commit Haken folgen, die Zusätze von mergeinfo Eigenschaften alles andere als die Wurzel der Zweige verhindert?
Der Stamm ist in der Repository-Base "/ trunk" befindet, und alle Zweige sind in "/ branches / foo"
Lösung
Grundsätzlich benötigen Sie einen SVN pre-commit Haken. Zunächst aber, lesen Sie Haken im allgemeinen .
Sie wollen wahrscheinlich mit dem Kopieren der Pre-commit.tmpl Datei pre-commit
und implementieren die Logik drin.
Sie wollen wahrscheinlich wie die diff der gerade ausgeführten Transaktion für Linien untersuchen: Hinzugefügt: svn: mergeinfo
Da die Informationen über die Datei dies hinzugefügt wurde auf einer andere Linie, müssen Sie möglicherweise ein komplexere Bearbeitungswerkzeug als grep -. Vielleicht einen einfachen Perl-Skript
Wenn Sie feststellen, dass eine Transaktion eine zusätzliche Eigenschaft hat, dass Sie nicht möchten, können Sie die COMMIT-Block; oder, wenn Sie besonders gewagte sind, könnten Sie versuchen, die Transaktion zu ändern und weiter.
Andere Tipps
In der folgenden sollte funktionieren. Ihr Repository hat bereits die svn: mergeinfo auf den Stamm, so dass Sie wollen nie jemand ein wieder hinzuzufügen.
Durch die Art und Weise, unsere eigentliche Haken stellt auch sicher, dass jeder von einer Protokollmeldung begleitet begehen wird, und schützt auch gegen die Streichung von einigen unserer wichtigen Top-Level-Verzeichnisse über Repo-Browser.
@echo off
set logfile=%TEMP%\%2.txt
"c:\program files\subversion\svnlook" log -t %2 %1 > %logfile%
for /f "tokens=1,2*" %%i in (%logfile%) do (
if %%i==UU goto checkmergetracking
)
for /f "tokens=1,2*" %%i in (%logfile%) do (
if %%i==_U goto checkmergetracking
)
del %logfile%
exit 0
:checkmergetracking
"c:\program files\subversion\svnlook" diff -t %2 %1 > %logfile%
find "Added: svn:mergeinfo" %logfile%
if ERRORLEVEL 1 goto nomergeinfo
del %logfile%
echo "Addition of Merge Info Not Allowed" >&2
exit 1
:nomergeinfo
del %logfile%
exit 0