Subject: [PATCH v4 0/5] Use complete_action's todo list to do the rebase

From: Alban Gruin <[email-masked]>
Date: Sun, 24 Nov 2019 18:43:27 +0100

This can be seen as a continuation of ag/reduce-rewriting-todo.

Currently, complete_action() releases its todo list before calling
sequencer_continue(), which reloads the todo list from the disk.  This
series removes this useless round trip.

Patches 1, 2, and 3 originally come from a series meaning to improve
rebase.missingCommitsCheck[0].  In the original series, I wanted to
check for missing commits in read_populate_todo(), so a warning could be
issued after a `rebase --continue' or an `exec' commands.  But, in the
case of the initial edit, it is already checked in complete_action(),
and would be checked a second time in sequencer_continue() (a caller of
read_populate_todo()).  So I hacked up sequencer_continue() to accept a
pointer to a todo list, and if not null, would skip the call to
read_populate_todo().  (This was really ugly, to be honest.)  Some
issues arose with git-prompt.sh[1], hence 1, 2 and 3.

Patch 5 is a new approach to what I did first.  Instead of bolting a new
parameter to sequencer_continue(), this makes complete_action() calling
directly pick_commits().

This is based on 4c86140027 ("Third batch").

Changes since v3:

 - s/amount/number/ on patches 2 and 3, according to a comment from
   Junio[2] that I had forgotten before I sent the v3 X-(

The tip of this series is tagged as reduce-todo-list-cont-v4 at
https://github.com/agrn/git.

[0] http://public-inbox.org/git/[email-masked]/
[1] http://public-inbox.org/git/1732521.CJWHkCQAay@andromeda/
[2] http://public-inbox.org/git/[email-masked]/

Alban Gruin (5):
  sequencer: update `total_nr' when adding an item to a todo list
  sequencer: update `done_nr' when skipping commands in a todo list
  sequencer: move the code writing total_nr on the disk to a new
    function
  rebase: fill `squash_onto' in get_replay_opts()
  sequencer: directly call pick_commits() from complete_action()

 builtin/rebase.c |  5 +++++
 sequencer.c      | 32 +++++++++++++++++++++++---------
 2 files changed, 28 insertions(+), 9 deletions(-)

Diff-intervalle contre v3 :
1:  11a221e82e = 1:  11a221e82e sequencer: update `total_nr' when adding an item to a todo list
2:  76a3af70b6 ! 2:  6b402a3070 sequencer: update `done_nr' when skipping commands in a todo list
    @@ Metadata
      ## Commit message ##
         sequencer: update `done_nr' when skipping commands in a todo list
     
    -    In a todo list, `done_nr' is the amount of commands that were executed
    +    In a todo list, `done_nr' is the number of commands that were executed
         or skipped, but skip_unnecessary_picks() did not update it.
     
         This variable is mostly used by command prompts (ie. git-prompt.sh and
3:  9c5bd30465 ! 3:  0171db4fba sequencer: move the code writing total_nr on the disk to a new function
    @@ Metadata
      ## Commit message ##
         sequencer: move the code writing total_nr on the disk to a new function
     
    -    The total amount of commands can be used to show the progression of the
    +    The total number of commands can be used to show the progression of the
         rebasing in a shell.  It is written to the disk by read_populate_todo()
         when the todo list is loaded from sequencer_continue() or
         pick_commits(), but not by complete_action().
4:  bc3d69a10e = 4:  88f6335c37 rebase: fill `squash_onto' in get_replay_opts()
5:  e7691db66b = 5:  53586b1bed sequencer: directly call pick_commits() from complete_action()
-- 
2.24.0