O que é um gancho pre-revprop-change no SVN, e como faço para criá-la?

StackOverflow https://stackoverflow.com/questions/197224

  •  10-07-2019
  •  | 
  •  

Pergunta

Eu queria editar um comentário de log no navegador do repositório e recebeu uma mensagem de erro que não existe gancho pre-revprop-change para o repositório. Além de ter um nome assustador, o que é um gancho pre-revprop-mudança, e como faço para criá-lo?

Foi útil?

Solução

Basicamente é um script que é lançado antes propriedade unversioned é modificado no repositório, para que você possa gerenciar mais precisamente o que está acontecendo em seu repositório.

Existem modelos no distrib SVN para diferentes ganchos, localizado no / ganchos subdiretório (* .tmpl que você tem que editar e renomear dependendo do seu sistema operacional, para ativar).

Outras dicas

Para o Windows, aqui está um link para um arquivo de lote exemplo, que só permite alterações à mensagem de log (não outras propriedades):

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

Basicamente copiar o código abaixo em um arquivo de texto e nomeie-pre-revprop-change.bat e guardá-lo no subdiretório \hooks para o seu repositório.

@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

Para Linux para permitir a edição de um comentário de log,

  • localizar o pre-revprop-change.tmpl arquivo no diretório hooks do seu repositório
  • copiar o arquivo para o mesmo diretório, renomeando-o para pre-revprop-change
  • dar permissão de execução para o arquivo (para o usuário do servidor, por exemplo www-data)

Editado: (graças a lindes)

  • depois que você pode ter que editar o script para retornar um valor de saída de 0 para o tipo de edições, que você deseja permitir.

Aqui está o link para a pergunta de estouro de pilha com muitos anzóis comuns Tipos comuns do Subversion Hooks , incluindo a fonte original do gancho pre-revprop-change para Windows cruz-postadas aqui.

Você deve consultar lá como eles podem ficar melhorou ao longo do tempo.

Graças #patmortech

E eu adicionei o código que "somente o mesmo usuário pode alterar seu código".

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

O nome do script de gancho não é tão assustador se você conseguir decifrá-lo: É pré revisão de alteração de propriedade gancho . Em suma, a finalidade do pre-revprop-change script de gancho é controlar alterações de propriedades não-versionadas (revisão) e para enviar notificações (por exemplo, para enviar um e-mail quando propriedade de revisão é alterado).

Existem 2 tipos de propriedades no Subversion:

  • propriedades versionadas (por exemplo svn:needs-lock e svn:mime-type) que podem ser definidas em arquivos e diretórios,
  • propriedades não versionados (revisão) (por exemplo svn:log e svn:date) que são definidas em repositório revisões .

propriedades versionadas têm história e podem ser manipulados por usuários comuns que têm acesso leitura / escrita a um repositório. Por outro lado, as propriedades não-versionadas não têm qualquer história e servem principalmente fins de manutenção. Por exemplo, se você cometer uma revisão imediatamente recebe svn:date com UTC tempo de sua cometer, svn:author com seu nome de usuário e svn:log com sua mensagem de log (se tiver especificado qualquer).

Como já especificado, o propósito de roteiro pre-revprop-change gancho é para controlar alterações de propriedades de revisão. Você não quer que todo mundo que tem acesso a um repositório de ser capaz de modificar todas as propriedades de revisão, de modo a mudar as propriedades de revisão é proibido por padrão. Para permitir que usuários para propriedades de mudança, você tem que criar gancho pre-revprop-change.

O gancho mais simples podem conter apenas uma linha: exit 0. Ele permitirá que qualquer usuário autenticado para alterar qualquer propriedade de revisão e não deve ser usado no ambiente real. No Windows, você pode usar script em lotes ou script baseado em PowerShell para implementar alguma lógica dentro gancho pre-revprop-change.

Este script PowerShell permite a única propriedade svn:log mudança e nega mensagens de registo vazias.

# 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

Este script em lotes permite apenas usuário "svnmgr" para propriedades de revisão de mudança:

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

exit 1
goto :eof

:label1
exit 0

Para usuários de PC: A extensão .bat não funcionou para mim quando usado em maching Windows Server. Eu usei VisualSVN como Django Reinhardt sugeriu, e criou um gancho com uma extensão .cmd.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top