SVN预提交钩子

时间:2012-07-18 07:21:24

标签: perl svn tortoisesvn

我是svn.Svn存储库的新用户在Linux中,开发人员正在使用TSVN客户端工作。我实现了一个带有32个字符的正确注释的per-commit钩子。它在Linux中工作。但是我试过TSVN客户端提交带注释的代码少于32个字符。任何人都可以帮助我。

以下是代码:

$minchars = 10; 
$svnlook = '/usr/bin/svnlook'; 
#-------------------------------------------- 
$repos = $ARGV[0]; 
$txn = $ARGV[1]; 
$comment = `$svnlook log -t "$txn" "$repos"`; 
chomp($comment); 
if ( length($comment) == 0 ) { 
  print STDERR "A comment is required!"; 
  exit(1); 
} elsif ( length($comment) < $minchars ) { 
  print STDERR "Comment must be at least $minchars characters."; 
  exit(1); 
} 
exit(0);

1 个答案:

答案 0 :(得分:2)

试试这个:

将脚本复制到另一个目录并修改它以使用-r命令的svnlook参数而不是-t。然后,尝试使用应该失败的提交修订版。

例如:

$ cd $repo_dir/hooks
$ cp pre-commit $HOME
$ cd
$ vim pre-commit   #Change from Transaction to Revision

$ # Revision #123 should have failed
$ ./pre-commit $repo $rev

如果脚本没有产生错误,你可以尝试打印出引号中的注释以查看它的长度是否为零等。它可以帮助你找到脚本中可能存在的逻辑错误

您还应该在Perl脚本中使用use strict;use warnings;,因为它可以轻松发现您在脚本中可能没有意识到的错误。很容易忘记某个特定变量未必设置,或者您输错了变量。这些pragma将会发现这些类型的错误,这些错误似乎导致了Perl中大约90%的问题:

#! /usr/bin/env perl

use strict;
use warnings;

my $svnlook = "/usr/bin/svnlook";
my $minchars = 10; 

my $repos = $ARGV[0]; 
my $txn = $ARGV[1];
chomp ( my $comment = qx($svnlook log -t $txn $repos) );
if (not $comment) {
        die "A comment is required!\n";
}   
elsif ( length $comment  < $minchars ) { 
        die "Comment must be at least $minchars characters.\n";
}   
exit 0;

您也可以使用我的pre-commit脚本。它可用于验证提交注释的长度和结构。例如,您可以要求提交注释以要求缺陷ID。它还允许您控制谁拥有存储库的哪些部分的提交权限,并强制在某些文件上使用某些属性。例如,您可能希望确保所有shell脚本和Perl脚本都将svn:eol-style设置为nativeLF

它还允许用户创建标记,但不允许用户在创建标记后对其进行更改。这可以防止用户意外检出标签,进行更改,然后提交。


还有一件事:

查看Jenkins等连续构建系统。我发现的一件事是,通过仅仅进行持续构建,开发人员自然会改进他们的提交消息而不做任何执行。

那是因为提交消息现在很容易看到。 Jenkins显示每个构建中的更改,构建本身是否成功,测试结果等。它显示更改和提交注释。突然,提交注释对开发人员本身变得更有用,他们只是做了更好的评论。

您可以查看svn log并查看我何时实施Jenkins:在没有提交注释或“重新格式化代码”或“非常有用”之类的有用内容之前em>进行了更改“(长度超过10个字符)。突然,评论是“修正了BUG-1233。在将其传递给foo方法之前检查了空指针”。