彷徨えるフジワラ

年がら年中さまよってます

Mercurial に関するコミュニティ由来の成果(2012年版)

本エントリは、2012年の一年間に、ML/twitter/勉強会といったコミュニティから上がった情報/要望の中で:

  • Mercurial 本体に取り込まれた修正の契機になったもの
  • Mercurial 本体に取り込まれてはいないものの、何らかの成果に結びついたもの
  • 『今後の作業のネタ』(= バックログ)として認識されているもの

上記に該当するものを、情報提供への感謝の意味も込めて、列挙したものです。

『気になった点に関して、情報提供をする』だけでも、十分開発に貢献できる事の証拠とも言えます。

今後も、Mercurial に関して疑問/質問/要望等があれば、以下の手段等で、お気軽に情報をお寄せください > 利用者の皆様

また、抽出が大変だったので本エントリでは列挙しませんでしたが、メッセージ翻訳に関する不具合報告/要望等も随時反映しておりますので、こちらに関してもお気軽にお知らせください&お知らせ頂いた皆様、ありがとうございました!

なお、"Mercurial" とか "TortoiseHg" といった単語を含むツイートは、現在我々の監視下にある(笑)のですが、#mercurialjp タグを付けてツイートしてもらえれば、サッカーシューズとかカードゲームの話題に紛れて見落とす心配が無くなるので助かります。

本体に取り込まれた修正(changed by 藤原)

以下に列挙する修正は、コミュニティからの情報を元に私が提案した修正のうち、Mercurial 本体に取り込まれたものです。

なお、私の手による修正履歴一覧から、記憶を頼りに目視で抽出したものなので、『俺の情報を元にパッチ作成しておいて手柄を独り占めかよ!?』的なものに心当たりがある方は、お気軽に情報をお寄せください(笑)。

● マージ処理に関する修正

TokyoMercurial #1 参加者による:

複雑な衝突が発生するマージの際に、3-way マージ出力だと問題が分かりづらい場合があるので、『patch 適用失敗』の時みたいに、衝突部分を *.rej ファイル保存することは出来ないか?

という要望を元に提案した以下の修正が取り込まれました。

  • 83925d3a4559: filemerge: refactoring of 'filemerge()'
  • 0c4bec9596d8: filemerge: create detail of internal merge tools from documentation string

また、非同梱の 3rd party エクステンション扱いですが、MergePatch Extension も実装しました。

● ウェブサーバ機能でのヘルプ表示に関する修正

というツイートを元に提案した以下の修正が取り込まれました。

  • dd68c972d089: i18n: show localized messages for commands/extensions in hgweb help top (issue3383)

Subversion からの変換失敗に関する修正

というツイートを元に提案した以下の修正が取り込まれました。

  • 363e808de349: i18n: use locale insensitive format for datetimes as intermediate representation (issue3398)

調査の過程/顛末に関しては、以下のエントリを参照してください。

発生条件に環境依存性があったので、再現〜原因特定に随分難儀した記憶があります……

● ファイル名合致処理の互換性に関する修正

というツイートを元に提案した以下の修正が取り込まれました。

  • c17ce7cd5090: match: make 'match.files()' return list object always

● MQ/サブリポジトリ併用時の障害に関する修正

というツイートを元に提案した以下の修正が取り込まれました。

  • 986df5249b65: mq: add ".hgsubstate" to patch target list only if it is not listed up yet
  • f287d4a62031: mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
  • 54da604fefee: mq: check subrepo synchronizations against parent of workdir or other appropriate context

この障害は、相当に内部実装に込み入った話だったので、調査過程/顛末に関しては特にまとめてませんでしたが、夜中に twitter 越しに3〜4人ぐらいで、あーだこーだ情報交換するなど、原因究明に随分手間取った記憶があります。

● ZIP アーカイブ展開時のタイムスタンプ不正障害に関する修正

というツイートを元に提案した以下の修正が取り込まれました。

  • 133d13e44544: archival: add "extended-timestamp" extra block for zip archives (issue3600)

調査の過程/顛末に関しては、『ZIP 形式アーカイブのタイムスタンプ問題』に詳細があります。

