【问题标题】:Perforce command line unified diff of a shelved ChangeList搁置的 ChangeList 的 Perforce 命令行统一差异
【发布时间】:2016-02-26 14:31:13
【问题描述】:

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

到目前为止,我有这个:

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

它会生成差异,但标头是 p4 格式:

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

而他们应该在

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

所以我正在寻找的是一种特殊的 p4 语法(广泛搜索,检查了 p4 手册——希望渺茫)或者而是一个 sed/awk/任何可以为我做改变的脚本

有什么想法,或者也许有人已经写好了?

【问题讨论】:

标签: git sed diff perforce patch


【解决方案1】:

此替换适用于您的示例:

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

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

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

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

【讨论】:

  • 谢谢!我不是 sed 向导,但看起来不错,我会在两周后回到工作岗位时尝试它:) “倒数第二个 /”和一般格式 - 在我得到的真正差异中,dir/file.cpp 实际上是诸如 dir1/dir2/dir3/file.cpp 之类的。我认为脚本应该获取参数- repo 上最后一个目录的名称,或要删除的 / 的数量,以使其在更一般的意义上工作。是的,最好是让 p4 生成正常的统一差异。我想现在这是不可能的,我不得不在他们的论坛上大声抱怨,然后等待几周/几个月的修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多