Domanda

E 'possibile utilizzare il messaggio di commit in un gancio pre-commit nel CVS? Il server CVS è in esecuzione da remoto, e ho accedere mediante pserver.

Idealmente, voglio permettere il commit se i file passano il filtro o il messaggio di commit contiene un determinato testo.

Non ho una scelta di utilizzare un altro sistema di controllo delle versioni.

È stato utile?

Soluzione

Ecco alcuni tutorial utili per saperne di più:

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

Non si può fare quello che vuoi con un solo gancio, ma è possibile utilizzare due ganci, commitinfo vi permetterà di verificare i file stessi e verifymsg vi permetterà di verificare il messaggio. Entrambi possono essere utilizzati per annullare il commit (i programmi solo bisogno di uscire con stato 1). Nel caso in cui non erano a conoscenza, checkoutlist, commitinfo e 'verifymsg' si possono trovare nella directory CVSROOT del repository. Suggerirei di mettere tutti gli script si scrivono come ganci in quella directory pure, ma non importa come si arriva a specificare il percorso completo. Inoltre, perl non è necessario o richiesto, solo semplice per me scrivere alcuni esempi (sciocche) in:

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

accettabile

#/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;

Caveat emptor: Ho scritto la maggior parte di questo fuori dalla parte superiore della mia testa con nessun test quindi non posso garantire che funziona ma dovrebbe arrivare almeno vicino

.

Modifica di nuovo , ho capito che ero in origine sbagliato e si può passare sia il file di log e i nomi dei file impegnati per verifymsg rendere la risposta un po 'più semplice.

Altri suggerimenti

Il CVS :: trigger modulo Perl sembra avere un sperimentale funzione che consente per i valori di cache tra il richiamo di diversi trigger. La pagina menziona esplicitamente passando i nomi dei file da commitinfo a verifymsg, così forse ti aiuta a raggiungere ciò che si desidera.

È possibile utilizzare il file nella directory verifymsg CVSROOT. È possibile configurarlo per chiamare uno script in grado di verificare il contenuto del commento checkin. È possibile rifiutare il commit restituendo diverso da zero.

Il file predefinito verifymsg contiene ulteriori dettagli.

Ho avuto a che fare con lo stesso problema. Finora il mio migliore soluzione è stata quella di ottenere l'ID processo padre (getppid ()) e usarlo file temporaneo ina che posso mettere l'elenco dei file in da commitinfo. Questo ID genitore sembra essere lo stesso per il processo verifymsg (su AIX almeno). Buona fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top