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?

War es hilfreich?

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 im hooks 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.
Hier

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 und svn:mime-type), die auf Dateien und Verzeichnisse festgelegt werden können,
  • unversionierte (Revision) Eigenschaften (z svn:log und svn: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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top