Mostrar un post a los usuarios precomprometidos en Tortoise SVN

Utilizamos Tortoise SVN para el control de fuente, y ya hemos configurado una plantilla de post de confirmación.

También me gustaría mostrar algo de text al usuario cuando se compromete, que no se incluye en su post de confirmación, en la línea de "¡No olvides hacer X!".

es posible?

Configuré un entorno similar con los Documentos de Tortoise y puedo decir: ¡ Sí, lo es! La operación implica un gancho de inicio-comisión que completa las líneas que el usuario debe leer y un gancho de precompromiso que le quita las líneas nuevamente:

Gancho de inicio de compromiso
A este gancho se le pasan tres parameters: PATH MESSAGEFILE CWD . MESSAGEFILE es la ruta a un file temporal que se usará para almacenar el post de confirmación. Puede completar este file temporal con su post ¡No olvide hacer X! O bien, prefija su post con algo que tratará como comentario en el post de confirmación y se filtrará. Como Git usa # como comentario en el post de confirmación, hice lo mismo: cada línea que comienza con # se filtra del post de confirmación. Y, por lo tanto, escribiría el post # 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 de precompromiso
Este gancho pasa cuatro parameters: PATH DEPTH MESSAGEFILE CWD . El trabajo del MESSAGEFILE es filtrar el post que rellenó en MESSAGEFILE en el MESSAGEFILE de inicio de la MESSAGEFILE (de lo contrario irá como parte del post de confirmación al server y probablemente esto no sea lo que desea) . O simplemente borre su post ¡No olvide hacer X! o – si usa el enfoque de comentario como escribí arriba – 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 file para el gancho start-commit para manejar también las cosas de pre-commit ya que el número de parameters es diferente. La decisión sobre qué hook to call se compone del recuento de parameters pasado 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 configuration de TortoiseSVN, vaya a los hook scripts y añada el guión una vez como gancho de inicio-confirmación y una vez como gancho de pre-confirmación. La línea de command 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 pasada a los ganchos, también puede pasar parameters personalizados cuando asigne los ganchos en la configuration de TortoiseSVN. Si asigna parameters personalizados, estos pasan al anzuelo antes de que se pasen los parameters pnetworkingeterminados (como se indica en los documentos ).

Consulte la documentation de TortoiseSVN sobre las secuencias de commands del gancho del lado del cliente .