彷徨えるフジワラ

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

Mercurial のブランチ、ブックマーク、タグの名前で使用を回避すべき文字

暫く前に、本家のユーザ ML 宛てに以下の質問が寄せられていました。

元々禁止されている文字以外に、ブランチ、ブックマーク、タグの名前に、使うべきではない文字ってある? (意訳)

Mercurial では、以下の名前と:

  • tip
  • . (ドット)
  • null
  • 数字のみで構成された名前

以下の文字を使用したブランチ、ブックマーク、タグの新規作成は、事前検出で「不正な名前」とみなされ、処理が中断されます。

  • ":" (コロン)
  • "\0" (ヌル文字)
  • "\n" (LF)
  • "\r" (CR)

ML でのやり取りでは、上記のものに加えて、以下の文字の使用は回避すべき、という意見が出されました。

  • URL 指定での区切り記号/エスケープ記号と紛らわしい "/" (スラッシュ) や "#"、"%"
  • 各種検索でエスケープ処理が必要になる "\\" (バックスラッシュ)

また、"-" (マイナス記号) は、revsets 記述では「名前の区切り」とみなされることから、引用符の使用が必要になってしまいます。

例えば、ブランチ release-0001 に属するリビジョンの問い合わせは:

  • 誤: branch(release-0001)
  • 正: branch('release-0001')

普段から引用符の併用が習慣化してるような人にとっては、あまり影響が無い話ですが、人によってはマイナス記号の使用を避ける動機になるかもしれませんね。

マイナス記号の代替としては、"_" (アンダースコア) あたりが妥当でしょうが、どちらにするかは完全に趣味の領域でしょうねぇ(笑)

なお、ブランチ、ブックマーク、タグの複数のカテゴリにおいて、同じ名前を使ってしまった場合でも、revsets 表記の機能を使うことで、特定のカテゴリの名前を確実に参照できます。

ちなみに、このエントリを書いていて、ふと気になってソースを確認してみたら、qparent とか qbaseqtip といった MQ 固有のタグ名に対しては:

  • パッチ適用時に同名の既存タグ検出された場合、「タグが上書きされる」旨の警告を表示するだけ
  • MQ エクステンションが有効になっていても、これらの名前の使用自体は、何も制限されない

という実装になっていました。あくまで「パッチ適用時の一時的な名前」なので、強い制限は掛けない、という方針なのでしょう。