Gancho pós-commit do multi-checkout do Subversion?

2

O título deve parecer estranho, mas estou tentando alcançar o seguinte:

Localização do repositório SVN: / home / flx / svn / flxdev Repo SVN "flxdev" estrutura:

 + Project1
 ++ files
 + Project2
 + Project3
 + Project4

Eu estou tentando configurar um gancho post-commit que automaticamente faz check-out no outro lado quando eu faço um commit.

O documento de pós-confirmação 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 eu fiz o seguinte comando para testar:

REPOS="$1"
REV="$2"
echo "Updated project $REPOS to $REV"

No entanto, quando edito arquivos no Project1, por exemplo, isso gera "Projeto / home / flx / svn / flxdev atualizado para 1016"

Eu gostaria que isso fosse: "Projeto 1 projeto atualizado para 1016"

Ter essa variável permite especificar ações diferentes por projeto pós-confirmação. Como posso especificar o parâmetro do projeto?

Obrigado!

Dennis

    
por FLX 22.12.2010 / 19:55

1 resposta

1

O seguinte pode fazer o que você quiser:

#!/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 o shell de script:

  • 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 ("sort unique") para eliminar duplicatas
  • um por um, lemos cada nome em $ PROJ e fazemos algo com ele.

Você pode substituir a linha echo "$PROJ" pelo que deseja fazer com o nome do projeto. Se vários projetos foram alterados no mesmo commit, 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 os diretórios foram adicionados, 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, tenha cuidado para não checar o repositório inteiro por acidente!

...
    | sed '/^\/$/!s%/.*%%' \
...
    
por 05.01.2011 / 08:42