누군가 SVN 저장소에 커밋할 때마다 코드에 몇 가지 스타일을 적용하고 싶고 이를 위해 astyle
커밋된 변경 사항에 svn 후크를 사용합니다 pre-commit
.
다음과 같이 파일 이름을 얻을 수 있지만 스타일을 적용하면 프로그램이 파일에서 데이터를 가져올 수 없는 것 같습니다.
for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS" | cut -b 5-); do
# echo $REPOS/$FILE 1>&2 # prints the files' paths
astyle --style=gnu -n $FILE
done
# commit the changes from astyle here
어떻게 이것을 달성할 수 있는지 아시나요?
답변1
유감스럽지만 나쁜 소식이 있습니다.넌 할 수 없어
에서 언급했듯이svn-books"Repository Hooks 구현" 장에서 Stop-Sign이 포함된 주석(알다시피,저것그 뜻은)
후크 스크립트는 거의 모든 작업을 수행할 수 있지만 후크 스크립트 작성자는 한 영역에 제한을 두어야 합니다. 즉, 커밋된 트랜잭션을 수정하기 위해 후크 스크립트를 사용하지 마십시오. 커밋되는 파일의 오류, 결함 또는 정책 위반을 자동으로 수정하기 위해 후크 스크립트를 사용하고 싶은 유혹이 있을 수 있지만 그렇게 하면 문제가 발생할 수 있습니다. Subversion은 특정 저장소 데이터 비트의 클라이언트 측 캐시를 유지 관리하며 이러한 방식으로 커밋 트랜잭션을 변경하면 이러한 캐시가 눈에 띄지 않을 정도로 오래될 수 있습니다. 이러한 불일치로 인해 예상치 못한 예상치 못한 동작이 발생할 수 있습니다. 트랜잭션을 수정하는 대신 사전 커밋 후크에서 트랜잭션을 검증하고 필요한 요구 사항이 충족되지 않으면 커밋을 거부해야 합니다. 보너스로 사용자는 신중하고 규정을 준수하는 작업 습관의 가치를 이해하게 됩니다.
CollabNet 최고 기술 책임자인 Jack Repenning도 다음과 같이 말했습니다.말하는이것
...슬프게도 말씀드리고 싶은 것이 있습니다. 아니요, 그렇게 할 수는 없습니다. 제출되는 파일의 파일 내용예(svnlook의 "changed" 및 "cat" 명령을 통해) 후크 스크립트에서 이를 수행할 수 있지만 데이터베이스에 이미 입력된 데이터의 복사본이 표시됩니다(실제로 커밋되지는 않았지만). 이를 수정하는 방법은 최종 트랜잭션 커밋만 허용하거나 거부하는 것입니다.
아직 시도해 볼 용기가 있다면 코드를 이해하는 대신 시도해 볼 수 있습니다.오래된 주제(2009), 저자는 “그것은 수정한다거래내용'