O script pós-compromisso SVN é executado na linha de comando, mas não ao cometer arquivos (s) para SVN

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

Pergunta

Eu tenho um gancho pós-comprometimento no SVN que corre bem na linha de comando quando eu corro

env - ./foo.sh /path/to/svn/repos/ 12345

Mas quando o script é chamado do SVN, ele não parece funcionar.

O que estou basicamente fazendo é verificar os arquivos comprometidos e, se um arquivo específico for modificado, faço uma exportação de SVN para um compartilhamento de rede. Funciona bem a partir da linha de comando.

O script pós-comprometimento é o seguinte:

#!/bin/sh

REPOS="$1"
REV="$2"

CHANGED=`/usr/bin/svnlook changed -r "$REV" "$REPOS"`
SOURCE="svn+ssh://localhost/path/to/svn/repos/somefile.zip"
DEST="/mnt/build/somefile-r$REV.zip"

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        `/usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST`
fi

exit 0

Existe uma maneira de produzir alguma mensagem de erro para um arquivo quando o script é executado, ou especificamente a linha de exportação SVN (onde acho que pode haver um problema)?

Foi útil?

Solução

A saída padrão de um script de gancho é descartada, mas o erro padrão remonta ao cliente, pelo menos nas versões recentes de subversão. Eu pensei que era assim por um tempo, mas o livro SVN 1.4 diz que a saída é descartada, então você pode verificar se está executando uma versão atualizada do servidor-vendo o erro padrão O fluxo é uma boa maneira de obter um aviso precoce de tipos comuns de erro.

Para enviar a saída de um comando para um arquivo e incluir a saída de erro padrão no arquivo também para manter tudo em um só lugar, faça

command >/path/to/logfile 2>&1

Usar >> ao invés de > Para anexar o arquivo:

command >>/path/to/logfile 2>&1

Como a saída de erro padrão é enviada de volta ao cliente SVN, você também pode passar as informações da saída padrão de volta dessa maneira, seja para um único comando,

command 1>&2

ou para todo o roteiro, colocando

exec 1>&2

no topo do script.

À primeira vista, vejo um problema com o seu script: assumindo que as backtotes na linha de exportação SVN não sejam um artefato da marcação, você deve removê -las. (Eles executarão o comando de exportação que você escreveu e, em seguida, pegará sua saída e executará essa saída como outro comando - quase certamente não o que você pretendia.)

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        /usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST 1>&2
fi

(Eu não sabia sobre a sintaxe do teste duplo quadrocete em Bash, essa é uma nova e agradável descoberta para mim!)

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