Question

Est-il possible d'utiliser le message de validation dans un crochet pre-commit dans le CVS? Le serveur CVS est en cours d'exécution à distance, et je l'accès à l'aide pserver.

Idéalement, je veux permettre à la commettras si les fichiers passent le filtre ou le message de commit contient un certain texte.

Je n'ai pas le choix d'utiliser un autre système de versionnage.

Était-ce utile?

La solution

Voici quelques tutoriels utiles pour en savoir plus:

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

Vous ne pouvez pas faire ce que vous voulez avec juste un crochet mais vous pouvez utiliser deux crochets, commitinfo vous permettra de vérifier les fichiers eux-mêmes et verifymsg vous permettra de vérifier le message. Les deux peuvent être utilisés pour annuler la commettras (les programmes ont juste besoin de sortir avec le statut 1). Si vous ne le saviez pas, checkoutlist, commitinfo et « verifymsg » peuvent être trouvés dans le répertoire CVSROOT de votre référentiel. Je recommande de mettre tous les scripts que vous écrivez des crochets dans ce répertoire aussi bien, mais il ne compte pas vraiment que vous obtenez de spécifier le chemin complet. En outre, perl n'est pas nécessaire ou nécessaire, tout simple pour moi d'écrire quelques exemples (stupides) dans:

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

acceptable

#/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: je l'ai écrit plus de ce du haut de ma tête sans test, donc je ne peux pas garantir qu'il fonctionne, mais il devrait vous obtenir au moins près

.

Modifier à nouveau , je viens de réaliser que j'étais à l'origine mal et vous pouvez passer à la fois le fichier journal et les noms se sont engagés à faire verifymsg la réponse un peu plus simple.

Autres conseils

Le CVS :: Trigger module Perl semble avoir une fonctionnalité expérimentale qui permet des valeurs de mise en cache entre l'appel de différents déclencheurs. La page mentionne explicitement passer les noms de commitinfo à verifymsg, alors peut-être il vous aide à réaliser ce que vous voulez.

Vous pouvez utiliser le fichier verifymsg dans le répertoire CVSROOT. Vous pouvez le configurer pour appeler un script qui peut vérifier le contenu du commentaire checkin. Vous pouvez rejeter la commettras en retournant non nulle.

Le fichier verifymsg par défaut contient plus de détails.

J'ai eu affaire à la même question. Jusqu'à présent, ma meilleure solution est d'obtenir le processus parent Id (getppid ()) et de l'utiliser le fichier temporaire ina que je peux mettre la liste des fichiers dans de commitinfo. Cet ID parent semble être le même pour le processus de verifymsg (sous AIX au moins). Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top