Oto kilka przydatnych tutoriali, aby dowiedzieć się więcej:
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
Nie możesz robić, co chcesz za pomocą jednego haka, ale można korzystać z dwóch haków,
commitinfo
pozwolisz sprawdź same pliki, a verifymsg
pozwoli ci zweryfikować wiadomość. Oba mogą być użyte do anulowania zatwierdzenia (programy muszą wyjść ze statusem 1). W przypadku, gdy nie byłeś tego świadomy, checkoutlist
, commitinfo
i "verifyymsg" można znaleźć w katalogu CVSROOT twojego repozytorium. Polecam umieszczenie wszystkich skryptów, które piszesz, jako hooków w tym katalogu, ale nie ma to znaczenia, gdy dojdziesz do określenia pełnej ścieżki. Ponadto, Perl nie jest konieczne lub wymagane, tylko proste dla mnie napisać kilka (głupie) Przykłady w:
checkoutlist
# 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
dopuszczalne
#/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;
Zastrzeżenie emptora: Napisałem większość tego z mojej głowy bez żadnych testów, więc nie mogę zagwarantować, że to działa, ale powinno ci to przynajmniej przybliżyć.
Edit ponownie, zdałem sobie sprawę, że był pierwotnie źle i można przejść zarówno logfile i zaangażowanych nazwy plików na verifymsg
czyni odpowiedź trochę prostsze.
W jakiej wersji CVS próbowałeś? W mojej wersji, gdy określę% s w pliku 'verifyymsg', nie otrzymam plików zatwierdzonych, nadal otrzymuję tylko plik dziennika. – dreamlax
@dreamlax Nigdy nie miałem potrzeby używać 'verifyymsg', tak jak ty, użyłem tylko' loginfo' i 'commitinfo' ale pomyślałem, że znalazłem kilka przykładów online, które pokazały' verifyymsg' akceptującą zarówno log plik i% s. Jeśli to nie zadziała, być może będziesz musiał powrócić do jakiejś komunikacji między skryptem 'commitinfo' a skryptem' verifyymsg'. –
@dreamlax Czy mógłbyś spełnić oba kryteria? Wtedy mogłaby działać wcześniejsza wersja mojej odpowiedzi, która użyłaby commitinfo i verifyymsg. Sądzę, że zależy to od tego, czy chodziło o logiczne **, czy **, lub bardziej typowo angielskie ** lub **. –