제목이 이상하게 들리겠지만 저는 다음을 달성하려고 노력하고 있습니다.
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%/.*%%' \
...