2010-02-08 57 views
0

我在Windows服務器上運行SVN,我使用Perl腳本來實現一些預先提交的鉤子。我看到來自TortoiseSVN的以下錯誤消息:如何匹配Perl中的svnlook輸出?

Error !! ScriptError !!無法解析 行:_U路徑/到/文件/後備箱

,這是腳本:

foreach my $line (`$svnlook changed -t "$txn" "$repos"`) 
{ 
    chomp($line); 
    if ($line !~ /([AUD]).\s\s(.+)$/) 
    { 
    print STDERR "!!Script Error!! Can't parse line: $line\n"; 
    exit(1); 
    } 
    else 
    { 
    # perform some actions 
    } 
} 

exit(0); 

我試過,沒有sucess更換的東西,正則表達式像/_([AUD]).\s\s(.+)$/ - 我甚至嘗試/.*([AUD]).\s\s(.+)$/

想法?建議?

+0

您可以添加一個來自TortoiseSVN的錯誤消息的樣子嗎? – ccheneson 2010-02-08 18:44:18

回答

4

沒有看看SVN文檔,我只是猜測: 在上面的輸出中,U和實際路徑之間只顯示一個空格,但在所有正則表達式中都有\s\s

好的,現在我看看svnlook reference。首先,你的正則表達式失敗的svnlook命令的當前版本,指定的輸出如下:

  • 前兩列包含狀態
  • 路徑始於第五列
  • 狀態可能是一個A(添加),U(內容改變),d(刪除),_U(屬性的變化),和UU(內容+性質改變)

所以,你應該能夠匹配的東西,如^([_AUD]+)\s+(.+)$。人們可以得到更具體的,但這不是必要的。

如果這不匹配,請將命令的輸出傳送到一個文件,並在此處張貼相關部分。

+0

我將它替換爲: if($ line!〜/^\s+([AUD])\s+(.+)$/) 但沒有成功 - 它似乎被那個領先的下劃線所激怒,但我想知道這實際上是一個下劃線還是其它東西就像是一個破損的編碼字符。 – dls 2010-02-08 18:32:14

+0

上次我查看svnlook源代碼時,它確實是一個下劃線。我建議查看源代碼以確定可能輸出的內容。關於法律輸出的幫助並不完全是最新的,也不準確。 – 2010-02-08 18:55:51

+0

這是,但谷歌它總是返回版本1.0的幫助... – gimpf 2010-02-08 19:05:44

0

if ($line !~ /^_?([AUD])\s+(.+)$/應該可以正常工作。

+0

這對整套svnlook標識符的效果要好得多: 'if($ line!〜/^\ s *(A | D | U | UU | _U)\ s *(。+)$ /)' – dls 2010-02-08 19:08:16

+0

啊,是的。當我檢查文檔時,我錯過了'UU'位。 – jamessan 2010-02-08 19:14:32