搁置 ChangeList 的 Perforce 命令行统一差异
Perforce command line unified diff of a shelved ChangeList
我知道我朋友的一些ChangeList。我想将此 CL 编号传递给 Bash 脚本,该脚本将为 patch
程序生成一个差异文件读取(它将重新创建 git 存储库中的更改)。
到目前为止我有这个:
function p4_shelved_cl_to_diff()
{
p4 describe -S -du > p4_diff.patch
}
它生成差异,但 headers 是 p4 格式:
==== //p4_repo/dir_in_repo/dir/file.cpp#123 (text) ===
而他们应该在
--- dir/file.cpp
+++ dir/file.cpp
所以我正在寻找的是一种特殊的 p4 语法(广泛搜索,检查 p4 手册——希望不大)或者 而是一个 sed/awk/whatever 脚本,它会为我做改变。
有什么想法,或者有人已经写好了?
此替换适用于您的示例:
$ sed 's|^====.*/\([^/]*/[^#]*\).*===$|--- \n+++ |' infile
--- dir/file.cpp
+++ dir/file.cpp
它适用于以 ====
开头和结尾的行(实际上以 ===
结尾,但我相信这只是问题中的错字,它也适用于以 [= 结尾的行11=]).
它捕获倒数第二个 /
和 #
之间的所有内容,然后在不同的行上添加 ---
和 +++
。
请注意,我没有研究过 p4 diff headers 的一般格式,因此在其他情况下这可能会中断 – 更好的整体解决方案是修复生成错误的内容 headers .
我知道我朋友的一些ChangeList。我想将此 CL 编号传递给 Bash 脚本,该脚本将为 patch
程序生成一个差异文件读取(它将重新创建 git 存储库中的更改)。
到目前为止我有这个:
function p4_shelved_cl_to_diff()
{
p4 describe -S -du > p4_diff.patch
}
它生成差异,但 headers 是 p4 格式:
==== //p4_repo/dir_in_repo/dir/file.cpp#123 (text) ===
而他们应该在
--- dir/file.cpp
+++ dir/file.cpp
所以我正在寻找的是一种特殊的 p4 语法(广泛搜索,检查 p4 手册——希望不大)或者 而是一个 sed/awk/whatever 脚本,它会为我做改变。
有什么想法,或者有人已经写好了?
此替换适用于您的示例:
$ sed 's|^====.*/\([^/]*/[^#]*\).*===$|--- \n+++ |' infile
--- dir/file.cpp
+++ dir/file.cpp
它适用于以 ====
开头和结尾的行(实际上以 ===
结尾,但我相信这只是问题中的错字,它也适用于以 [= 结尾的行11=]).
它捕获倒数第二个 /
和 #
之间的所有内容,然后在不同的行上添加 ---
和 +++
。
请注意,我没有研究过 p4 diff headers 的一般格式,因此在其他情况下这可能会中断 – 更好的整体解决方案是修复生成错误的内容 headers .