Question

Je voulais éditer un commentaire de journal dans le navigateur de référentiel et j'ai reçu un message d'erreur indiquant qu'aucun hook pre-revprop-change n'existait pour le référentiel. En plus d'avoir un nom effrayant, qu'est-ce qu'un crochet pre-revprop-change et comment le créer?

Était-ce utile?

La solution

En gros, c'est un script qui est lancé avant que la propriété non versionnée ne soit modifiée sur le référentiel, afin que vous puissiez gérer plus précisément ce qui se passe dans votre référentiel.

Il existe des modèles dans le distributeur SVN pour différents hooks, situés dans le sous-répertoire / hooks (* .tmpl que vous devez modifier et renommer en fonction de votre système d'exploitation, pour l'activer).

Autres conseils

Pour Windows, voici un lien vers un exemple de fichier de commandes qui autorise uniquement les modifications du message de journal (pas d'autres propriétés):

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

Copiez le code ci-dessous dans un fichier texte et nommez-le pre-revprop-change.bat , puis enregistrez-le dans le sous-répertoire \ hooks de votre référentiel.

@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

Pour que Linux puisse autoriser l'édition d'un commentaire de journal,

  • localisez le fichier pre-revprop-change.tmpl dans le répertoire hooks de votre référentiel
  • copiez le fichier dans le même répertoire en le renommant pre-revprop-change
  • accordez une autorisation d'exécution au fichier (pour l'utilisateur du serveur, par exemple www-data )

Édité: (grâce aux lindes)

  • après cela, vous devrez peut-être modifier le script pour renvoyer une valeur de sortie de 0 pour le type de modifications que vous souhaitez autoriser.

Voici le lien vers la question de débordement de pile contenant de nombreux points communs Types courants crochets Subversion , y compris la source originale du crochet pre-revprop-change pour Windows, affiché ici.

Vous devriez vous y référer car ils pourraient être améliorés avec le temps.

Merci #patmortech

Et j'ai ajouté votre code selon lequel "seul le même utilisateur peut modifier son code".

:: 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

Si vous parvenez à le déchiffrer, le nom du script de raccordement ne vous fait pas trop peur: il s'agit du crochet de changement de propriété de pré-révision . En bref, l'objectif de Le script hook pre-revprop-change consiste à contrôler les modifications des propriétés non versionnées (révision) et à envoyer des notifications (par exemple, pour envoyer un courrier électronique lorsque la propriété de révision est modifiée).

Il existe 2 types de propriétés dans Subversion:

  • propriétés versionnées (par exemple svn: needs-lock et svn: mime-type ) pouvant être définies sur des fichiers et des répertoires,
  • propriétés non versionnées (révision) (par exemple, svn: log et svn: date ) définies dans le référentiel révisions .

Les propriétés versionnées ont un historique et peuvent être manipulées par des utilisateurs ordinaires disposant d'un accès en lecture / écriture à un référentiel. D'un autre côté, les propriétés non versionnées n'ont pas d'historique et servent principalement à la maintenance. Par exemple, si vous validez une révision, elle obtient immédiatement svn: date avec l'heure UTC de votre validation, svn: author avec votre nom d'utilisateur et svn: log avec votre message de journal de validation (si vous en avez spécifié).

Comme je l’ai déjà indiqué, le script de raccordement pre-revprop-change est destiné à contrôler les modifications des propriétés de révision. Vous ne voulez pas que toutes les personnes ayant accès à un référentiel puissent modifier toutes les propriétés de la révision, la modification de ces propriétés est donc interdite par défaut. Pour permettre aux utilisateurs de modifier les propriétés, vous devez créer le hook pre-revprop-change .

Le hook le plus simple ne peut contenir qu'une seule ligne: exit 0 . Cela permettra à tout utilisateur authentifié de changer n'importe quelle propriété de révision et ne devrait pas être utilisé dans un environnement réel. Sous Windows, vous pouvez utiliser un script batch ou un script basé sur PowerShell pour implémenter une logique dans le hook pre-revprop-change .

Ce script PowerShell permet de modifier uniquement la propriété svn: log et refuse les messages de journal vides.

# 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 {

Si vous parvenez à le déchiffrer, le nom du script de raccordement ne vous fait pas trop peur: il s'agit du crochet de changement de propriété de pré-révision . En bref, l'objectif de Le script hook pre-revprop-change consiste à contrôler les modifications des propriétés non versionnées (révision) et à envoyer des notifications (par exemple, pour envoyer un courrier électronique lorsque la propriété de révision est modifiée).

Il existe 2 types de propriétés dans Subversion:

  • propriétés versionnées (par exemple svn: needs-lock et svn: mime-type ) pouvant être définies sur des fichiers et des répertoires,
  • propriétés non versionnées (révision) (par exemple, svn: log et svn: date ) définies dans le référentiel révisions .

Les propriétés versionnées ont un historique et peuvent être manipulées par des utilisateurs ordinaires disposant d'un accès en lecture / écriture à un référentiel. D'un autre côté, les propriétés non versionnées n'ont pas d'historique et servent principalement à la maintenance. Par exemple, si vous validez une révision, elle obtient immédiatement svn: date avec l'heure UTC de votre validation, svn: author avec votre nom d'utilisateur et svn: log avec votre message de journal de validation (si vous en avez spécifié).

Comme je l’ai déjà indiqué, le script de raccordement pre-revprop-change est destiné à contrôler les modifications des propriétés de révision. Vous ne voulez pas que toutes les personnes ayant accès à un référentiel puissent modifier toutes les propriétés de la révision, la modification de ces propriétés est donc interdite par défaut. Pour permettre aux utilisateurs de modifier les propriétés, vous devez créer le hook pre-revprop-change .

Le hook le plus simple ne peut contenir qu'une seule ligne: exit 0 . Cela permettra à tout utilisateur authentifié de changer n'importe quelle propriété de révision et ne devrait pas être utilisé dans un environnement réel. Sous Windows, vous pouvez utiliser un script batch ou un script basé sur PowerShell pour implémenter une logique dans le hook pre-revprop-change .

Ce script PowerShell permet de modifier uniquement la propriété svn: log et refuse les messages de journal vides.

IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )

exit 1
goto :eof

:label1
exit 0

Ce script de lot autorise uniquement les " svnmgr " utilisateur pour modifier les propriétés de révision:

<*>.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

Ce script de lot autorise uniquement les " svnmgr " utilisateur pour modifier les propriétés de révision:

<*>

Pour les utilisateurs de PC: L'extension .bat ne fonctionnait pas pour moi lorsqu'elle était utilisée sur un serveur Windows Server. J'ai utilisé VisualSvn comme l'avait suggéré Django Reinhardt, qui a créé un hook avec une extension .cmd.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top