使用Perforce,我希望能够拒绝包含带有Windows行结尾的文件的提交(\ r \ n IIRC,可能只是\ r \ n,因为我们只想要带有Unix行结尾的文件)。
而不是dos2unix传入的文件或类似文件,以帮助跟踪用户尝试使用Windows行结尾提交文件的实例,我想添加一个触发器来拒绝包含非Unix行结尾文件的文本提交。< / p>
有人可以演示如何使用bash或python编写触发器本身吗?
由于
答案 0 :(得分: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 $DEPOT_PATH@=$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/file.c@=12345
if $P4CMD print -q "$FILE@=$CHANGE" | fgrep "$TARGET" > /dev/null
then
echo "Submit fails: '$TARGET' not found in $FILE"
XIT=1
else
echo ""
fi
done
exit $XIT
如果目标丢失,原始示例将失败,如果目标丢失,则会失败 - 只需切换then
的{{1}}和else
分支。您当然可以进一步编辑它(例如,给if
或grep
,fgrep
标志来抑制输出,如果你的grep支持它,就像GNU一样。