我希望在特定待定更改列表中的文件上获得差异。我希望我能做到这一点:
p4 diff -c 999
有人可以帮助我将一些csh魔法串联起来以实现这一目标吗?
也许取p4 opened -c 999
的输出并将其输入p4 diff
?
答案 0 :(得分:24)
将待更改列表中的更改搁置,然后运行
p4 describe -S -du 999
答案 1 :(得分:18)
最简单的方法是在p4v或p4win中,但这不是你要问的。
试试这个:
p4 opened -c 999 | awk 'BEGIN { FS = "#" } // { print "p4 diff " $1 }' | csh
当然,您需要确保子shell的路径中包含p4,并且$ P4CLIENT等等都已设置完毕。
答案 2 :(得分:10)
p4 opened -c 999 | sed -e 's/#.*//' | p4 -x - diff
p4 -x
无需使用xargs
即可为您提供xargs
能力。来自p4 help utils
:
-x标志指示p4读取参数,每行一个 指定的文件。如果指定' - ',则读取标准输入。
所以你几乎可以“按照p4打开-c 999的输出并将其传递给p4 diff”,如问题所示。一个棘手的部分是p4 opened
的输出包含每个打开文件名称后的修订号和说明文字,例如
//depot/example#123 - edit change 999 (text) by day@office
//depot/new-example#1 - add change 999 (text) by day@office
但我们可以通过一个简单的sed -e 's/#.*//'
来解决这个问题,从#
开始删除所有内容,只留下路径:
//depot/example
//depot/new-example
然后可以通过p4 diff
从标准输入中消费并输入p4 -x -
。
如果您在任何文件的名称中都有#
,那么您需要使用sed
命令更加聪明。并且看一位精神科医生。
答案 3 :(得分:8)
p4描述999 | grep'#'| cut -d“#” - f1 | cut -d“” - f2 | xargs p4 diff
答案 4 :(得分:6)
您可以像这样使用shell脚本:
#!/bin/sh
list=`p4 opened -c $1 | cut -d# -f1`
for file in $list ;
do
p4 diff -dwbu $file
done
使用更改列表编号调用它,您将在stdout中获得补丁。
答案 5 :(得分:1)
我使用了与Mark类似的方法,但我使用Perl而不是Awk,以及shell函数(在zsh中):
p4dc() { p4 opened -c $* | perl -ne 's/#.*//; system("p4", "diff", $_)' }
请注意,除了更改列表名称/编号外,您还可以提供文件路径:
p4dc default | less
p4dc default ... | less
答案 6 :(得分:1)
对于可从Windows cmd shell运行的单行程序,请尝试以下方法:
for /f "usebackq delims=#" %F in (`p4 opened -c 999`) do @p4 diff %F
要在批处理文件中执行此操作,您需要使用%%F
而不是%F
。
请注意,如果您安装了类似于unix的实用程序包(例如cygwin或unixutils),则上面的某些解决方案可以在Windows下运行,但这种单行程序没有外部依赖关系。
答案 7 :(得分:0)
以上回答了您的问题但是,如果将tile读取为在变更列表上区分目录,则可以使用以下内容进行回答:
p4 filelog ... | awk '
BEGIN {FS="[ /]";tc=999}
/^\/\// {fn=$NF;o=1;if (system("test -w " fn)) h=0; else h=""}
/^\.\.\.\ \#/ {if (h==0) h=$2;
if ($4<=tc && o==1) {print "p4 diff -db -dw " fn h " " fn $2 " ;#" $4;o=0}}' \
| sh
这会将目录中的所有文件与变更列表999区分开来,如果已经签出则使用“has”版本,否则它将使用最新版本。
这是用GNU Awk 3.1.3测试的
答案 8 :(得分:0)
对于搁置的更改(更改仍不在仓库中)
p4 opened -c 999 | awk 'BEGIN { FS = "#" } // { print "p4 diff " $1 }' | bash
对于搁置的更改(更改仓库中的内容(p4搁置-c 999)
p4 describe -S -du3 -O 999