git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Alban Gruin <alban.gruin@gmail.com>
Date
Oct 7, 2019, 09:26 UTC
Message-ID
<20191007092641.12661-1-alban.gruin@gmail.com>
In-Reply-To
<20190925201315.19722-1-alban.gruin@gmail.com>
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 v1:
 - Rewording of patches 1, 2, 4 and 5 according to comments made by
   Phillip Wood, Junio C Hamano and Johannes Schindelin.

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

[0] http://public-inbox.org/git/20190717143918.7406-1-alban.gruin@gmail.com/ [1] http://public-inbox.org/git/1732521.CJWHkCQAay@andromeda/

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      | 26 ++++++++++++++++++--------
 2 files changed, 23 insertions(+), 8 deletions(-)
Diff-intervalle contre v1 :
1:  d177b0de1a ! 1:  9215b191c7 sequencer: update `total_nr' when adding an item to a todo list
    @@ Metadata
      ## Commit message ##
         sequencer: update `total_nr' when adding an item to a todo list
     
    -    `total_nr' is the total amount of items, done and toto, that are in a
    -    todo list.  But unlike `nr', it was not updated when an item was
    -    appended to the list.
    +    `total_nr' is the total number of items, counting both done and todo,
    +    that are in a todo list.  But unlike `nr', it was not updated when an
    +    item was appended to the list.
     
         This variable is mostly used by command prompts (ie. git-prompt.sh and
    -    the like).
    +    the like).  By forgetting to update it, the original code made it not
    +    reflect the reality, but this flaw was masked by the code calling
    +    unnecessarily read_todo_list() again to update the variable to its
    +    correct value.  At the end of this series, the unnecessary call will be
    +    removed, and the inconsistency addressed by this patch would start to
    +    matter.
     
         Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
     
2:  09fcbe159b ! 2:  7cad541092 sequencer: update `done_nr' when skipping commands in a todo list
    @@ Commit message
         or skipped, but skip_unnecessary_picks() did not update it.
     
         This variable is mostly used by command prompts (ie. git-prompt.sh and
    -    the like).
    +    the like).  As in the previous commit, this inconsistent behaviour is
    +    not a problem yet, but it would start to matter at the end of this
    +    series the same reason.
     
         Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
     
3:  26a18cd1a9 = 3:  7c9c4ddd30 sequencer: move the code writing total_nr on the disk to a new function
4:  5d74903cfe ! 4:  cd44fb4e10 rebase: fill `squash_onto' in get_replay_opts()
    @@ Metadata
      ## Commit message ##
         rebase: fill `squash_onto' in get_replay_opts()
     
    -    get_replay_opts() did not fill `squash_onto' if possible, meaning that
    -    this field should be read from the disk by the sequencer through
    -    read_populate_opts().  Without this, calling `pick_commits()' directly
    -    will result in incorrect results with `rebase --root'.
    +    Currently, the get_replay_opts() function does not initialise the
    +    `squash_onto' field (which is used for the `--root' mode), only
    +    read_populate_opts() does.  That would lead to incorrect results when
    +    calling pick_commits() without reading the options from the disk first.
     
         Let’s change that.
     
5:  dc803c671f ! 5:  523fdd35a1 sequencer: directly call pick_commits() from complete_action()
    @@ Commit message
         sequencer: directly call pick_commits() from complete_action()
     
         Currently, complete_action() calls sequencer_continue() to do the
    -    rebase.  Even though the former already has the todo list, the latter
    -    loads it from the disk and parses it.  Calling directly pick_commits()
    -    from complete_action() avoids this unnecessary round trip.
    +    rebase.  Before the former calls pick_commits(), it
    +
    +     - calls read_and_refresh_cache() -- this is unnecessary here as we've
    +       just called require_clean_work_tree()
    +     - calls read_populate_opts() -- this is unnecessary as we're starting a
    +       new rebase, so opts is fully populated
    +     - loads the todo list -- this is unnecessary as we've just populated
    +       the todo list
    +     - commits any staged changes -- this is unnecessary as we're starting a
    +       new rebase, so there are no staged changes
    +     - calls record_in_rewritten() -- this is unnecessary as we're starting
    +       a new rebase.
    +
    +    This changes complete_action() to directly call pick_commits() to avoid
    +    these unnecessary steps.
     
         Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
     
