有没有人有代码(最好是在 Win32 上运行)可以显示在 Perforce 分支中发生的所有文件重命名和移动的历史记录?
问问题
161 次
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 回答