これには少し (2 ステップの) プログラミングが必要だと思います。
次のシェル スクリプトは、私にとっては非常にうまく機能します。リビジョンと一致する行の両方を出力します。リビジョン リストのみが必要な場合は、一致するテキストを削除してリビジョン プレフィックスのみを残すステップを追加し、場合によっては「sort -u」を介してパイプすることができます。
#!/bin/bash
#
# script to grep for a pattern in all revisions of a file
# Usage: scriptname 'pattern' filepath
#
function fatal() {
echo "$@" 1>&2
exit 1
}
function usage() {
echo "$@" 1>&2
fatal Usage: $0 pattern file
}
case "$1" in
'') usage 'missing pattern to search for' ;;
*) Pat="$1" ;;
esac
if [ "$2" != '' ]; then
File="$2"
else
usage 'must pass file as 2nd argument'
fi
# -- generate list of revisions (change-sets) involving $File
for rev in `hg log --template '{rev}\n' $File`; do
# -- grep the wanted pattern in that particular revision
hg grep "$Pat" -r $rev $File
done
ノート:
- 完全に確実ではない (例: パターン内の引用符)
- 名前変更/削除されたファイルもサポートするためにファイルの存在をチェックしません