Was ist ein Pre-revprop-change Haken in SVN, und wie ich es erstelle?
Frage
Ich wollte ein Protokoll Kommentar im Repository Browser bearbeiten und eine Fehlermeldung erhalten, die kein Pre-revprop Wechselhaken für das Repository vorhanden ist. Neben einem beängstigend Namen haben, was ist ein Pre-revprop Wechsel Haken, und wie kann ich es schaffen?
Lösung
Im Grunde ist es ein Skript, das vor Revisions-Eigenschaft gestartet wird, wird auf dem Repository geändert, so dass Sie genauer verwalten können, was auf dem Repository passiert.
Es gibt Vorlagen im SVN distrib für verschiedene Haken, in dem / Haken-Unterverzeichnis (* .tmpl, die Sie haben, zu bearbeiten und benennen Sie auf Ihrem O abhängig, aktivieren).
Andere Tipps
Für Windows, hier ist ein Link zu einem Beispiel Batch-Datei, die nur Änderungen an die Protokollmeldung erlaubt (nicht andere Eigenschaften):
http://ayria.livejournal.com/33438.html
Im Grunde genommen den Code unten in eine Textdatei kopieren und benennen Sie es pre-revprop-change.bat
und im \hooks
Unterverzeichnis für das Repository speichern.
@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5
:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME
:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION
:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY
goto :eof
:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT
:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
Für Linux die Ausgabe eines Protokolls Kommentar zu ermöglichen,
- die Datei
pre-revprop-change.tmpl
imhooks
Verzeichnis Ihrer Repository - Sie die Datei in das gleiche Verzeichnis kopieren,
pre-revprop-change
Umbenennen - Geben Ausführungsberechtigung auf die Datei (für den Server-Benutzer, zum Beispiel
www-data
)
Editiert: (dank Lindes)
- danach haben Sie vielleicht das Skript bearbeiten Sie einen Exit-Wert von
0
für die Art der Änderungen zurückzukehren, die Sie zulassen möchten.
ist der Link zu dem Stapelüberlauf Frage mit vielen gängigen Haken Gängige Typen von Subversion Hooks , einschließlich der ursprünglichen Quelle des pre-revprop-change
Haken für Windows hier Quer geschrieben.
Sie sollten dort beziehen, wie sie im Laufe der Zeit verbessert erhalten können.
Danke #patmortech
Und ich fügte Code, die „nur der gleiche Benutzer seinen Code ändern kann.“
:: Only allow editing of the same user.
for /f "tokens=*" %%a in (
'"%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %revision% %repository%') do (
set orgAuthor=%%a
)
if /I not "%userName%" == "%orgAuthor%" goto ERROR_SAME_USER
Der Name des Hook-Skript ist nicht so beängstigend, wenn Sie es schaffen entziffern: es ist pre Revisionseigenschaft ändern Haken . Kurz gesagt, der Zweck der pre-revprop-change
Hook-Skript steuern Änderungen von unversionierte (Revision) Eigenschaften und Benachrichtigungen (zB wird eine E-Mail zu senden, wenn Revisionseigenschaft geändert) zu senden.
Es gibt 2 Arten von Eigenschaften in Subversion:
- versioniert Eigenschaften (z
svn:needs-lock
undsvn:mime-type
), die auf Dateien und Verzeichnisse festgelegt werden können, - unversionierte (Revision) Eigenschaften (z
svn:log
undsvn:date
), die auf Repository gesetzt Änderungen .
Versionierte Eigenschaften haben Geschichte und können von normalen Benutzern manipuliert werden, die / Schreibzugriff auf einen Repository gelesen hat. Auf der anderen Seite, unversionierte Eigenschaften haben keine Geschichte und dienen meist Wartungszwecken. Zum Beispiel, wenn Sie eine Revision begehen wird es sofort svn:date
mit UTC-Zeit Ihres, svn:author
mit Ihrem Benutzernamen und svn:log
mit commit Logmeldung angezeigt (wenn Sie angegeben).
Wie bereits angegeben, ist der Zweck des pre-revprop-change
Hook-Skript ist, Änderungen der Revisionseigenschaften zu steuern. Sie wollen nicht jeden, den Zugang zu einem Repository muss in der Lage, alle Revisionseigenschaften zu ändern, so ändern Revisionseigenschaften sind standardmäßig verboten. Damit Benutzer Eigenschaften ändern, müssen Sie pre-revprop-change
Haken erstellen.
Der einfachste Haken kann enthält nur eine Zeile: exit 0
. Es erlaubt jedem authentifizierte Benutzer eine Revisionseigenschaft zu ändern, und es soll nicht in realer Umgebung verwendet werden. Unter Windows können Sie Batch-Skript oder Powershell-basiertes Skript verwenden einige Logik innerhalb pre-revprop-change
Haken zu implementieren.
Dieses Powershell-Skript erlaubt nur svn:log
Eigenschaft zu ändern und verweigert leere Protokollmeldungen.
# Store hook arguments into variables with mnemonic names
$repos = $args[0]
$rev = $args[1]
$user = $args[2]
$propname = $args[3]
$action = $args[4]
# Only allow changes to svn:log. The author, date and other revision
# properties cannot be changed
if ($propname -ne "svn:log")
{
[Console]::Error.WriteLine("Only changes to 'svn:log' revision properties are allowed.")
exit 1
}
# Only allow modifications to svn:log (no addition/overwrite or deletion)
if ($action -ne "M")
{
[Console]::Error.WriteLine("Only modifications to 'svn:log' revision properties are allowed.")
exit 2
}
# Read from the standard input while the first non-white-space characters
$datalines = ($input | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
# Log message is empty. Show the error.
[Console]::Error.WriteLine("Empty 'svn:log' properties are not allowed.")
exit 3
}
exit 0
Diese Batch-Skript erlaubt nur "svnmgr" user Revisionseigenschaften zu ändern:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
Für PC-Nutzer: Die Erweiterung .bat nicht für mich arbeiten, wenn sie auf Windows Server maching verwendet. Früher habe ich VisualSVN wie Django Reinhardt vorgeschlagen, und es erstellt einen Haken mit einer .cmd-Erweiterung.