ヒントで変更されたかどうかに関係なく、特定のファイルの以前のリビジョンを取得したいと思います。
たとえば、変更セット 226 にヒントがあるリポジトリがあります。
$:~/sandbox$ hg log -r -3::.
changeset: 224:591c7a48b15f
user: blah <blah.com>
date: Tue May 28 09:07:25 2013 -0700
summary: TEST: test
changeset: 225:8c3689dedfa8
user: blah <blah.com>
date: Tue May 28 09:07:53 2013 -0700
summary: TEST: test2
changeset: 226:88f5ee46f99b
tag: tip
user: blah <blah.com>
date: Tue May 28 09:42:46 2013 -0700
summary: TEST:test
そのリポジトリ内には、チェンジセット 158 で少し前に変更された doit というファイルがあります。
$:~/projects/sandbox$ hg log doit
changeset: 158:8536d2b52f24
user: blah <blah.com>
date: Thu May 03 18:56:50 2012 -0700
summary: TEST: clean up buiild
changeset: 121:82313616d631
user: blah <blah.com>
date: Wed Apr 06 14:04:55 2011 -0700
summary: scr3: created program to test UI tests in Hudson
changeset: 116:c668d2a9c2b2
user: blah <blah.com>
date: Tue Feb 15 11:31:31 2011 -0800
summary: TEST: add another line
changeset: 115:9affabd80774
user: blah <blah.com>
date: Tue Feb 15 11:21:01 2011 -0800
summary: TEST: modify doit
changeset: 114:4097920e7edb
user: blah <blah.com>
date: Tue Feb 15 11:18:58 2011 -0800
summary: TEST: add doit
そして、hg cat を使用してファイルの内容をダンプできます。
$:~/projects/sandbox$ hg cat -r 158 doit
#! /bin/sh
echo doit for the sandbox hudson test job...
echo add another line out
echo add yet another line...
#ant clean build
ここまでは順調ですね。問題は、「158」を明示的に指定せずに、ファイルの以前のリビジョン (doit) を指定する方法です。(たとえば、hg ログ出力を検索する必要があります)。
私はもう試した:
hg log -r -2 doit
hg log -r "ancestor(.)" doit
hg log -r "ancestor(file(doit))"
hg log -r "limit(file(doit))"
hg log -r "limit(file(doit)~0)"
(etc.)
私はついにこれを試してみましたが、うまくいくようです:
$:~/sandbox$ hg log -r "last(file(doit))"
changeset: 158:8536d2b52f24
しかし、別のリポジトリとファイルに対して試したとき:
$:~/projects/otherrepo$ hg log -r "last(file(file-version))"
hg: parse error: file requires a pattern
ダッシュ「-」が構文の問題を引き起こしているようです。私はそれをエスケープしようとしました:
$:~/projects/otherrepo$ hg log -r "last(file(uic\-version))"
hg: parse error at 13: syntax error
次に何を試すかについてのアイデアはありますか?