Domanda

Volevo modificare un commento di registro nel browser del repository e ho ricevuto un messaggio di errore che non esiste alcun hook di modifica pre-revprop per il repository. Oltre ad avere un nome spaventoso, che cos'è un hook di cambio pre-revprop e come posso crearlo?

È stato utile?

Soluzione

Fondamentalmente si tratta di uno script che viene avviato prima che la proprietà senzaversione venga modificata nel repository, in modo da poter gestire con maggiore precisione ciò che sta accadendo nel proprio repository.

Ci sono modelli nella distribuzione SVN per diversi hook, situati nella sottodirectory / hooks (* .tmpl che devi modificare e rinominare a seconda del tuo sistema operativo, per attivare).

Altri suggerimenti

Per Windows, ecco un collegamento a un file batch di esempio che consente solo modifiche al messaggio di registro (non altre proprietà):

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

Fondamentalmente copia il codice qui sotto in un file di testo e chiamalo pre-revprop-change.bat e salvalo nella sottodirectory \ hooks per il tuo 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

Per Linux consentire l'edizione di un commento nel registro,

  • trova il file pre-revprop-change.tmpl nella directory hooks del tuo repository
  • copia il file nella stessa directory, rinominandolo in pre-revprop-change
  • autorizza l'esecuzione del file (per l'utente del server, ad es. www-data )

Modificato: (grazie a Lindes)

  • dopo potrebbe essere necessario modificare lo script per restituire un valore di uscita di 0 per il tipo di modifiche che si desidera consentire.

Ecco il link alla domanda di overflow dello stack con molti hook comuni Tipi comuni degli hook Subversion , inclusa la fonte originale dell'hook pre-revprop-change per Windows postato qui.

Dovresti fare riferimento lì perché potrebbero migliorare nel tempo.

Grazie #patmortech

E ho aggiunto il tuo codice che "solo lo stesso utente può modificare il suo codice".

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

Il nome dello script hook non è così spaventoso se riesci a decifrarlo: è hook modifica proprietà pre-revisione . In breve, lo scopo di pre-revprop-change lo script hook serve a controllare le modifiche delle proprietà non riviste (revisione) e a inviare notifiche (ad es. per inviare un'e-mail quando viene modificata la proprietà revisione).

Esistono 2 tipi di proprietà in Subversion:

  • proprietà versionate (ad es. svn: needs-lock e svn: mime-type ) che possono essere impostati su file e directory,
  • proprietà non riviste (revisione) (ad es. svn: log e svn: date ) che sono impostate sul repository revisioni .

Le proprietà con versione hanno una cronologia e possono essere manipolate da utenti normali che hanno accesso in lettura / scrittura a un repository. D'altra parte, le proprietà non controllate non hanno alcuna storia e servono principalmente per scopi di manutenzione. Ad esempio, se esegui una revisione, viene immediatamente svn: date con l'ora UTC del commit, svn: author con il tuo nome utente e svn: log con il tuo messaggio di registro di commit (se ne hai specificato uno).

Come ho già specificato, lo scopo dello script hook pre-revprop-change è controllare le modifiche alle proprietà di revisione. Non si desidera che tutti coloro che hanno accesso a un repository siano in grado di modificare tutte le proprietà di revisione, quindi la modifica delle proprietà di revisione è vietata per impostazione predefinita. Per consentire agli utenti di modificare le proprietà, devi creare un hook pre-revprop-change .

L'hook più semplice può contenere solo una riga: exit 0 . Consentirà a qualsiasi utente autenticato di modificare qualsiasi proprietà di revisione e non dovrebbe essere utilizzato in un ambiente reale. Su Windows, è possibile utilizzare script batch o script basati su PowerShell per implementare una logica all'interno dell'hook pre-revprop-change .

Questo script di PowerShell consente di modificare solo la proprietà svn: log e nega i messaggi di log vuoti.

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

Il nome dello script hook non è così spaventoso se riesci a decifrarlo: è hook modifica proprietà pre-revisione . In breve, lo scopo di pre-revprop-change lo script hook serve a controllare le modifiche delle proprietà non riviste (revisione) e a inviare notifiche (ad es. per inviare un'e-mail quando viene modificata la proprietà revisione).

Esistono 2 tipi di proprietà in Subversion:

  • proprietà versionate (ad es. svn: needs-lock e svn: mime-type ) che possono essere impostati su file e directory,
  • proprietà non riviste (revisione) (ad es. svn: log e svn: date ) che sono impostate sul repository revisioni .

Le proprietà con versione hanno una cronologia e possono essere manipolate da utenti normali che hanno accesso in lettura / scrittura a un repository. D'altra parte, le proprietà non controllate non hanno alcuna storia e servono principalmente per scopi di manutenzione. Ad esempio, se esegui una revisione, viene immediatamente svn: date con l'ora UTC del commit, svn: author con il tuo nome utente e svn: log con il tuo messaggio di registro di commit (se ne hai specificato uno).

Come ho già specificato, lo scopo dello script hook pre-revprop-change è controllare le modifiche alle proprietà di revisione. Non si desidera che tutti coloro che hanno accesso a un repository siano in grado di modificare tutte le proprietà di revisione, quindi la modifica delle proprietà di revisione è vietata per impostazione predefinita. Per consentire agli utenti di modificare le proprietà, devi creare un hook pre-revprop-change .

L'hook più semplice può contenere solo una riga: exit 0 . Consentirà a qualsiasi utente autenticato di modificare qualsiasi proprietà di revisione e non dovrebbe essere utilizzato in un ambiente reale. Su Windows, è possibile utilizzare script batch o script basati su PowerShell per implementare una logica all'interno dell'hook pre-revprop-change .

Questo script di PowerShell consente di modificare solo la proprietà svn: log e nega i messaggi di log vuoti.

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

exit 1
goto :eof

:label1
exit 0

Questo script batch consente solo " svnmgr " utente per modificare le proprietà della revisione:

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

Questo script batch consente solo " svnmgr " utente per modificare le proprietà della revisione:

<*>

Per utenti PC: L'estensione .bat non ha funzionato per me se utilizzata su macchine Windows Server. Ho usato VisualSvn come suggerito da Django Reinhardt e ha creato un hook con estensione .cmd.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top