-- 
2.23.0
Previous: Phillip WoodNext: Alban Gruin
Message 26 of 50 in “sequencer: update `total_nr' when adding an item to a todo list”
  1. 1/5 sequencer: update `total_nr' when adding an item to a todo listAlban Gruin, Sep 25, 2019
  2. Junio C HamanoOct 2, 2019
  3. Johannes SchindelinOct 2, 2019
  4. Junio C HamanoOct 2, 2019
  5. Johannes SchindelinOct 2, 2019
  6. Alban GruinOct 2, 2019
  7. 2/5 sequencer: update `done_nr' when skipping commands in a todo listAlban Gruin, Sep 25, 2019
  8. 3/5 sequencer: move the code writing total_nr on the disk to a new functionAlban Gruin, Sep 25, 2019
  9. 4/5 rebase: fill `squash_onto' in get_replay_opts()Alban Gruin, Sep 25, 2019
  10. Phillip WoodSep 27, 2019
  11. Johannes SchindelinOct 2, 2019
  12. Phillip WoodOct 2, 2019
  13. Johannes SchindelinOct 2, 2019
  14. 5/5 sequencer: directly call pick_commits() from complete_action()Alban Gruin, Sep 25, 2019
  15. Phillip WoodSep 27, 2019
  16. Johannes SchindelinOct 2, 2019
  17. Alban GruinOct 2, 2019
  18. Junio C HamanoOct 2, 2019
  19. Alban GruinOct 2, 2019
  20. René ScharfeOct 26, 2019
  21. Alban GruinOct 26, 2019
  22. Junio C HamanoOct 28, 2019
  23. Junio C HamanoOct 28, 2019
  24. 0/5 Use complete_action's todo list to do the rebaseAlban Gruin, Sep 25, 2019
  25. Phillip WoodSep 27, 2019
  26. 0/5 Use complete_action's todo list to do the rebaseAlban Gruin, Oct 7, 2019
  27. 1/5 sequencer: update `total_nr' when adding an item to a todo listAlban Gruin, Oct 7, 2019
  28. 2/5 sequencer: update `done_nr' when skipping commands in a todo listAlban Gruin, Oct 7, 2019
  29. 3/5 sequencer: move the code writing total_nr on the disk to a new functionAlban Gruin, Oct 7, 2019
  30. 4/5 rebase: fill `squash_onto' in get_replay_opts()Alban Gruin, Oct 7, 2019
  31. 5/5 sequencer: directly call pick_commits() from complete_action()Alban Gruin, Oct 7, 2019
  32. Junio C HamanoOct 8, 2019
  33. Alban GruinOct 8, 2019
  34. Johannes SchindelinOct 14, 2019
  35. 0/5 Use complete_action's todo list to do the rebaseAlban Gruin, Nov 23, 2019
  36. 1/5 sequencer: update `total_nr' when adding an item to a todo listAlban Gruin, Nov 23, 2019
  37. 4/5 rebase: fill `squash_onto' in get_replay_opts()Alban Gruin, Nov 23, 2019
  38. 5/5 sequencer: directly call pick_commits() from complete_action()Alban Gruin, Nov 23, 2019
  39. 3/5 sequencer: move the code writing total_nr on the disk to a new functionAlban Gruin, Nov 23, 2019
  40. 2/5 sequencer: update `done_nr' when skipping commands in a todo listAlban Gruin, Nov 23, 2019
  41. 0/5 Use complete_action's todo list to do the rebaseAlban Gruin, Nov 24, 2019
  42. 1/5 sequencer: update `total_nr' when adding an item to a todo listAlban Gruin, Nov 24, 2019
  43. 2/5 sequencer: update `done_nr' when skipping commands in a todo listAlban Gruin, Nov 24, 2019
  44. 4/5 rebase: fill `squash_onto' in get_replay_opts()Alban Gruin, Nov 24, 2019
  45. Jonathan TanNov 26, 2019
  46. 3/5 sequencer: move the code writing total_nr on the disk to a new functionAlban Gruin, Nov 24, 2019
  47. 5/5 sequencer: directly call pick_commits() from complete_action()Alban Gruin, Nov 24, 2019
  48. Jonathan TanNov 26, 2019
  49. Alban GruinNov 27, 2019
  50. Alban GruinNov 27, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.