O título deve parecer estranho, mas estou tentando conseguir o seguinte:
Localização do repositório SVN: /home/flx/svn/flxdev Estrutura "flxdev" do repositório SVN:
+ Project1
++ files
+ Project2
+ Project3
+ Project4
Estou tentando configurar um gancho pós-commit que faz check-out automaticamente do outro lado quando faço um commit.
O documento pós-commit lista explicitamente o seguinte:
# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit. Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the
# following ordered arguments:
#
# [1] REPOS-PATH (the path to this repository)
# [2] REV (the number of the revision just committed)
Então fiz o seguinte comando para testar:
REPOS="$1"
REV="$2"
echo "Updated project $REPOS to $REV"
No entanto, quando edito arquivos no Projeto1, por exemplo, isso gera"Projeto atualizado /home/flx/svn/flxdev para 1016"
Eu gostaria que isso fosse:"Projeto atualizado Project1 para 1016"
Ter essa variável me permite especificar diferentes ações por projeto pós-confirmação. Como posso especificar o parâmetro do projeto?
Obrigado!
Denis
Responder1
O seguinte pode fazer o que você deseja:
#!/bin/bash
REPOS="$1"
REV="$2"
echo In revision $REV, the following projects were changed:
svnlook dirs-changed "$REPOS" --revision "$REV" \
| sed 's%/.*%%' \
| sort -u \
| while read PROJ ; do
echo "$PROJ"
done
Uma explicação do que está acontecendo, caso você não esteja muito familiarizado com scripts de shell:
- usamos
svnlook
para obter a lista de diretórios que foram alterados - usamos
sed
para cortar o primeiro "/
" e tudo depois dele - então temos uma lista de nomes de projetos, possivelmente com duplicatas. - usamos
sort -u
("classificar exclusivo") para eliminar duplicatas - um por um, lemos cada nome em $PROJ e fazemos algo com ele.
Você pode substituir a echo "$PROJ"
linha pelo que quiser fazer com o nome do projeto. Se vários projetos foram alterados no mesmo commit, tudo o que você colocar lá será executado uma vez para cada projeto alterado, com $PROJ definido apropriadamente.
Este script não mostrará se os arquivos foram adicionados à raiz do repositório, mas se foram adicionados diretórios, eles aparecerão na lista de projetos modificados. Se você quiser que a raiz também seja listada, você pode substituir a seguinte linha sed e ela aparecerá como "/". Se você fizer isso, tome cuidado para não verificar todo o repositório por acidente!
...
| sed '/^\/$/!s%/.*%%' \
...