この障害の修正にあたっては、Mercurial の Bug Tracking System 経由で情報提供して頂いた @jun66j5 氏に負うところが大きいです。

ちなみに、Explorer 経由で使用可能な、Windows 組み込みの zip 展開処理は、上記修正を施しても日付情報を正しく展開できません……orz

これは、比較的有名な問題らしく、3rd party 製の zip ツールでは問題無いらしいです(ツールによっては環境変数の設定が必要、とのことですが…)。

リポジトリ破損時の対処方法への導線確保に関する修正

を始めとする、リポジトリ破損系の『助けて!!ツイート』(笑)を元に、トランザクション確定時の部分 verify 機能の提案をした際に、部分 verify 機能の提案自体は却下されたのですが、以下の修正に関しては取り込まれました。

  • 9a1796af4f8d: verify: rename "hasmanifest" variable for source code readability
  • 2e3ceb59c312: verify: use appropriate local variable in "checkentry()"
  • 4562570ae0f7: verify: use appropriate node information to show verification error
  • 009db477c9fb: help: add information about recovery from corruption to help of "verify"

ヘルプで追加されたリンク先ページの翻訳版も作成しましたので、日本語版ヘルプでは翻訳版ページの URL が表示されるようにしてあります。

本体に取り込まれた修正(changed by others)

以下に列挙する修正は、コミュニティからの情報を元に私以外の方が提案した修正のうち、Mercurial 本体に取り込まれたものです。

これらは私の記憶ベースで列挙してますので、漏れがありましたらお知らせください。

また、直接 Mercurial の Bug Tracking System に報告したものが契機となって修正されたものは含まれていませんので、ご了承ください。

● ヘルプドキュメントファイル欠損に関する修正

というツイートを元に起票した障害報告に対して、以下の修正が実施されました。

  • 939f043ab5ed: wix: add phases help text and two more translations (issue 3288)

● cp932 利用障害に関する修正

というツイートを元に、以下の修正が実施されました。

2.3 リリース時は、これ以外にも互換性問題がありましたねぇ……

● パッチ投函をそそのかして取り込まれた修正

以下の修正は、『この辺に問題がありました』⇒『パッチ投函してみましょう!』⇒『取り込まれました』的な流れで取り込まれた修正です。

  • 740f20e252bd: tests: skip test-lfconvert.t if not support symblic link

正確には、上記の件でパッチ投函をそそのかしたら、結果的に Mercruail のコミッタによって以下の修正が実施される、という変化球展開。

  • 2c1fc483efa4: commands: 'hg bookmark NAME' should work even with ui.strict=True

何らかの成果に結びついたもの

以下は、Mercurial 本体には取り込まれていませんが、コミュニティからの要望を契機に、何らかの成果に結びついたものです。

● "hg add" における『全ファイル追加』からの保護機能

AddGuard Extension は、以下のツイートを元に実装しました。

ssh 連携リモートホストでのリポジトリ形式不整合時挙動の問題

以下のパッチ提案は:

が元になっています。

最終的には、『頑張ってサーバ側の Mercurial を更新してもらったほうが良くねぇ?』(超意訳)ということで、残念ながら本体への修正取り込みはされませんでしたが、推奨 Mercurial 版を1.8.1 以降に更新するきっかけになりました。

バックログ

以下は、コミュニティにおける要望のうち、私の個人的な TODO リストに積まれているものです。

余裕があれば、そのうち何とかしたいですね。あるいは、誰かが横取りしてやってくれても全然構いません。っていうか横取り大歓迎です(笑)。

● case ignore な .hgignore

ファイル名合致判定の case insensitive filesystem 対応の一環での修正を考えています。

(2013-11-24 追記) パターン記述の際に、正規表現記述の中で文字大小無視を指示することが可能です。

● TrotoiseHg における pull 時の自動 update での作業領域状態不正

これらの現象は、多分:

  • TortoiseHg を使用している
  • pull 時に作業領域を自動的に update する設定にしている

状況で、何らかの条件が揃った場合に、作業領域が特定のリビジョン(上のケースは null、下のケースは不明)で update されているのではないかと思われます。

# まだ原因を特定できていません…… orz

● コミットログ入力/記録時の形式変更機能

