繁体   English   中英

SVN预提交钩子

[英]SVN Pre-Commit hook

我是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);

尝试这个:

将脚本复制到另一个目录并修改它以使用svnlook命令的-r参数而不是-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

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

你也应该使用use strict; use warnings; 在你的Perl脚本中,因为它很容易找到你可能没有意识到你的脚本中的错误。 很容易忘记某个特定变量未必设置,或者您输错了变量。 这些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;

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

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


还有一件事:

看一下像Jenkins这样的连续构建系统。 我发现的一件事是,通过仅仅进行连续构建,开发人员自然地改进了他们的提交消息,而没有做任何类型的强制执行。

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

您可以查看一个svn log ,看看我何时实现了Jenkins:在没有提交注释之前,或者“ 重新格式化的代码 ”或非常有用的“ 更改 ”(两个都超过10个字符)之类的有用的东西。 突然,评论是“ 固定BUG-1233。在将其传递给foo方法之前检查空指针 ”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM