Tudo bem, embora (ainda) não responda completamente à pergunta, eu começo uma resposta aqui agora, e vou preenchê-la com quaisquer novas descobertas ...
Solução alternativa
Para contornar o problema, basta confirmar o diretório pai do caminho do comutador em vez do próprio caminho comutado ou um item filho dele.
Só para mencionar: ele não altera o comportamento para aplicar a propriedade do script de gancho recursivamente.
Sintaxe para o caminho do script do gancho (propriedades tsvn:*hook
)
Primeiro, ao especificar o caminho para um script de gancho, é muito importante que, assim que você usar um dos espaços reservados %REPOROOT%
ou %REPOROOT+%
, use a barra invertida /
como separador de caminho. Acredito que isso esteja ligado ao fato de que essas variáveis contêm a URL para a raiz do repositório internamente, de acordo com a documentação , mas não um caminho de cópia de trabalho local (WC). Para caminhos locais fixos, as barras invertidas /
e barras invertidas \
são aceitas.
Caso o caminho contenha ESPAÇOS , você deve colocá-lo entre aspas; você pode usar a cotação em geral, pois não prejudica de qualquer maneira.
Caminho normal vs. caminho comutado, Níveis de diretório
Vamos supor que temos um repositório em D:\TEST\repo
contendo /trunk
, /branches
, /tags
e /hooks
no nível superior, um script script.bat
em /hooks
com o conteúdo exit 0
, um arquivo chamado file.txt
in /trunk
, uma ramificação de /trunk
at /branches/test
e outra ramificação de /trunk
at /branch
; o WC está com check-out em D:\TEST\wc
, mas temos um check-out esparso , de modo que somente /trunk
e /hooks
estejam lá (ambos recursivamente).
Em seguida, configure uma nova propriedade tsvn:startcommithook
na raiz da WC, desta forma:
Agora tente confirmar qualquer coisa em qualquer local do WC (root, /trunk
, etc.); a caixa de diálogo aprovar / rejeitar script de gancho aparece, mostrando o seguinte caminho do script de gancho, que é o caminho correto, portanto, o script é executado ao clicar em 'Executar':
Agora mude o caminho WC local D:\TEST\wc\trunk
para /branches/test
e tente confirmar o arquivo WC local file.txt
; a caixa de diálogo aprovar / rejeitar mostra o seguinte caminho errado desta vez:
Ao clicar em "Executar", o script não pode ser executado, obviamente:
Mas ao alternar o caminho WC local D:\TEST\wc\trunk
para /branch
agora e tentar confirmar o arquivo WC local file.txt
, a caixa de diálogo aprovar / rejeitar mostra o caminho correto novamente como acima , e o script pode ser executado.
Portanto, aparentemente, profundidades diferentes no nível da hierarquia de diretórios de caminhos normais e comutados parecem anular a expansão adequada do espaço reservado %REPOROOT%
.
Esse comportamento é exatamente o mesmo no caso de o script de gancho ser confirmado ou não.