2011-01-17 15 views

Respuesta

3

He creado un entorno similar con el Tortoise Docs y puedo decir: ¡Sí, lo es! operación implica un gancho start-commit que llena en las líneas que el usuario deberá leer y un gancho pre-commit que elimina thee líneas de nuevo:

start-commit gancho
Este gancho se pasa tres parámetros: PATH MESSAGEFILE CWD . MESSAGEFILE es la ruta a un archivo temporal que se usará para almacenar el mensaje de confirmación. Puede completar este archivo temporal con su mensaje ¡No olvide hacer X! O, prefije su mensaje con algo que tratará como comentario en el mensaje de confirmación y se filtrará. Dado que Git usa # como comentario en el mensaje de confirmación, hice lo mismo: cada línea que comienza con # se filtra del mensaje de confirmación. Y, por lo tanto, escribiría el mensaje # Don't forget to do X!. implementación de ejemplo en Perl (no probado):

use strict;       # what we always have 
use warnings;      # what we always have 
use Fcntl ':flock';     # lock files when writing 
use Carp;       # use croak instead of die 
use English qw(-no_match_vars); # words instad of cryptic variables 

sub startcommit_hook{ 
    # open the logfile 
    my $logfilename  = $ARGV[1]; 
    # write hint line about supported tags 
    open my $handle, '>:utf8', $logfilename 
    or croak "Opening $logfilename for writing failed\n"; 
    flock $handle, LOCK_EX; 
    print {$handle} "# Don't forget to do X!\n"; 
    flock $handle, LOCK_UN; 
    return close $handle or croak "unable to close $OS_ERROR"; 
} 

startcommit_hook(); 

gancho pre-commit
Este gancho se pasa cuatro parámetros: PATH DEPTH MESSAGEFILE CWD. El trabajo del gancho de precompromiso es filtrar el mensaje que completó en MESSAGEFILE en el enlace de inicio de la ejecución (de lo contrario irá como parte del mensaje de confirmación al servidor y probablemente esto no es lo que desea) . O simplemente borre su mensaje ¡No olvide hacer X! o –   si usa el enfoque de comentario como escribí anteriormente   – elimine cada línea que comience con un signo # (o que coincida con el patrón ^\s*#) ya que es un comentario en nuestro mundo.

Podríamos extender nuestro archivo para el enganche start-commit para manejar también las cosas precompuestas ya que el número de parámetros es diferente. La decisión sobre el gancho para llamar está compuesta por el parámetro de recuento de pasadas al script (también no probado):

use strict;       # what we always have 
use warnings;      # what we always have 
use feature 'switch';    # for given-when construct 
use Fcntl ':flock';     # lock files when writing 
use Carp;       # use croak instead of die 
use English qw(-no_match_vars); # words instad of cryptic variables 

sub startcommit_hook{ 
    # open the logfile 
    my $logfilename  = $ARGV[1]; 
    # write hint line about supported tags 
    open my $handle, '>:utf8', $logfilename 
    or croak "Opening $logfilename for writing failed\n"; 
    flock $handle, LOCK_EX; 
    print {$handle} "# Don't forget to do X!\n"; 
    flock $handle, LOCK_UN; 
    return close $handle or croak "unable to close $OS_ERROR"; 
} 

sub precommit_hook{ 
    my $logfilename  = $ARGV[2]; 
    # first, read the logfile 
    open my $handle,'<:utf8',$logfilename or croak "Error reading file contents of $logfilename: $OS_ERROR\n"; 
    my @content = <$handle>; 
    close $handle or croak "unable to close: $OS_ERROR"; 
    chomp @content; 

    # now, write it, ignoring the comment lines 
    open my $handle, '>:utf8', $logfilename 
    or croak "Opening $logfilename for writing failed\n"; 
    flock $handle, LOCK_EX; 

    foreach my $line(@content){ 
    if($line !~ /^\s*#/){ # line has no comment, print it. 
     print {$handle} $line . "\n"; 
    } 
    } 

    flock $handle, LOCK_UN; 
    close $handle or croak "unable to close $OS_ERROR"; 
    return; 
} 

given($#ARGV){ 
    when (3){startcommit_hook();} 
    when (4) {precommit_hook();} # no user supplied -> auto lookup 
    default {croak "Invalid number of parameters";} 
} 

Para activar los ganchos, abra la configuración de TortoiseSVN, vaya a hook scripts y añadir el guión una vez, ya start-commit hook y una vez como pre-commit hook. La línea de comando para llamar sería perl /path/to/script. Y también marque Wait for the script to finish y Hide script while running.

Nota
Si necesita más información que pasa a los ganchos, también se puede pasar parámetros personalizados cuando asigne los ganchos en la configuración de TortoiseSVN. Si asigna parámetros personalizados, estos se pasan al enganche antes de los parámetros predeterminados (como se indica en el docs) pasan.

Cuestiones relacionadas