hgsubversionでFreeBSD svnをもってくるのつづき。
.hg/svn/rev_mapにhgとsvnのリビジョンの対応関係が記録されているので、これをもとに.hg/localtagsを生成すれば、-r オプションで svn のリビジョンを指定できるようになる。また hg log でタグとしてsvnのリビジョンがわかる。
ただFreeBSDのheadをとってくると2010-12-02の時点でリビジョンが157081もあり、これを全部localtagsに変換するとhgの動作が極端に遅くなるため、直近の10000個(15分の1)にすることで実用的な範囲に収めている。
さらに、localtagsを時系列と逆順にした方が速くなるっぽいので/usr/local/bin/gtac (in sysutils/coreutils)をつかっている。
スクリプト:
~/.hgstyleの例:
ただFreeBSDのheadをとってくると2010-12-02の時点でリビジョンが157081もあり、これを全部localtagsに変換するとhgの動作が極端に遅くなるため、直近の10000個(15分の1)にすることで実用的な範囲に収めている。
さらに、localtagsを時系列と逆順にした方が速くなるっぽいので/usr/local/bin/gtac (in sysutils/coreutils)をつかっている。
スクリプト:
awk 'NF==2{print $2 " svn-r" $1}' .hg/svn/rev_map | tail -10000 | gtac >.hg/localtags
使用例:
% hg log -r svn-r216107 changeset: 157078:17db89e84c98 tag: svn-r216107 user: lstewart@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f date: 2010-12-02 02:32 +0000 (29 hours ago) summary: General cleanup of the NewReno CC module (no functional changes): %
2010-12-06追加:
hgsubversion/hgsubversion/help/subversion.rst をみると、templateで {svnrev} がつかえるとか、リビジョン指定で -r 'svnrev(500)' とできるとか、便利になってた。
~/.hgrc or .hg/hgrc の例:
[ui] style=~/.hgstyle
~/.hgstyleの例:
changeset = 'changeset: {rev}:{node|short}\nsvnrevision: {svnrev}\n{branches}{
tags}{parents}user: {author}\ndate: {date|isodate} ({date|age})\ns
ummary: {desc|firstline}\n\n'
changeset_quiet = '{rev}:{node|short}\n'
changeset_verbose = 'changeset: {rev}:{node|short}\nsvnrevision: {svnrev}\n{br
anches}{tags}{parents}user: {author}\ndate: {date|isodate} ({date|
age})\n{files}{file_copies_switch}description:\n{desc|strip}\n\n\n'
changeset_debug = 'changeset: {rev}:{node}\n{branches}{tags}{parents}{manifest
}user: {author}\ndate: {date|isodate} ({date|age})\n{file_mods}{fi
le_adds}{file_dels}{file_copies_switch}{extras}description:\n{desc|strip}\n\n\n'
start_files = 'files: '
file = ' {file}'
end_files = '\n'
start_file_mods = 'files: '
file_mod = ' {file_mod}'
end_file_mods = '\n'
start_file_adds = 'files+: '
file_add = ' {file_add}'
end_file_adds = '\n'
start_file_dels = 'files-: '
file_del = ' {file_del}'
end_file_dels = '\n'
start_file_copies = 'copies: '
file_copy = ' {name} ({source})'
end_file_copies = '\n'
parent = 'parent: {rev}:{node|formatnode}\n'
manifest = 'manifest: {rev}:{node}\n'
branch = 'branch: {branch}\n'
tag = 'tag: {tag}\n'
extra = 'extra: {key}={value|stringescape}\n'














