0

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

4

1 回答 1

1

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

  • 您在 Windows 上,但愿意/能够安装 Ruby 和p4ruby API
  • 您正在运行 Perforce 版本 2009.1 或更高版本(我实际上也实现了对 Perforce 以前版本的支持,只是有点模棱两可,见下文)。

话虽如此,让我们看看我们想要什么:分支内文件的所有重命名和移动。P4 知识库告诉我们,重命名(和移动,就此而言)包括

  • 开放编辑
  • 移动文件
  • 提交

并在更改中指定为“移动/添加”操作。我已经破解了一个小 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/...)
  • 代码中的 TODO 清楚地说明了这一点:对于 2009.1 之前的 Perforce,重命名是通过集成然后删除完成的(参见知识库)。我添加了对查找集成操作的支持,但将其余部分作为练习留给读者。就像现在一样,您不会看到正常的分支操作和“分支和删除”操作之间的区别。

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

于 2010-09-10T12:17:30.760 回答