2015-04-02 86 views
1

我有我的存儲庫中的類的列表,我不希望相同的類名添加兩次。

我的目標是防止提交相同的文件名,即如果abc.class.php已經存在於任何目錄中,用戶不能將abc.class.php添加到存儲庫。
我試圖SVN鉤預先掛鉤,以防止添加相同的文件名

CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep "^[A]" | $AWK '{print $2}' | grep \.class.php$` 
for FILENAME in $CHANGED 
do 
    AlreadyFoundFile=$(locate $FILENAME ./var/www/html/REPO/) 

    if [ $AlreadyFoundFile ] 
    then 
     echo "WARNING- "$FILENAME" - class name already exist" 1>&2 
     exit 1 
    fi 
done 

它是檢查提交的文件在/ var/www/html等/ REPO /(簽出店),但我想您在儲存庫文件。

有沒有可能的方法?

回答

2

你可以使用svnlook tree

CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep "^[A]" | $AWK '{print $2}' | grep \.class.php$` 
tree=$(svnlook tree "$REPOS") 

for FILENAME in $CHANGED 
do 
    if grep -q "$FILENAME" <<< "$tree" 
    then 
     echo "WARNING- "$FILENAME" - class name already exist" 1>&2 
     exit 1 
    fi 
done 

注意,這將不會被限制在一個特定的分支。如果需要,可以使用樹命令將路徑指定爲第二個參數,請參閱documentation

+0

非常感謝,得到了一個方向,但grep命令給出了錯誤 - 語法錯誤:重定向意外,搜索有關此錯誤並在頂部添加#!/ bin/bash,仍然出現錯誤 – 2015-04-03 05:20:11

+1

工作感謝,添加#!/ bin/bash在最高解決問題 – 2015-04-03 06:33:55