読者です 読者をやめる 読者になる 読者になる

いつの間にかhg recordのハンクが最少単位になっていた

いつの間にか(手元のMercurial1.9ではすでにそうなっていた)hg recordでコミットできるハンクが最少単位になった。
最少単位っていうのは、連続して変更された行をまとめて一つのハンクとしている。
たとえば、次のコードを、

class Hoge
  def initialize(a, b, c)
    @a, @b, @c = a, b, c
  end
  def hoge
    @a
  end
  def foo
    @b
  end
  def bar
    @c
  end
end

こう直す。

class Hoge
  def initialize(a, b, c)
    @a, @b, @c = a, b, c
  end

  def hoge
    @a
  end

  def foo
    @b
  end

  def bar
    @c
  end

  def hogefoobar
    @a+@b+@c
  end
end

メソッドの間に空行をいれる修正に加えて、Hoge#hogefoobar()を新しく作ってしまった。
このコミットをひとまとめにすることは許されないので、recordして「コードを読みやすくする修正」と「メソッドの追加」を分けてコミットする。
連続したハンクは4個なので、hg recordすると、

$ hg record
diff --git a/a.rb b/a.rb
4 個のハンク、 7 行の変更
'a.rb' の変更点を調べますか? [Ynsfdaq?]

のように聞かれるので、空行を挿入した行だけのハンクをまず登録/コミットし、追加したメソッドをコミットする。
登録できるハンクが細かくなったので、手当たり次第編集したときも、細かく論理的な単位でコミットできるようになった。
綺麗なコミットを作るためにみんな使う事。