Pergunta

É possível usar a mensagem de commit em um gancho pre-commit no CVS? O servidor CVS está sendo executado remotamente, e eu acessá-lo usando pserver.

Idealmente, eu quero permitir que o commit se os arquivos de passar o filtro ou a cometer mensagem contém um determinado texto.

Eu não tenho uma escolha para usar outro sistema de controle de versão.

Foi útil?

Solução

Aqui estão alguns tutoriais úteis para ler mais:

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

Você não pode fazer o que quiser com apenas um gancho, mas você pode usar dois ganchos, commitinfo vai deixar você verificar-se os arquivos e verifymsg vai deixar você verificar a mensagem. Ambos podem ser usados ??para cancelar o commit (os programas só precisa para sair com o status 1). No caso de você não estava ciente, checkoutlist, commitinfo e 'verifymsg' podem ser encontrados no diretório CVSROOT do repositório. Eu recomendo colocar todos os scripts que você escreve como ganchos nesse diretório, bem como, mas realmente não importa como você começa a especificar o caminho completo. Além disso, perl não é necessário ou exigido, apenas simples para mim escrever alguns (tolas) exemplos em:

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

aceitável

#/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:. Eu escrevi a maior parte deste fora do topo da minha cabeça com nenhum teste, então não posso garantir isso funciona, mas ele deverá fazê-lo pelo menos perto

Editar novamente , eu só percebi que eu estava originalmente errado e você pode passar tanto o arquivo de log e os nomes de arquivos empenhada em verifymsg fazendo a resposta um pouco mais simples.

Outras dicas

O CVS :: Gatilho Perl módulo parece ter uma experimental recurso que permite para armazenamento em cache valores entre a chamada de gatilhos diferentes. A página menciona explicitamente passando os nomes dos arquivos de commitinfo para verifymsg, talvez por isso o ajuda a conseguir o que deseja.

Você pode usar o arquivo verifymsg no diretório CVSROOT. Você pode configurá-lo para chamar um script que pode verificar o conteúdo do comentário checkin. Você pode rejeitar a cometer retornando não-zero.

O padrão verifymsg arquivo contém mais detalhes.

Eu tenho lidado com o mesmo problema. Até agora o meu melhor solução tem sido para obter o processo pai Id (getppid ()) e usá-lo ina arquivo temporário que eu possa colocar a lista de arquivos em de commitinfo. Esta ID do pai parece ser a mesma para o processo verifymsg (no AIX pelo menos). Boa sorte.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top