Der Name des Hook-Skripts ist nicht so beängstigend, wenn Sie die Entschlüsselung verwalten: Es handelt sich um einen Hook zur Änderung der Eigenschaften vor der Revision . Kurz gesagt, der Zweck vonpre-revprop-change
Hook-Skripts besteht darin, Änderungen an nicht versionierten (Revisions-) Eigenschaften zu steuern und Benachrichtigungen zu senden (z. B. eine E-Mail zu senden, wenn die Revisionseigenschaft geändert wird).
In Subversion gibt es zwei Arten von Eigenschaften:
- versionierte Eigenschaften (zB
svn:needs-lock
undsvn:mime-type
), die für Dateien und Verzeichnisse festgelegt werden können,
- nicht versionierte (Revisions-) Eigenschaften (z. B.
svn:log
und svn:date
), die für Repository- Revisionen festgelegt wurden .
Versionierte Eigenschaften haben einen Verlauf und können von normalen Benutzern bearbeitet werden, die Lese- / Schreibzugriff auf ein Repository haben. Auf der anderen Seite haben nicht versionierte Eigenschaften keine Historie und dienen hauptsächlich Wartungszwecken. Wenn Sie beispielsweise eine Revision festschreiben, wird diese sofort svn:date
mit der UTC-Zeit Ihres Commits, svn:author
Ihrem Benutzernamen und svn:log
Ihrer Commit-Protokollnachricht (falls Sie eine angegeben haben) angezeigt.
Wie bereits erwähnt, dient das pre-revprop-change
Hook-Skript dazu, Änderungen der Revisionseigenschaften zu steuern. Sie möchten nicht, dass jeder, der Zugriff auf ein Repository hat, alle Revisionseigenschaften ändern kann. Daher ist das Ändern von Revisionseigenschaften standardmäßig verboten. Damit Benutzer Eigenschaften ändern können, müssen Sie einen pre-revprop-change
Hook erstellen .
Der einfachste Haken kann nur eine Zeile enthalten : exit 0
. Jeder authentifizierte Benutzer kann Revisionseigenschaften ändern und sollte nicht in einer realen Umgebung verwendet werden. Unter Windows können Sie ein Batch-Skript oder ein PowerShell-basiertes Skript verwenden, um eine Logik innerhalb des pre-revprop-change
Hooks zu implementieren .
Dieses PowerShell-Skript ermöglicht nur das Ändern von svn:log
Eigenschaften und lehnt leere Protokollnachrichten ab.
# 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
Mit diesem Batch-Skript kann nur der Benutzer "svnmgr" die Revisionseigenschaften ändern:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0