커밋된 코드의 복사본을 업데이트하는 SVN 후크 작성

커밋된 코드의 복사본을 업데이트하는 SVN 후크 작성

많은 하위 프로젝트가 저장된 SVN 저장소가 있습니다. 지금은 post-commit컴퓨터의 가능한 모든 폴더를 반복하고 svn update각각에서 실행합니다.

REPOS="$1"
REV="$2"
DIRS=("/path/to/local/copy/firstproject" "/path/to/local/copy/anotherproject" ... "/path/to/local/copy/spam")
LOGNAME=`/usr/bin/whoami`

for DIR in ${DIRS[@]}
do
    cd $DIR
    sudo /usr/bin/svn update --accept=postpone 2>&1 | logger
    logger "$LOGNAME Updated $DIR to revision $REV (from $REPOS) "
done

문제는 프로젝트 중 하나의 하위 폴더를 커밋할 때 이것이 느리고 중복된다는 것입니다. 어떤 DIRS를 사용해야 하는지 식별하는 더 좋은 방법이 있는지 궁금합니다.오직그걸 업데이트하세요.

이를 수행할 수 있는 방법이 있습니까? 내가 아는 한, 저장소의 어느 부분이 커밋되었는지, 따라서 어떤 디렉터리를 업데이트해야 하는지 확인할 방법이 없습니다.

각 프로젝트마다 별도의 저장소를 만드는 유일한 대안이 있습니까? (아마 처음부터 그랬어야 했는데, 그렇다면...)

답변1

어떤 DIRS를 사용해야 하는지 식별하고 해당 DIRS만 업데이트하는 더 좋은 방법이 있는지 궁금합니다.

svnlook dirs-changed당신이 찾고 있는 것이 바로 이것입니다:

# svnlook dirs-changed -r 40270 /path/to/the/repo
project1/foo/bar

다음과 같이 시도해 보세요.

#!/usr/local/bash4/bin/bash

typeset -A IP
typeset -A DOCROOT

PROJECTS="project1 project2"

IP=([project1]="ip1" [project2]="ip2")
DOCROOT=([project1]="/var/www/html/project1/" [project2]="/var/www/html/project2/")

REPO="$1"
REV="$2"

USER='deployer'

PROJECT=`svnlook dirs-changed -r "$REV" "$REPO" | awk -F "/" '{ print $1 }'`

ssh -t "$USER@${IP[$PROJECT]}" "cd ${DOCROOT[$PROJECT]} && svn up"

답변2

Quanta의 도움을 바탕으로 제가 사용한 스크립트는 다음과 같습니다.

REPO="$1"
REV="$2"
declare -A PROJECTS
PROJECTS=(\
    [project1]="/path/to/projects/project1 /path/to/projects/project1-devel" \
    [project2]="/path/to/projects/project2 /path/to/projects/project2-devel" \
    [project3]="/path/to/projects/project3 /path/to/projects/project3-devel" \
)

PROJECT=`svnlook dirs-changed -r "$REV" "$REPO" | awk -F "/" '{ print $1 }'`
DIRS=${PROJECTS[$PROJECT]}

for DIR in $DIRS
do
    cd $DIR
    sudo /usr/bin/svn update --accept=postpone 2>&1 | logger
    logger "$LOGNAME Updated $DIR to revision $REV (from $REPOS) "
done

제가 추가해야 했던 가장 큰 것은 라인이었습니다 declare -A PROJECTS. 어떤 이유에서인지 연관 배열/해시는 제가 이 작업을 수행할 때까지 작동하지 않습니다.

관련 정보