Subversion 다중 체크아웃 커밋 후 후크?

Subversion 다중 체크아웃 커밋 후 후크?

제목이 이상하게 들리겠지만 저는 다음을 달성하려고 노력하고 있습니다.

SVN 저장소 위치: /home/flx/svn/flxdev SVN 저장소 "flxdev" 구조:

 + Project1
 ++ files
 + Project2
 + Project3
 + Project4

커밋을 할 때 상대방에서 자동으로 체크아웃하는 커밋 후 후크를 설정하려고 합니다.

커밋 후 문서에는 다음 내용이 명시적으로 나열되어 있습니다.

# 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)

그래서 테스트를 위해 다음 명령을 내렸습니다.

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

그러나 예를 들어 Project1에서 파일을 편집하면 다음과 같이 출력됩니다."프로젝트 /home/flx/svn/flxdev를 1016으로 업데이트했습니다."

나는 이것이 다음과 같기를 바란다:"프로젝트 Project1을 1016으로 업데이트했습니다."

이 변수를 사용하면 커밋 후 프로젝트별로 다른 작업을 수행하도록 지정할 수 있습니다. 프로젝트 매개변수를 어떻게 지정할 수 있나요?

감사해요!

데니스

답변1

다음은 원하는 작업을 수행할 수 있습니다.

#!/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

쉘 스크립팅에 익숙하지 않은 경우를 대비해 진행 상황에 대한 설명:

  • 우리는 svnlook변경된 디렉토리 목록을 얻는 데 사용합니다.
  • 우리는 sed첫 번째 " "와 그 이후의 모든 것을 잘라내는 데 사용합니다 /. 그러면 중복될 수도 있는 프로젝트 이름 목록이 생깁니다.
  • sort -u중복을 제거하기 위해 ("고유 정렬")을 사용합니다.
  • 하나씩 $PROJ에 각 이름을 읽어서 뭔가를 합니다.

echo "$PROJ"해당 줄을 프로젝트 이름으로 원하는 대로 바꿀 수 있습니다 . 동일한 커밋에서 여러 프로젝트가 변경된 경우 거기에 무엇을 넣든 변경된 각 프로젝트에 대해 $PROJ가 적절하게 설정되어 한 번 실행됩니다.

이 스크립트는 파일이 저장소의 루트에 추가되었는지 여부를 표시하지 않지만 디렉터리가 추가된 경우 수정된 프로젝트 목록에 표시됩니다. 루트도 나열하려면 다음 sed 줄을 대체하면 "/"로 표시됩니다. 이렇게 하면 실수로 전체 저장소를 체크아웃하지 않도록 주의하세요!

...
    | sed '/^\/$/!s%/.*%%' \
...

관련 정보