Mercurial管理下のファイルを検索する grepfile extension
'hg grep'は履歴を検索してしまうし、'hg locate "set:grep('hogehoge')"'はマッチした行を表示してくれないので、この二つのコマンドの間の子を作って見ました。
設定
[extensions] grepfile = [path to]/grepfile.py
使い方
こんな感じで管理下のファイルを検索できます。
% hg grepfile -n ctx.walk mercurial/cmdutil.py:1777: for abs in ctx.walk(m): mercurial/commands.py:283: for abs in ctx.walk(m): mercurial/commands.py:1085: for abs in ctx.walk(m): mercurial/commands.py:2172: for abs in ctx.walk(m): mercurial/fileset.py:460: subset = ctx.walk(ctx.match([])) mercurial/subrepo.py:590: return ctx.walk(match) % hg grepfile -r 10000 -i -n ctx.WALK mercurial/commands.py:117: for abs in ctx.walk(m): mercurial/commands.py:573: for abs in ctx.walk(m): mercurial/commands.py:1052: for abs in ctx.walk(m):
ヘルプはこんな感じ。オプションのメッセージは'hg grep'と'hg locate'のものを流用しているので、いい感じに日本語がでます。
% hg help grepfile hg grepfile [OPTION]... PATTERN [FILE_PATTERN]... search for a pattern in specified files Search files for a regular expression. オプション: -a --text 全ファイルをテキストファイルと仮定 -i --ignore-case 大文字小文字を無視して検索 -n --line-number 合致した行番号を表示 -r --rev リビジョン 当該リビジョン時点のファイル一覧から検索 -I --include パターン [+] パターンに合致したファイルを処理対象に追加 -X --exclude パターン [+] パターンに合致したファイルを処理対象から除外 --mq パッチ管理リポジトリへの操作 [+] 印付きのオプションは複数回指定可能です "hg -v help grepfile" で詳細な情報が表示されます
ちなみに
aliasでこの機能を実現すると、だいたいこんな感じ。
[alias] grepfile = ! $HG locate --print0 | xargs --null grep $@