搁置 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 .