Perforce命令行对搁置的ChangeList

时间:2016-02-26 14:31:13

标签: git sed diff perforce patch

我知道我朋友的一些ChangeList。我想将此CL编号传递给Bash脚本,该脚本将为patch程序生成一个diff文件读取(将重新创建git repo中的更改)。

到目前为止,我有这个:

function p4_shelved_cl_to_diff()
{
    p4 describe -S -du $1 > p4_diff.patch
}

它生成diff,但标题是p4格式:

==== //p4_repo/dir_in_repo/dir/file.cpp#123 (text) ===

而他们应该在

--- dir/file.cpp
+++ dir/file.cpp

所以我正在寻找的是一种特殊的p4语法(广泛搜索,检查p4手册 - 小希望)或而不是sed / awk /任何可以为我做更改的脚本

任何想法,或者有人已经写过这个想法?

1 个答案:

答案 0 :(得分:2)

此替换适用于您的示例:

$ sed 's|^====.*/\([^/]*/[^#]*\).*===$|--- \1\n+++ \1|' infile
--- dir/file.cpp
+++ dir/file.cpp

它适用于以====开头和结尾的行(实际上以===结尾,但我相信这只是问题的一个错字,它也适用于以{{1}结尾的行})。

它捕获倒数第二个====/之间的所有内容,然后在单独的行中添加#---

请注意,我没有查看p4 diff标头的一般格式,因此在其他情况下这可能会中断 - 更好的整体解决方案是修复生成错误标头的内容。