彷徨えるフジワラ

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

TokyoMercurial #6

TokyoMercurial #6 に参加してきた。

運営の id:troter 氏ならびに参加者の皆様、お疲れ様でした。

本日の話題

obsolete 対応が着々と進みつつある、という話とか: obsolete が明示的に有効になっている場合に限り、2.4 版では rebase も obsolete 機能を利用するルートが実行される実装になっている。

bookmark の機能強化/変更が熱い、という話とか: 10 月になって bookmark に関する devel-ml への投函が相当量ある。

Windows 環境で、アクティブウィンドウ限定のスクリーンショットを Alt + PrtSc で記録する際に、プルダウンメニューやポップアップメニューも含めたい場合、メニュー類を表示してから Alt を押すと、メニュー選択がキャンセルされてしまうので:

  1. Alt をあらかじめ押した状態で、
  2. スクリーンショットに含めたいメニュー類を全て表示させ、
  3. PrtSc を押してスクリーンショット取得

とやると、メニュー類もキャプチャできる、という話とか: でもツールによっては、Alt 押下の有無でコンテキストメニューの内容が変わるので要注意、ということが判明。

個人の作業目標

今回の個人的な黙々目標は、月末の 2.4 版リリースに向けての issue 3648 の修正作業。

Matt がわざわざ "adding foozy" したのは、『case-insensitive filesystem の話だし、当然修正するよな?』的なアレじゃないかと勝手に解釈(笑)。
現状の実装だと:

# "a" を追加
$ echo a > a
$ hg commit -Am '#0'

# こちらのヘッド (#2) では、"a" を登録除外 + "A" を新規追加
$ hg remove a
$ hg commit -m '#1'
$ echo A > A
$ hg commit -Am '#2'

# こちらのヘッド (#3) では "x" を改変
# (※ 『"a"/"A" に関係ない』コミットなら何でも良い)
$ hg update 0
$ echo x > x
$ hg commit -Am '#3'

# (#2) 側で "a" が除外登録されているため、
# (#3) とのマージ結果では "a" と "A" が共存しないことから、
# case-insensitive filesystem でも "a" と "A" は衝突しない
$ hg merge

という状況で、"a" と "A" が『ファイル名文字大小の問題での衝突』とみなされてマージが失敗するというのが、この障害の基本的なパターン。

一応理屈上は、『"a" が remote 側で removed された』場合には、文字大小問題での衝突とみなさない、という処理になるのだけれど:

  • 『"a" が remote 側で removed された』か否かは、(現状だと) manifestmerge() を実施するまでわからない
  • ヘッド (#3) 側で "a" を改変した場合、"a" に対して改変と削除のどちらを採用するか、マージの際に対話的な確認が必要
  • 以前、この辺の修正を行う際に、『manifestmerge() 実施後に衝突判定するのはどうよ?』(意訳)と提案したら、『散々確認事項に答えさせた上でファイル名衝突による中断とかマジ勘弁』(意訳) というやり取りがあった

という感じ。

一応、manifestmerge() 実施後時点で、なお衝突の可能性がある場合に、マージを中断する実装はできたのだけど、さて Matt をどう説得するか or 何か良い代案は無いか、悩ましいところなんだよなぁ。

懇親会の話題

今回は懐かし系あるある話がメインに。

『アイオメガの、金属ケースに入った記憶媒体』の名前が思い出せなかったけど、Click! メディアだった。ソースコードとかの小規模テキストデータ程度の移動には結構便利だったんだけど、やっぱり時代の徒花だよなぁ……