it-swarm.com.de

Was ist ein Pre-Revprop-Change-Hook in SVN und wie erstelle ich ihn?

Ich wollte einen Protokollkommentar im Repository-Browser bearbeiten und erhielt die Fehlermeldung, dass für das Repository kein Hook vor dem erneuten Prop-Wechsel vorhanden ist. Was ist ein Pre-Revprop-Change-Hook und wie erstelle ich ihn?

162
Manu

Grundsätzlich handelt es sich um ein Skript, das gestartet wird, bevor nicht versionierte Eigenschaften im Repository geändert werden, sodass Sie genauer verwalten können, was in Ihrem Repository geschieht.

Die SVN-Distribution enthält Vorlagen für verschiedene Hooks im Unterverzeichnis/hooks (* .tmpl, die Sie je nach Betriebssystem bearbeiten und umbenennen müssen, um sie zu aktivieren).

51
PW.

Unter Windows finden Sie hier einen Link zu einer Beispiel-Batchdatei, die nur Änderungen an der Protokollmeldung zulässt (keine anderen Eigenschaften):

http://ayria.livejournal.com/33438.html

Kopieren Sie den folgenden Code in eine Textdatei und nennen Sie ihn pre-revprop-change.bat und speichere es im \hooks Unterverzeichnis für Ihr Repository.

@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
206
patmortech

Damit Linux die Ausgabe eines Protokollkommentars zulässt,

  • suchen Sie die Datei pre-revprop-change.tmpl im Verzeichnis hooks Ihres Repositorys
  • kopieren Sie die Datei in dasselbe Verzeichnis und benennen Sie sie in pre-revprop-change um.
  • erteilen Sie der Datei die Ausführungsberechtigung (für den Serverbenutzer, z. B. www-data)

Bearbeitet: (danke an lindes)

  • danach müssen Sie möglicherweise das Skript bearbeiten, um einen Exit-Wert von 0 für die Art von Bearbeitungen zurückzugeben, die Sie zulassen möchten.
15
Alois Heimer

Hier ist der Link zur Stapelüberlauf-Frage mit vielen gängigen Hooks Common Types of Subversion Hooks , einschließlich der Originalquelle des pre-revprop-change Hook für Windows hier angekreuzt.

Sie sollten sich darauf beziehen, da sie sich im Laufe der Zeit verbessern können.

11

Vielen Dank, #patmortech

Und ich habe Ihren Code hinzugefügt, der "nur derselbe 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
6
yasin

Der Name des Hook-Skripts ist nicht so beängstigend, wenn Sie es entschlüsseln: Es ist ein Hook zum Ändern der Eigenschaften vor der Revision . Kurz gesagt, der Zweck des Hook-Skripts pre-revprop-change besteht darin, Änderungen an nicht versionierten (Revisions-) Eigenschaften zu steuern und Benachrichtigungen zu senden (z. B. um eine E-Mail zu senden, wenn die Revisionseigenschaft geändert wird).

Es gibt zwei Arten von Eigenschaften in Subversion:

  • versionierte Eigenschaften (z. B. svn:needs-lock und svn:mime-type), die für Dateien und Verzeichnisse festgelegt werden können,
  • nicht versionierte (Revisions-) Eigenschaften (z. B. svn:log und svn:date), die im Repository festgelegt sind Revisionen.

Versionierte Eigenschaften haben einen Verlauf und können von normalen Benutzern bearbeitet werden, die über Lese-/Schreibzugriff auf ein Repository verfügen. Auf der anderen Seite haben nicht versionierte Eigenschaften keine Historie und dienen hauptsächlich Wartungszwecken. Wenn Sie beispielsweise eine Revision festschreiben, erhält diese sofort svn:date Mit der UTC-Zeit Ihrer Festschreibung, svn:author Mit Ihrem Benutzernamen und svn:log Mit Ihrer Festschreibungsprotokollnachricht (falls Sie eine angegeben haben) ).

Wie ich bereits angegeben habe, dient das Hook-Skript pre-revprop-change Dazu, Änderungen der Revisionseigenschaften zu steuern. Sie möchten nicht, dass jeder, der Zugriff auf ein Repository hat, alle Revisionseigenschaften ändern kann. Das Ändern von Revisionseigenschaften ist daher standardmäßig verboten. Damit Benutzer Eigenschaften ändern können, müssen Sie einen pre-revprop-change - Hook erstellen.

Der einfachste Hook kann nur eine Zeile enthalten: exit 0. Es ermöglicht jedem authentifizierten Benutzer, Revisionseigenschaften zu ä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 Hooks pre-revprop-change Zu implementieren.

Mit diesem PowerShell-Skript können Sie nur die Eigenschaft svn:log Ändern und leere Protokollnachrichten ablehnen.

# 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

Dieses Batch-Skript erlaubt nur "svnmgr" -Benutzern, 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
4
bahrep

Für PC-Benutzer: Die Erweiterung .bat funktionierte bei mir unter Windows Server nicht. Ich habe VisualSvn als Django Reinhardt vorgeschlagen, und es hat einen Hook mit der Erweiterung .cmd erstellt.

2
noti