报告Perforce分支中的所有文件重命名和移动

报告Perforce分支中的所有文件重命名和移动,perforce,branching-and-merging,Perforce,Branching And Merging,是否有人有代码(最好是在Win32上运行的代码)可以显示Perforce分支中发生的所有文件重命名和移动的历史记录?由于您没有提供有关您的环境的大量信息,我做了以下假设: 您在Windows上,但愿意/能够安装Ruby和 您正在运行Perforce版本2009.1或更高版本(我实际上也实现了对Perforce早期版本的支持,只是有点含糊不清,请参见下文) 话虽如此,让我们看看我们想要什么:一个分支中所有文件的重命名和移动。 通知我们重命名(以及移动)由 打开进行编辑 移动文件 提交 并在

是否有人有代码(最好是在Win32上运行的代码)可以显示Perforce分支中发生的所有文件重命名和移动的历史记录?

由于您没有提供有关您的环境的大量信息,我做了以下假设:

  • 您在Windows上,但愿意/能够安装Ruby和
  • 您正在运行Perforce版本2009.1或更高版本(我实际上也实现了对Perforce早期版本的支持,只是有点含糊不清,请参见下文)
话虽如此,让我们看看我们想要什么:一个分支中所有文件的重命名和移动。 通知我们重命名(以及移动)由

  • 打开进行编辑
  • 移动文件
  • 提交
并在更改中指定为“移动/添加””操作。我已经破解了一个小Ruby脚本,它查看给定分支的所有更改(
p4 changes//branch/…
),并查看每个更改(
p4 descripe@change
)是否有“move/add”操作并发出文件

#!/usr/bin/env ruby

require 'P4'

branch = ARGV[0]

p4 = P4.new
p4.connect

begin
  p4.run_changes("-i", branch).each do |change|
    p4.run_describe(change["change"]).each do |c|
      files = c["depotFile"]
      files.each do |f|
        if c["action"][files.index(f)] =~ /move\/add/
          puts "File #{f} was RENAMED in change #{c["change"]} (original: #{c["fromFile"][files.index(f)]})"
        end
        if c["action"][files.index(f)] =~ /integrate/
          # TODO find a corresponding delete in the same changelist, which would
          # this mark as a 'move' for P4 versions prior 2009.1
          puts "File #{f} was INTEGRATED in change #{c["change"]}"
        end
      end
    end
  end

rescue P4Exception
  p4.errors.each { |e| $stderr.puts(e) }
  raise
end

p4.disconnect

C:\> ruby p4report.rb //some/perforce/branch/...
还有一些注意事项:

  • 按原样提供,经过粗略测试,使用风险自负
  • 根据分支的更改数量,这可能需要一段时间,列出所有更改,然后检查每个更改,即不要在站点的根目录上使用(
    //depot/…
  • 代码中的TODO清楚地说明了这一点:对于2009.1之前的Performce,重命名是由集成完成的,然后是删除(参见知识库)。我添加了对查找集成操作的支持,但将其余部分留给读者作为练习。就目前而言,您不会看到普通分支操作和“分支并删除”操作之间的区别

欢迎就如何简化此操作提出任何建议。

您能更详细地定义一下Win32环境吗?您是否愿意/能够安装例如p4ruby或其他p4 API?