Perforceブランチで発生したすべてのファイルの名前変更と移動の履歴を表示するコード(できればWin32で実行される)を持っている人はいますか?
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 に答える