문제

CVS의 사전 커밋 후크에서 커밋 메시지를 사용할 수 있습니까? CVS 서버는 원격으로 실행 중이며 pserver.

이상적으로는 파일이 필터를 전달하면 커밋을 허용하고 싶습니다. 또는 커밋 메시지에는 특정 텍스트가 포함되어 있습니다.

다른 버전 작성 시스템을 사용할 선택이 없습니다.

도움이 되었습니까?

해결책

자세한 내용을 읽을 수있는 유용한 튜토리얼은 다음과 같습니다.

http://durak.org/sean/pubs/software/cvsbook/the-commitinfo-and-loginfo-and-rcsinfo-files.html
http://durak.org/sean/pubs/software/cvsbook/the-verifymsg-and-rcsinfo-files.html#the-verifymsg-and-rcsinfo-files

하나의 후크로 원하는 것을 할 수는 없지만 두 개의 후크를 사용할 수 있습니다. commitinfo 파일 자체를 확인할 수 있습니다 verifymsg 메시지를 확인할 수 있습니다. 둘 다 커밋을 취소하는 데 사용될 수 있습니다 (프로그램은 상태 1으로 종료해야 함). 당신이 알지 못했다면 checkoutlist, commitinfo 그리고 'verifymsg'는 모두 저장소의 CVSROOT 디렉토리에서 찾을 수 있습니다. 해당 디렉토리에 후크로 쓰는 스크립트를 넣는 것이 좋습니다. 그러나 전체 경로를 지정할 때는 중요하지 않습니다. 또한, Perl은 필요하지 않거나 필요하지 않으며, 몇 가지 (어리석은) 예제를 작성하는 것이 간단합니다.

체크 아웃리스트

# these files will be automatically checked out for you
acceptable

verifymsg

# specifies which file to run as hook, %l is filename of log message
# bar$     /path/to/repo/CVSROOT/verify_ends_in_bar %l
DEFAULT    /path/to/repo/CVSROOT/acceptable %l %s

허용 가능

#/usr/bin/perl -w

use strict;
use warnings;

# this would be simpler if cvs passed sane arguments
my ($logfile, $dir, @files) = @ARGV;
my $grep = `grep -i 'accept liability' $logfile`;
exit 0 if $grep;

my $found = 0;
foreach my $file (@files) {
    my $path = join '/', $dir, $file;
    die "Can't find file $path" if ! -e $path;
    my $grep = `grep -i 'evidence of any deliberation' $path`;
    $found++ if $grep;
}
die "You must accept liability or show evidence of deliberation" if $found < @files;

주의 사항 : 나는 테스트없이 내 머리 꼭대기에 이것의 대부분을 썼으므로 그것이 작동하도록 보장 할 수는 없지만 적어도 당신을 가까이 데려 가야합니다.

다시 편집하십시오, 방금 내가 원래 틀렸다는 것을 깨달았고 로그 파일과 커밋 된 파일 이름을 모두 전달할 수 있습니다. verifymsg 답을 조금 더 간단하게 만듭니다.

다른 팁

그만큼 CVS :: 트리거 Perl 모듈에는 An이있는 것 같습니다 실험 다른 트리거의 호출 사이에 값을 캐싱 할 수있는 기능. 이 페이지는 CommitinFo에서 Filename을 전달하여 VerifyMSG로 전달하는 것을 명시 적으로 언급하므로 원하는 것을 달성하는 데 도움이 될 수 있습니다.

당신은 사용할 수 있습니다 verifymsg 파일 CVSROOT 예배 규칙서. 체크인 주석의 내용을 확인할 수있는 스크립트를 호출하도록 구성 할 수 있습니다. 0이 아닌 것을 반환하여 커밋을 거부 할 수 있습니다.

기본 verifymsg 파일에는 자세한 내용이 포함되어 있습니다.

나는 같은 문제를 다루고있다. 지금까지 최상의 솔루션은 Parent Process ID (getppid ())를 가져 와서 CommitinFo에서 파일 목록을 넣을 수있는 INA Temp 파일을 사용하는 것이 었습니다. 이 상위 ID는 verifymsg 프로세스 (최소한 AIX에서)와 동일합니다. 행운을 빕니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top