[英]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.