2010-06-21 55 views
2

使用Perforce,我希望能够拒绝包含带有Windows行结尾的文件的提交(\ r \ n IIRC,可能只是\ r在任何地方,因为我们只是想要文件与Unix行结尾)。使用Perforce触发器拒绝Windows行结尾的文件

而不是dos2unix传入文件或类似的,以帮助追踪用户试图提交与Windows行结尾的文件的实例,我想添加一个触发器拒绝文本提交,其中包含非Unix行结尾的文件。

有人可以演示触发器本身如何写入,也许用bash或python?

感谢

回答

4

这里是最小的编辑,我可以为在the p4 docs发现bash的例子件事:

#!/bin/sh 
# Set target string, files to search, location of p4 executable... 
TARGET='\r\n' 
DEPOT_PATH="//depot/src/..." 
CHANGE=$1 
P4CMD="/usr/local/bin/p4 -p 1666 -c copychecker" 
XIT=0 
echo "" 
# For each file, strip off #version and other non-filename info 
# Use sed to swap spaces w/"%" to obtain single arguments for "for" 
for FILE in `$P4CMD files [email protected]=$CHANGE | \ 
    sed -e 's/\(.*\)\#[0-9]* - .*$/\1/' -e 's/ /%/g'` 
do 
    # Undo the replacement to obtain filename... 
    FILE="`echo $FILE | sed -e 's/%/ /g'`" 
# ...and use @= specifier to access file contents: 
    # p4 print -q //depot/src/[email protected]=12345 
    if $P4CMD print -q "[email protected]=$CHANGE" | fgrep "$TARGET" > /dev/null 
    then 
     echo "Submit fails: '$TARGET' not found in $FILE" 
     XIT=1 
    else 
     echo "" 

    fi 
done 
exit $XIT 

如果目标丢失原来的例子失败,如果它是目前这一失败 - 只需切换ifthenelse分支。您当然可以进一步编辑它(例如,如果您的grep支持它,例如给出grepfgrep-q标志来抑制输出,例如GNU's)。