this is a reroll of the patch series that enables rudimentary support
of line options for git-rebase's to-do list commands and reimplements
the well-known commands `reword` and `squash` in terms of a
I tried to address all the issues raised by Junio in this reroll.
Here is a short summary.
- Test that `reword` behaves like `pick` regarding the `pre-commit`
hook and executes `commit-msg` for the new log message.
- Instead of disallowing empty log messages for root commits allow
empty log messages for all unchanged commits.
- The patch "root commits are replayed with an unnecessary option"
does not change the behaviour of git-rebase but it makes the
subsequent patch easier to read.
The hidden agenda is to have one git-commit command line in
`do_pick` that takes care of rewriting commits as they are being
replayed, be they parentless or not. The advantage of having one
rewrite command instead of one for root commits and one for
non-root commits is that changes to the rewrite mechanism entail
less code changes. As more rewriting mechanisms are being added to
`do_pick`, it becomes important that they compose well with each
other to avoid having a series of amending commits. The `-C`
option conflicts with other ways of substituting the log message,
like files and strings, which is why it seems not to compose so
- The patch "explicitly distinguish replay commands and exec tasks"
does not change behaviour either but is again a separated
The distinction of the `exec` command and the replay commands,
which all share the same line format `command args sha1 rest`,
allows us to employ the positional parameters feature of the shell
without introducing another indentation level in `do_pick`.
Thanks for your time,
Fabian Ruch (19):
rebase -i: failed reword prints redundant error message
rebase -i: allow rewording an empty commit without complaints
rebase -i: reword executes pre-commit hook on interim commit
rebase -i: teach do_pick the option --edit
rebase -i: implement reword in terms of do_pick
rebase -i: allow replaying commits with empty log messages
rebase -i: log the replay of root commits
rebase -i: root commits are replayed with an unnecessary option
rebase -i: commit only once when rewriting picks
rebase -i: do not die in do_pick
rebase -i: teach do_pick the option --amend
rebase -i: teach do_pick the option --file
rebase -i: prepare for squash in terms of do_pick --amend
rebase -i: implement squash in terms of do_pick
rebase -i: explicitly distinguish replay commands and exec tasks
rebase -i: parse to-do list command line options
rebase -i: teach do_pick the option --reset-author
rebase -i: teach do_pick the option --signoff
rebase -i: enable options --signoff, --reset-author for pick, reword
git-rebase--interactive.sh | 284 ++++++++++++++++++++++++++++++++++--------
t/t3404-rebase-interactive.sh | 70 +++++++++++
t/t3412-rebase-root.sh | 19 +++
t/test-lib-functions.sh | 6 +-
4 files changed, 325 insertions(+), 54 deletions(-)
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html