2011-03-16 8 views
20

ログメッセージやファイル名ではなく、変更したパターン(変更されたコード)を変更して変更を見つける方法はありますか?パッチをグレープして水銀でチェンジセットを見つける

私は "hg help revsets"でかなり徹底的に見てきましたが、これを行う良い方法はないと思います。ここで私が思いついた最高のハックがありますが、私は能力が欠けていることを望んでいます。

hg log -M -u goldberg -p | grep '(^changeset:\|<pattern> '' |グレップ-C 1「<pattern>

(その後、手動でそれらのリビジョンと、後の作業のためのリビジョン番号を選択)

+0

私は自分の提案をちょっと微調整しているので(zsh関数としてはbashで動くはずです)、私はフォローアップすると思いました。 hg_find_patch(){hg log -M -u goldberg -p --styleデフォルト| grep '\(^チェンジセット:\ |^[+ - ]。*' $ {1} '\)' | grep -B 1 $ {1}} –

答えて

30

あなたはhg grepを見てみる必要があります。

Search revisions of files for a regular expression. 

This command behaves differently than Unix grep. It only accepts 
Python/Perl regexps. It searches repository history, not the working 
directory. It always prints the revision number in which a match appears. 

By default, grep only prints output for the first revision of a 
file in which it finds a match. To get it to print every revision that 
contains a change in match status ("-" for a match that becomes a non-match, 
or "+" for a non-match that becomes a match), use the --all flag. 

Returns 0 if a match is found, 1 otherwise. 

あなたはより多くの情報のためhg grep --helpを入力することができます。

+0

ありがとう!私はそれを見ていなかった。 –

+0

これは私を近づけます。私が正しく理解すれば、hg grepは、ファイル全体にパターンが含まれているかどうかを示します(パターン全体がいつ変更されたかを見ることができます)。私はそのパターンを持っているすべての編集を探しています。例えば、私が1週間働いていた変数を選んで、変数が何年も前からあったとしても、それらの関連するチェンジセットをすべて取り出すことができます。 hg grepがそれを本当に行うことはできないのですか? –

+0

'--all'を使ってリポジトリ内のすべてのチェンジセットを検索するか、' -r'を使ってリビジョンの範囲を指定することができます。たとえば、 'hg grep --all" $ myvariable "path/tofile.php'を実行すると、mercurialは指定されたファイルのすべてのリビジョンでパターン" $ myvariable "を探します。初めて。 – krtek

関連する問題