上記のような『コミット時に起動されたエディタに表示される内容を変更したい』というニーズ以外にも、『実際に記録されるコミットログを強制的に改変したい』(例: 障害番号の埋め込み等)というニーズへの対応も含めて考えています。

多分、template 機能によるカスタマイズ機能の追加 + フックの追加での実現になると思います。

列挙系表示のカスタマイズが、インラインでも可能になった(詳細はこちらのエントリも参照してみてください)ので、実現に関する敷居は随分下がっている筈。

(2014-07-23 追記) 対応修正が取り込み済みです。

Windows ファイル共有の認証機能付きスキーマの追加

http や ssh と同列に:

指定リポジトリへのアクセス前には、自動で Windows の認証機能を叩く

というスキーマを追加する方向での実現を考えています。

但し、話的には面白いのですが、(1) Python からのプラットフォームのネイティブ機能の呼び出し方法と、(2) Windows の WNetAddConnection 系 API の使用方法の両方に関する修得が必要な点で、個人的にはちょっとアクティビティが下がる項目です(笑)。

● ウェブインタフェースの改善

大きな視点で見ると、『ウェブインタフェースの i18n 化』と絡んでくるのかも?なテーマという認識です。

● 同名の『ファイル』と『ディレクトリ』のマージ

これに関しては:

なんですよねぇ〜。

但し、10 月になって、devel-ml に修正案の投函があり、レビュー結果反映版も継続的に投函されていることから、近々修正が取り込まれるものと思われます。

● .hgignore 記述形式の強化

これに関しては、.hgignore の無視判定が、『任意のパターンに合致したら即無視』という実装であり、最長一致判定をしていないことから、extensions 指定と同様な『先行する無視パターンを ! でキャンセル』とは馴染まないんですよねぇ。

但し:

! で指定したパターンに合致したら、以後の合致判定をスキップして強制的に管理対象とみなす

的なニュアンスとしての新記法の導入ならばアリかも?と思っています。

(2013-10-27 追記) 最終的な結論としては、正規表現で頑張るしかなさそうです。

● パッチキュー途中での改名への対応

上記発言の意図は『既に存在する履歴の改変』がメインだったのですが、もう少し踏み込んで考えてみると:

パッチ適用の前段階 or 途中でファイルが改名された際に、後続パッチ群に含まれる改名元ファイルに対する変更内容は、どのように処するべきか?

という問題に一般化できます。

多分、以下の様な実現になるのかな?

  • 改名実施状況を、状態情報としてキャッシュ
  • 改名元ファイルへの改変内容は、改名先に適用
  • qrefresh 無しでも、パッチ中の適用先ファイル名を更新してしまうかは要相談
  • 適用先リビジョン変更の際に、パッチによる改変対象ファイルが既に改名済みであることを表明するコマンドの名前は要相談

ちなみに、この質問に関して色々挙動確認している際に見つけた revset 挙動の不具合に関して、デグレード確認用にテストを追加した以下の修正は、間接的にはこのツイートが契機になっている、と言えるかも知れません(笑)。

  • acd4577a568d: test: add test for the issue introduced by e410be860393 (issue3669)

● 複数ヘッド化による push 失敗時のメッセージの適正化

失敗時のヒント情報では『"hg help push" を読め!』と誘導しておいて、"hg help push" 側で『リポジトリの運用ポリシーを確認してから使えよ! > --force』というあたりが、妥当な落とし所かなぁ。

というあたりまでは考えたのですが、2012年末は全然余裕がない状況だったので、パッチ提案出来ず仕舞いでした……orz

(2013-12-29 追記) 対応修正が取り込み済みです。

● churn での『ファイル毎統計』対応機能の追加

現状のchurn エクステンションにおける統計機能は、ユーザ毎/期間毎の2種類しか選べないけど、『熱いファイル』『臭うファイル』の特定等を考えると、ファイル毎統計は確かに欲しいかも。

● 対話的パスワード入力におけるメッセージの文字化け

手元の環境で再現するところまでは確認出来たのですが、これまた『年末に全然余裕が無いよ!』モード下だったので、そこから先は手付かず状態……。

(2013-12-29 追記) 対応修正が取り込み済みです。