Отображение сообщения для пользователей перед фиксацией в Tortoise SVN - PullRequest
5 голосов
/ 17 января 2011

Мы используем Tortoise SVN для контроля исходного кода и уже настроили шаблон сообщения о коммите.

Я также хотел бы отображать некоторый текст пользователю, когда он фиксирует, который не включается в его сообщение о фиксации, в духе «Не забывай делать X!».

Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 18 января 2011

Я настроил аналогичную среду, используя Документы по черепахе и могу сказать: Да, это так! Операция включает в себя зацепку Start-Commit, которая заполняет строки, которые пользовательдолжен прочитать и Pre-Commit Hook, который снова удаляет строки:

Start-Commit Hook
Этот хук получает три параметра: PATH MESSAGEFILE CWD.MESSAGEFILE - это путь к временному файлу, который будет использоваться для хранения сообщения о коммите.Вы можете заполнить этот временный файл своим сообщением Не забудьте сделать X! Или вы добавляете к сообщению префикс, который вы будете рассматривать как комментарий в сообщении фиксации и отфильтровывать.Поскольку Git использует # в качестве комментария в сообщении фиксации, я сделал то же самое: каждая строка, начинающаяся с #, отфильтровывается из сообщения фиксации.И поэтому я бы написал сообщение # Don't forget to do X!.Пример реализации в Perl (не проверено):

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();

Хук Pre-Commit *
Этот хук получает четыре параметра: PATH DEPTH MESSAGEFILE CWD.Задача ловушки перед фиксацией состоит в том, чтобы отфильтровать сообщение, которое вы ввели MESSAGEFILE в ловушке запуска и фиксации (в противном случае оно будет отправлено на сервер как часть сообщения о фиксации, и это, вероятно, не то, чтохочу).Либо просто удалите ваше сообщение Не забудьте сделать X! или - если вы используете подход с комментариями, как я писал выше - удалите каждую строку, которая начинается со знака # (или соответствует шаблону ^\s*#) так как это комментарий в нашем мире.

Мы могли бы расширить наш файл для ловушки start-commit, чтобы обрабатывать также вещи перед фиксацией, поскольку число параметров различно.Решение о том, какой хук вызывать, состоит из числа параметров, переданных в скрипт (также не протестированных):

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";}
}

Чтобы активировать хуки, откройте настройки TortoiseSVN, перейдите к hook scripts и добавьтесценарий один раз как хук начала-фиксации и один раз как хук предварительной фиксации.Командная строка для вызова будет perl /path/to/script.А также проверьте Wait for the script to finish и Hide script while running.

Примечание
Если вам требуется дополнительная информация, передаваемая крючкам, вы также можете передать пользовательские параметры при назначении крючков внастройки TortoiseSVN.Если вы назначаете пользовательские параметры, они передаются в ловушку до параметров по умолчанию (как указано в docs ).

0 голосов
/ 17 января 2011

См. Документацию TortoiseSVN о клиентских скриптах подключения .

...