Frage

Ist es möglich, verwenden Sie die Nachricht in einem pre-commit Haken in CVS begehen? Der CVS-Server läuft der Ferne, und ich auf sie pserver verwenden.

Im Idealfall möchte ich die verpflichten ermöglichen, wenn die Dateien die Filter passieren oder die Commit-Nachricht enthält bestimmten Text.

Ich habe keine andere Wahl eines anderes Versionierungssystem zu verwenden.

War es hilfreich?

Lösung

Hier sind einig nützlich Tutorials mehr zu lesen:

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

Sie können nicht tun, was Sie mit nur einem Haken wollen, aber Sie können zwei Haken verwenden, commitinfo lassen Sie die Dateien selbst überprüfen und verifymsg lassen Sie die Nachricht überprüfen. Beide können verwendet werden, um zu annullieren commit (die Programme müssen nur mit dem Status beenden 1). Falls Sie nicht bewusst waren, checkoutlist, commitinfo und ‚verifymsg‘ können alle im CVSROOT-Verzeichnis Ihres Repository. Ich würde empfehlen, alle Skripte, die Sie als Haken auch in diesem Verzeichnis schreiben setzen, aber es ist nicht wirklich wichtig, wie Sie den vollständigen Pfad angeben, erhalten. Auch Perl ist nicht notwendig oder erforderlich ist, nur einfach für mich ein paar (dumme) Beispiele zu schreiben:

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

akzeptabel

#/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: Ich schrieb die meisten dieser aus der Spitze von meinem Kopf ohne Prüfung, damit ich nicht garantieren kann, es funktioniert, aber es sollte zumindest nahe kommen

.

Bearbeiten wieder , erkannte ich, nur, dass ich ursprünglich nicht in Ordnung war, und Sie können sowohl die Logdatei und die engagierten Dateinamen die Antwort ziemlich viel einfacher verifymsg passieren zu machen.

Andere Tipps

Die CVS :: Auslöser scheint Perl-Modul ein experimentelles Feature zu haben, die für das Caching von Werten zwischen dem Aufruf verschiedenen Trigger ermöglicht. Die Seite explizit erwähnt die Dateinamen von commitinfo vorbei verifymsg, vielleicht hilft es Ihnen, zu erreichen, was Sie wollen.

Sie können die verifymsg Datei im CVSROOT Verzeichnis verwenden. Sie können es so konfigurieren, ein Skript aufrufen, die den Inhalt des checkin Kommentar überprüfen können. Sie können die durch die Rückkehr nicht Null ablehnen begehen.

Die Standard-verifymsg Datei enthält weitere Details.

Ich habe mit dem gleichen Problem beschäftigt. Bisher meine beste Lösung war, den übergeordneten Prozess Id (getppid ()) und verwenden Sie es ina temporäre Datei zu erhalten, die ich die Liste der Dateien in von commitinfo setzen können. Diese Eltern-ID scheint das gleiche für den verifymsg Prozess zu sein (unter AIX zumindest). Viel Glück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top