2012-07-18 164 views
1

我是新來的svn.Svn倉庫是在Linux中,開發人員正在使用TSVN client.I實施了一個每提交鉤子與適當的32個字符的評論。它正在Linux 。但我試着在TSVN客戶端提交代碼,註釋小於32個字符,它可以工作。任何人都可以幫助我。SVN預提交鉤子

下面是代碼:

$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

請出示腳本。另外,看看http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-repository-hooks.html – simbabque 2012-07-18 07:34:30

+0

$ minchars = 10; $ svnlook ='/ usr/bin/svnlook'; #------------------------------ -------------- $ repos = $ ARGV [0]; $ txn = $ ARGV [1]; $ comment ='$ svnlook log -t「$ txn」「$回購「'; 格格($評語); 如果(長度($評論)== 0){ 打印STDERR 」需要一個評論「;! 出口(1);} elsif(長度($ comment)<$ minchars){ 打印STDERR「註釋必須至少爲$ minchars字符。 exit(1); } exit(0); – user1280241 2012-07-18 12:02:04

+0

我運行這個腳本是subversion.it工作正常。但開發人員正在使用TSVN我怎麼能限制開發商沒有一個合適的提交。 – user1280241 2012-07-18 12:03:09

回答

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;,因爲它很容易發現您可能未意識到自己在腳本中遇到的錯誤。很容易忘記一個特定的變量不一定被設置,或者你錯誤地輸入了一個變量。這些編譯指示將拿起這些類型的錯誤,這似乎引起的問題約90%在Perl:

#! /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腳本。它可以用來驗證提交評論的長度和結構。例如,您可能需要提交評論才能要求缺陷標識。它還允許您控制誰在存儲庫的哪些部分提交權限,並強制在某些文件上使用某些屬性。例如,您可能想要確保所有shell腳本和Perl腳本的svn:eol-style設置爲nativeLF

它也可以允許用戶創建標籤,但不允許用戶在創建標籤後進行更改。這可以防止用戶意外檢查標籤,進行更改並提交。


而且,還有一兩件事:

在連續構建系統看看,如Jenkins。我發現的一件事是,僅僅通過連續構建,開發人員自然而然地改進了他們的提交消息,而沒有執行任何強制措施。

這是因爲提交消息現在很容易看到。詹金斯顯示了每個構建的變化,構建本身是否成功,測試結果等。它顯示了更改和提交註釋。突然間,提交的評論對開發者本身變得更加有用,而且他們只是做了更好的評論。

你可以看一個svn log,看的時候,我實現詹金斯:之前有或者沒有提交意見,或爲「重新格式化代碼」還是非常有幫助的「所做的更改」這樣有用的東西(包括長於10個字符)。突然之間的評論是「修復了BUG-1233。它傳遞給foo方法」之前檢查空指針。