첫째 : STDERR에
- 메시지 만 인쇄 미리 커밋 스크립트의 종료는 제로 이외의 경우에만 있습니다. 그렇지 않으면 인쇄가 전혀 없습니다.
- 커밋 메시지는 커밋 전체에 대한 메시지입니다. 즉, 모든 단일 파일의 커밋 메시지를 확인하지 마십시오. 그들 모두에게 똑같습니다.
- 리비전 등록 정보
svn:log
을보고 커밋 메시지를 찾을 수 있습니다. 당신은 메시지를 볼 필요가 없습니다.
이 완전히 검증되지 않은 재 시도 :
당신이 있었다 :
CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | $GREP "^[U|A|M]" | $AWK '{print $2}' | $GREP \\.cpp$`
당신은을 통해하는 그렙을 통해 밀어를 여기
#!/bin/bash
REPOS="$1"
TXN="$2"
SVNLOOK="/usr/bin/svnlook"
AWK="/usr/bin/awk"
GREP="/bin/egrep"
SED="/bin/sed"
if "$SVNLOOK" changed -t $TXN | grep -q "^ *[UAM].*\.cpp$"
then
MESSAGE=$("$SVNLOOK" pget -t $TXN --revprop "$REPOS" svn:log)
if [ -z ${MESSAGE:16} ]
then
echo "Committing a *.cpp file, but didn't put a comment!" >&2
exit 1 #CPP, but message too short
else
exit 0 #CPP Files but message is long enough
fi
exit 0 #No CPP files
을 변경 중 일부입니다 awk 그리고 다른 grep을 통해. 대신, 한 번에 전체 라인을 보지 않으시겠습니까? [UAM]
수단
"$SVNLOOK" changed -t $TXN "$REPOS" | $GREP -q "^ *[UAM].*\.cpp$"
- 중 하나 또는
U
M
또는 A
. 각각 사이에 |
이 필요하지 않습니다.
$GREP -q
은 grep을 조용히합니다. 무언가를 찾으면 0을 반환하고 그렇지 않으면 1을 반환합니다. [...]
테스트 중괄호없이 if
문에 직접 입력 할 수 있습니다.
.*\.cpp$
은 나머지 줄을보고 그것이 끝나는 지보고있는 것을 의미합니다 .\.cpp
grep|awk|grep
파이프가 필요 없습니다.
- 로그 메시지가 하나뿐이므로 한 번 확인하면됩니다. 루프가 필요 없습니다.
- 알림 다시 진드기 대신
$(...)
을 사용합니다. 똑같은 일을하지만보기가 더 쉽습니다.
- 나는
${MESSAGE:16}
을 사용합니다. BASH에서 이것은 내 메시지의 16 문자 오프셋을 수행합니다. 내 메시지가 16 자보다 짧으면 ${MESSAGE:16}
이 비어 있습니다. 그런 다음 -z
을 사용하여 오프셋 문자열이 비 었는지 여부를 확인할 수 있습니다. 파이프를 sed에 저장하고 grep을 저장합니다.
이 기능이 약간 개선되었는지 확인하십시오. 실제로 이것을 훅 외부의 일반 셸 스크립트로 실행하십시오. -t
을 -r
으로 변경하고 다양한 개정 번호를 입력 할 수 있습니다.이렇게하면 스크립트를 후크로 시도하기 전에 먼저 스크립트를 확인할 수 있습니다. 그런 다음 pre-commit
이라고하고 사용 권한을 rwxr-xr-x
으로 설정했는지 확인하십시오.
심지어 더 나은, 내 pre-commit hook보십시오. 전투 테스트를 거쳐 더 많은 일을 할 수 있습니다. Perl 스크립트이지만 5.8 이상의 Perl 버전에서 실행해야하며 시스템에 Perl이 이미 설치되어있을 것입니다. svn : log의 길이를 확인할 수는 있지만, 내 후크 스크립트는 커밋 된 내용을 기반으로 지정할 수 없습니다. 그러나 어쨌든 *.cpp
파일이 커밋되었는지 여부와 상관없이 어떤 빈 커밋 메시지도 허용해야하는 이유는 무엇입니까?
사전 커밋 후크처럼 보입니다 (질문에 언급되지 않음). 그것은 서버 사이드 훅 스크립트인가요? 왜 'tortoisesvn'이라는 레이블을 추가 했습니까? 적어도 호출 자체를 기록하려고 했으므로 스크립트가 전혀 호출되지 않았는지 확인할 수 있습니다. – mliebelt
나중에 그것은 서버 쪽 hook.that 클라이언트 쪽에서 결과를 생산해야합니다 – shaggy