2017-05-08 13 views
2

特定のリビジョンで1つのファイルが必要です。私は興味のあるリビジョンのチェンジセットIDを持っています。さらに、私は、ファイル名がリポジトリ内で一意である(私が願っている)パスのないすべて小文字のファイル名を持っています:example.cpp。今、私はファイルの完全なパスを探したいと思います。その後、私はhg cat -r #REV /path/to/Example.cppへのパスを使用します。Mercurial/hg:特定のリビジョンでファイルを検索する(そのリビジョンを更新しないで)

平均してファイルの名前が変更されたか、削除された可能性があります。しかし、私は特定の時点と特定のブランチ(チェンジセットIDによって識別される)でファイルを必要とします。

これを達成する最も簡単な方法は、そのリビジョンに更新し、ローカルの作業ディレクトリでファイルを検索することです。しかし、これはサーバでバッチモードで自動的に行うには遅すぎます。私はhg findfile 3b62b0e7edcb48e34ca08bed31c6cd1d00df93c2 -name --ignorecase example.cppのようなものを望んでいます。これは、指定されたリビジョン(チェンジセットID 3b62b0e7edcb48e34ca08bed31c6cd1d00df93c2によって識別されます)のファイルがその名前(example.cpp)で見つかります。理想的には私は1つだけを見つけて、ファイルの内容を取得するhg catを使用することができます。

そのチェンジセットIDで特定される特定の時点でファイルツリー全体を印刷することができれば、私にはどんな助けになるでしょうか。 webfrontend hgwegでは、特定のチェンジセットIDでそのディレクトリをオンラインで参照できるため、これが可能であることは確かです。 (例:https://www.mercurial-scm.org/repo/hg/file/de86a6872d06)。その後、そのファイルの大文字と小文字を区別しない検索を再帰的に行うことができ、hg catです。

背景: 私は現在、自動クラッシュダンプファイルアナライザを拡張しています。アプリケーションではhttp://crashrpt.sourceforge.net/を使用します。私たちのクラッシュダンプアナライザは、クラッシュしたリリースのチェンジセットIDを知っています。これは、クラッシュダンプを正しいデバッグシンボル(pdb)でデバッグシンボルディレクトリから取得することによって、自動的に解析します。結果は、小文字のファイル名(example.cpp)を示すコールスタックですが、パスは表示されません。私は、そのファイルの対応するコードだけを取得したいと思います。

私はRetrieve old version of a file without changing working copy parentが私の半分の問題を解決したことがわかりました。私も前に知らなかったhg grepを見つけましたが、正しく理解すればhg grep -l example.cppは私にファイルを見つけることができましたが、これが私が興味を持っている特定のリビジョンで持っていたパスかどうかはわかりません。間違ったリビジョンや別のブランチを取得する可能性があります。 (しかし、私が言ったように、今日はhg grepの話を聞いたのは初めてで、おそらく私は明らかな解決策は見当たりません...)。

答えて

2

hg manifest -r REVを使用して、そのリビジョンのすべてのファイルのリストを取得できます。その後、そのリスト内のファイルを検索することができます。

0

Complete Solution Joeri van Ruthの答えに基づいています。

リスト指定されたリビジョンのすべてのファイル:

hg manifest -r 3b62b0e7edcb48e34ca08bed31c6cd1d00df93c2

が続いexample.cppファイルを検索し、(グレップを使用することによって)全体のパスを抽出...その後ファイルの内容を取得する:

hg cat -r 3b62b0e7edcb48e34ca08bed31c6cd1d00df93c2 "Folder/Sub/Example.cpp"

関連する問題