是否有可能从 Perforce 更改列表中获取更改的文件列表和修改的行列表

Is it possible to get a list of files changed and a list of lines modified from Perforce changelist

我的目标是生成一个 JSON 文件,其中包含更改列表中所有文件的列表以及每个文件的关联行号。看起来像这样的东西:

[
 {
  "name":"file1.cpp",
  "lines":[[1,3],[5,7]]
 },
 {
  "name":"file2.h",
  "lines":[9,14]
 }
]

'p4 describe' 为我们提供了参与给定更改列表的文件列表。但是,我有兴趣了解每个文件中更改的行集。

就此问题而言,工作假设是

p4 describe 的格式化标志 -d[格式化选项] 在这里应该有所帮助。例如,p4 describe -dc1 [changelist] 会给你这样的格式:

    Change 2238074 by user@client on 2014/09/02 11:23:44

        Change description

    Affected files ...

    ... //depot/path/file1.java#3 edit

    Differences ...

==== //depot/path/file1.java#3 (text) ====

***************
*** 8,11 ****
          credentials {
!             username 'olduser'
!             password 'oldpass'
          }
--- 8,11 ----
          credentials {
!             username 'newuser'
!             password 'newpass'
          }

因此您可以获得每次更改的行号和起始列。 (格式标志末尾的“1”限制了每个差异打印的上下文行数,因为您只需要行号)。

有关其他选项,请参阅 "p4 help describe"。

由于您要进行大量解析和输出格式化,您可能希望查看其中一种 Perforce API 而不是命令行来获取更改数据。