当我使用 "p4 diff" 命令时,它会忽略我已经添加的文件。是否有可能生成包括添加的文件和更改的文件在内的差异对比呢?
这是P4 diff已知缺失的功能,许多与Perforce相关的工具需要解决这个问题。
代码审查工具Reviewboard带有post-review工具。它用于为代码审查创建差异,但如果您只想进行差异比较,则会执行此操作。
它是使用Python编写的,您可以提取差异部分以供自己使用。
#!/bin/bash
if [ $# -ne 1 ]; then
echo "usage: $0 <pathSpec>"
exit 1
fi
pathSpec=$1
doIt () {
p4 opened "$pathSpec" | egrep "#.* - add" | while read f; do
# figure out the workspace path
depotPath=${f%#*}
clientFileLine=$(p4 fstat "$depotPath" | grep clientFile)
workspacePathWin=${clientFileLine#... clientFile }
# diff output
echo ==== $depotPath#1 - $workspacePathWin ====
workspacePath=$(cygpath "$workspacePathWin")
lineCount=$(wc -l < "$workspacePath")
echo @@ -0,0 +1,$lineCount @@
# the actual diff contents
sed -e 's/^/+/' "$workspacePath"
echo
done
}
doIt
我刚刚让这个工作起来了,分支出自Aaron的答案。我使用了以下代码,而不是
==== //path/to/depot/file#1 - /path/to/workspace/file ====
--- //path/to/file [TIMESTAMP GENERATED BY NORMAL DIFF]
+++ //path/to/file [TIMESTAMP GENERATED BY NORMAL DIFF]
@@ -1,1 +1,LEN @@
然后确保每行添加的开头都有一个+
。
我刚解决了这个问题,并在Fisheye预提交审查中包含了我的添加文件。
我的做法是复制编辑文件的差异块描述符头。这包括一行列出depot和本地路径 - 相当简单 - 和另一行范围信息,格式如这里描述的。
因此,我将每个附加文件的内容添加到差异中,每个内容都在其前面加上
==== //path/to/depot/file#1 - /path/to/workspace/file ====
@@ -1,1 +1,LEN @@
其中LEN
是添加文件中行数的数量。
这对我来说有效;您的情况可能有所不同。
只需使用p4 print命令打印添加的文件(我知道,这不是最好的方法)- 但这绝对是一种可行的方法。