Subject: [RFC PATCH 0/7] rebase -i: Implement `reword` and `squash` in terms of `do_pick`

From: Fabian Ruch <[email-masked]>
Date: Thu, 19 Jun 2014 05:28:18 +0200

Hi,

This patch series is part of the undertaking to add command line options
to to-do list commands. The goal is to be able to write something
similar to

    pick --reset-author --signoff a Some changes
    pick                          b Some more changes
    squash --no-edit              c Ack Some more changes.

The first submission to the mailing list adds options parsing to
`do_pick` and reimplements the current set of to-do list commands in
terms[1] of a parametrized `do_pick`. It neither adds new commands to
to-do lists nor exposes the command line options feature to the user.
Still it makes the implementation of `do_next` slightly more
straight-forward and the function `do_pick` behave more like an internal
git-cherry-pick.

The patches try to accomplish one thing at a time but are not standalone
in the sense that each of them constitutes a frame only in which a
subsequent patch can express its one thing. For instance, only
committing once and not dying in `do_pick` are things specific to
implementing `squash` in terms of `do_pick` but presented as separate
patches so that their correctness can be discussed independently.

The last patch contains some notes about when to run the post-rewrite
hook, something I could not figure out myself.

Thanks for your time,
   Fabian

[1] pick, reword, squash, fixup

Fabian Ruch (7):
  rebase -i: Make option handling in pick_one more flexible
  rebase -i: Teach do_pick the option --edit
  rebase -i: Stop on root commits with empty log messages
  rebase -i: Commit only once when rewriting picks
  rebase -i: Do not die in do_pick
  rebase -i: Prepare for squash in terms of do_pick --amend
  rebase -i: Teach do_pick the options --amend and --file

 git-rebase--interactive.sh    | 194 +++++++++++++++++++++++++++++++-----------
 t/t3404-rebase-interactive.sh |   8 ++
 t/t3412-rebase-root.sh        |  39 +++++++++
 3 files changed, 193 insertions(+), 48 deletions(-)

-- 
2.0.0