藤原です。
定例の新規機能リリース版である Mercurial 2.8 がリリースされました。
また、日本語メッセージファイルが同梱されていないパッケージや、GNU
gettext が無い環境でビルドした人向けに、日本語メッセージファイルを
以下から入手できるようにしました。
として配置してください。詳細に関しては以下のページを参照してください。
今回のリリースにおける新規機能で目に付くトピックとしては:
hgweb: add revset syntax support to search
ウェブインタフェースからも、revset 記述を用いた検索ができ
るようになりました。
なお、サーバ側処理に負荷のかかる "contains()" と "grep()"
は、使用できません (DoS 攻撃等への対策も兼ねているのかな?)
"contains()" や "grep()" が含まれる revset 記述は、強制的
にキーワード検索扱いになります。
shelve: add a shelve extension to save/restore working changes
これまでは非同梱だった shelve エクステンションが、標準同梱
されるようになりました。
ただし、今回同梱されるようになった shelve エクステンション
は、これまで shelve として知られている以下のエクステンショ
ンとは全く別の実装になります。
旧 shelve は、退避内容を patch として保存/復旧していまし
たが、新 shelve では:
- "hg shelve":
1. 退避対象の変更を一時的に commit
2. 一時 commit の内容(=退避内容)をバンドルファイルに書き出し
3. 一時 commit リビジョンを破棄
- "hg unshelve":
1. バンドルファイルから一時 commit を復旧
2. 作業領域の親リビジョンに rebase
3. 一時 commit を破棄
という手順になりました。
新旧 shelve 共に、退避時点とは作業領域状態が異なる状況で、
退避内容を復旧した場合、変更の衝突が発生する可能性がありま
すが、衝突後の挙動も以下のように異なります。
- 旧 shelve は『パッチ適用失敗』で *.rej ファイルが生成
- 新 shelve は『マージ失敗』扱いで unresolve 状態化
旧 shelve では、そのまま放置しても構わなかったのですが、新
shelve の場合は、"hg resolve" → "hg unshelve --continue"
が必要になります (あるいは "hg unshelve --abort")
なお、TortoiseHg の shelve 機能は、旧 shelve を元にしたも
のですので、混乱しないように注意が必要です (先日、コミッタ
の西原さんに確認した後で方針が変更されていなければ…)
あたりでしょうか?他にも『これは是非知っておいて欲しい!』という変
更に思い当たる方、あるいは『この機能の詳細が気になる』という方がい
れば、お知らせください。