簡體   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