2009-11-06 12 views
5

tengo que hacer lo siguiente:¿Cómo puedo acceder al archivo comprometido desde un enlace de precompilación de Subversion en Perl?

  1. Escribir gancho pre-commit en Perl

  2. gancho debe comprobar todos los archivos que se cometen por la presencia de algún texto, y fallar si ese texto no se encuentra

Básicamente, necesito un ejemplo de Perl hook que lea los archivos que se están confirmando.

Realmente estoy buscando una solución elegante con la menor cantidad de código.

Notas: Enganche debe utilizar svnlook u otra forma mejor de encontrar archivos.

Respuesta

11

gancho pre-commit:

my $repos = shift; 
my $txn = shift; 

foreach my $line (`$svnlook changed -t $txn "$repos"`) 
{ 
    chomp($line); 
    if ($line !~ /^([AUD]).\s\s(.+)$/) 
    { 
    print STDERR "Can't parse [$line].\n"; 
    exit(1); 
    } 
    else 
    { 
    my $action = $1; 
    my $file = $2; 
    chomp($file); 
    #If path has trailing slash, then it is a folder and we want to skip folders 
    if($file =~ /\/$/) 
    { 
    next; 
    } 
    my $fileContent = `$svnlook cat -t $txn "$repos" "$file"`; 
    if ($action =~ /[AU]/) 
    { 
     my @lines = split(/\n/, $fileContent); 
     #Check for whatever you need in this file's content 

    } 
    } 
} 
0

No debería ser demasiado difícil modificar this example in Python para hacer lo que desee. Consulte también el subdirectorio hooks de su repositorio para algunas plantillas y hook scripts y contributed hook scripts.

+0

@Alex No hay problema. Editar las publicaciones de otros es la forma de Stackoverflow y ayuda al sitio. –

0

Suena como que tienes la fundación descubierto ya:

  • lista get de todos los archivos que se cometen
  • buscar en cada uno de ellos a su vez de texto en particular
  • si no se encuentra el texto , rechazar compromiso

Encontrará información sobre cómo escribir los enlaces de precompilación en el manual.

Cuestiones relacionadas