我是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);
答案 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
设置为native
或LF
。
它还允许用户创建标记,但不允许用户在创建标记后对其进行更改。这可以防止用户意外检出标签,进行更改,然后提交。
还有一件事:
查看Jenkins等连续构建系统。我发现的一件事是,通过仅仅进行持续构建,开发人员自然会改进他们的提交消息而不做任何执行。
那是因为提交消息现在很容易看到。 Jenkins显示每个构建中的更改,构建本身是否成功,测试结果等。它显示更改和提交注释。突然,提交注释对开发人员本身变得更有用,他们只是做了更好的评论。
您可以查看svn log
并查看我何时实施Jenkins:在没有提交注释或“重新格式化代码”或“非常有用”之类的有用内容之前em>进行了更改“(长度超过10个字符)。突然,评论是“修正了BUG-1233。在将其传递给foo方法之前检查了空指针”。