Por que não consigo executar um script de gancho do lado do cliente ao confirmar um caminho comutado?

3

Eu tenho um repositório SVN (versão 1.9.2) e estou usando um cliente TortoiseSVN (versão 1.9.2) em uma máquina com Windows 7 (x64). Há scripts de gancho do lado do cliente (start-commit, pre-commit e post-commit), que são armazenados no repositório e, é claro, estão disponíveis na cópia de trabalho local. Os scripts são instalados usando as propriedades especiais tsvn:startcommithook , tsvn:precommithook e tsvn:postcommithook , cada uma apontando para o respectivo arquivo de script usando a variável %REPOROOT% para evitar a necessidade de especificar o caminho absoluto da cópia de trabalho.

Quando eu confirmo as alterações no repositório, os scripts de gancho (arquivos em lote, .bat ) funcionam bem.

No entanto, quando tento confirmar alterações em arquivos em um caminho comutado, aparece o seguinte erro:
Eocommitnãopodeserfeitoapósaconfirmaçãodamensagem,odiálogodecommitnãoaparece.

Acreditoqueesseerronãoéacionadopelosscriptshook(porquenãoháalteraçãoquandoescrevoexit0ouexit1nosscriptscomooúnicocomando),maspeloTortoiseSVNaotentarexecutá-los,oque,poralgummotivo,parecenãoconseguirmaisencontrarorespectivoscript.

Então,comopossousarscriptsdegancholocalizadosnorepositórioe,portanto,nacópiadetrabalho?

Substituiravariável%REPOROOT%porcaminhoscompletosabsolutosnãoalteraocomportamento.

Quandoeusubstituoavariável%REPOROOT%por%REPOROOT+%naspropriedadestsvn:*commithook,nadamudaparacaminhoscomutados(assimamensagemdeerromencionadaaparece),masparacaminhospadrão,nenhumscriptdeganchoéexecutadoenãoháerromensagemdepoisdetudo.

Assimcomoumaobservação:paraverificarseumscriptdeganchoéounãotentadoserdisparado,confionaaparênciadodiálogodeaprovação/rejeiçãodoTortoiseSVN:

    
por aschipfl 12.07.2017 / 17:45

1 resposta

1

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.

    
por 21.06.2018 / 01:05