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

时间:2010-09-09 06:40:48

标签: perforce branching-and-merging

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

1 个答案:

答案 0 :(得分:1)

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

  • 您使用的是Windows,但愿意/能够安装Ruby和p4ruby API
  • 您正在运行Perforce版本2009.1或更新版本(我实际上也实现了对以前版本的Perforce的支持,它只是有点含糊不清,见下文)。

话虽如此,让我们看看我们想要什么:所有重命名和分支内文件的移动。 P4 knowledge-base告诉我们重命名(以及移动,就此而言)由

组成
  • 打开以进行编辑
  • 移动档案
  • 提交

并在更改中指定为“移动/添加”操作。我已经攻击了一个Ruby脚本,该脚本查看给定分支的所有更改(p4 changes //branch/...),并查看每个更改外观(p4 describe @change)是否存在“移动/添加”操作并发出文件。

#!/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/...)上使用,这不是很优雅/ LI>
  • 代码中的TODO明确表示:对于Perforce之前的2009.1,重命名整合完成,然后是删除(参见知识 - 基础)。我已经添加了支持以找到集成操作,但剩下的作为练习给读者。就像现在一样,你不会看到正常的分支操作和“分支 - 删除”操作之间的区别。

欢迎任何关于如何使这更容易的建议。