[英]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
设置为native
或LF
。
它还允许用户创建标记,但不允许用户在创建标记后对其进行更改。 这可以防止用户意外检出标签,进行更改,然后提交。
还有一件事:
看一下像Jenkins这样的连续构建系统。 我发现的一件事是,通过仅仅进行连续构建,开发人员自然地改进了他们的提交消息,而没有做任何类型的强制执行。
那是因为提交消息现在很容易看到。 Jenkins显示每个构建中的更改,构建本身是否成功,测试结果等。它显示更改和提交注释。 突然,提交注释对开发人员本身更有用,他们只是做了更好的评论。
您可以查看一个svn log
,看看我何时实现了Jenkins:在没有提交注释之前,或者“ 重新格式化的代码 ”或非常有用的“ 更改 ”(两个都超过10个字符)之类的有用的东西。 突然,评论是“ 固定BUG-1233。在将其传递给foo方法之前检查空指针 ”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.