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

[PATCH v1 00/12] Run rebase -i without forking rebase--interactive

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Apr 17, 2019, 14:30 UTC
Message-ID
<20190417143044.17655-1-phillip.wood123@gmail.com>
In-Reply-To
<20190319190317.6632-1-phillip.wood123@gmail.com>
From: Phillip Wood <phillip.wood@dunelm.org.uk>

Thanks for the feedback on the last version. I've updated the final commit message to mention the speed up reported by Ævar. I've also removed the translation of the trace strings. Apart from that this series is unchanged. There shouldn't be any merge conflicts with the updated dl/merge-cleanup-scissors-fix I posted earlier. (There are conflicts with other series but they are already resolved in pu)

This series still based on a merge of master [e902e9bcae ("The second batch", 2019-03-11)] and ag/sequencer-reduce-rewriting-todo ed35d18841 ("rebase--interactive: move transform_todo_file()", 2019-03-05). It can be fetched from the tag rebase-i-no-fork/v1 at https://github.com/phillipwood/git.git

Phillip Wood (12):
  sequencer: always discard index after checkout
  rebase: don't translate trace strings
  rebase: rename write_basic_state()
  rebase: use OPT_RERERE_AUTOUPDATE()
  rebase -i: combine rebase--interactive.c with rebase.c
  rebase -i: remove duplication
  rebase -i: use struct commit when parsing options
  rebase -i: use struct object_id for squash_onto
  rebase -i: use struct rebase_options to parse args
  rebase -i: use struct rebase_options in do_interactive_rebase()
  rebase: use a common action enum
  rebase -i: run without forking rebase--interactive
 Makefile                      |   1 -
 builtin/rebase--interactive.c | 377 --------------------
 builtin/rebase.c              | 624 ++++++++++++++++++++++++++--------
 parse-options-cb.c            |  34 ++
 parse-options.h               |   4 +
 sequencer.c                   |  42 ++-
 sequencer.h                   |   7 +-
 7 files changed, 555 insertions(+), 534 deletions(-)
 delete mode 100644 builtin/rebase--interactive.c
Range-diff to rfc
 1:  549d45dc63 =  1:  fe51202dfb sequencer: always discard index after checkout
 -:  ---------- >  2:  2598165c0f rebase: don't translate trace strings
 2:  d896a3c76f =  3:  48801ccdd5 rebase: rename write_basic_state()
 3:  253de33871 =  4:  66972f0f7d rebase: use OPT_RERERE_AUTOUPDATE()
 4:  0aaeaf7c09 =  5:  c18aa58305 rebase -i: combine rebase--interactive.c with rebase.c
 5:  ff539c37d1 =  6:  27982630d1 rebase -i: remove duplication
 6:  71559a38db =  7:  f28e8df52a rebase -i: use struct commit when parsing options
 7:  34c9e4ae96 =  8:  1ae13b5a7d rebase -i: use struct object_id for squash_onto
 8:  4fe81c9e81 !  9:  efcc32d8e3 rebase -i: use struct rebase_options to parse args
    @@ -65,9 +65,9 @@
     +{
     +	struct replay_opts replay = REPLAY_OPTS_INIT;
     +
    -+	sequencer_init_config(&replay);
    -+
     +	replay.action = REPLAY_INTERACTIVE_REBASE;
    ++	sequencer_init_config(&replay);
    ++
     +	replay.signoff = opts->signoff;
     +	replay.allow_ff = !(opts->flags & REBASE_FORCE);
     +	if (opts->allow_rerere_autoupdate)
 9:  09343e540f = 10:  c89d815ad4 rebase -i: use struct rebase_options in do_interactive_rebase()
10:  9ad1482d7f ! 11:  fda591f006 rebase: use a common action enum
    @@ -38,14 +30,13 @@
     +	ACTION_ADD_EXEC
     +};
     +
    -+static const char *action_names[] = { N_("undefined"),
    -+				      N_("continue"),
    -+				      N_("skip"),
    -+				      N_("abort"),
    -+				      N_("quit"),
    -+				      N_("edit_todo"),
    -+				      N_("show_current_patch"),
    -+				      NULL };
    ++static const char *action_names[] = { "undefined",
    ++				      "continue",
    ++				      "skip",
    ++				      "abort",
    ++				      "quit",
    ++				      "edit_todo",
    ++				      "show_current_patch" };
     +
      static int add_exec_commands(struct string_list *commands)
      {
    @@ -173,14 +164,13 @@
     -		ACTION_EDIT_TODO,
     -		ACTION_SHOW_CURRENT_PATCH,
     -	} action = NO_ACTION;
    --	static const char *action_names[] = { N_("undefined"),
    --					      N_("continue"),
    --					      N_("skip"),
    --					      N_("abort"),
    --					      N_("quit"),
    --					      N_("edit_todo"),
    --					      N_("show_current_patch"),
    --					      NULL };
    +-	static const char *action_names[] = { "undefined",
    +-					      "continue",
    +-					      "skip",
    +-					      "abort",
    +-					      "quit",
    +-					      "edit_todo",
    +-					      "show_current_patch" };
     +	enum action action = ACTION_NONE;
      	const char *gpg_sign = NULL;
      	struct string_list exec = STRING_LIST_INIT_NODUP;
11:  ebfd7f80d9 ! 12:  d921226d32 rebase -i: run without forking rebase--interactive
    @@ -7,10 +7,18 @@
         `rebase--interactive`. Separate the option parsing in
         cmd_rebase__interactive() from the business logic to allow interactive
         rebases can be run without forking `rebase__interactive` by calling
    -    run_rebase_interactive() directly. This makes it easy to debug the
    -    sequencer without worrying about attaching to child processes. It also
    -    makes it easy to remove cmd_rebase__interactive() in the future when
    -    git-legacy-rebase.sh and git-rebase--preserve-merges.sh are retired.
    +    run_rebase_interactive() directly.
    +
    +    Starting interactive rebases without forking makes it easy to debug
    +    the sequencer without worrying about attaching to child
    +    processes. Ævar has also reported that some of the rebase perf tests
    +    are 30% faster [1].
    +
    +    This patch also makes it easy to remove cmd_rebase__interactive() in
    +    the future when git-legacy-rebase.sh and
    +    git-rebase--preserve-merges.sh are retired.
    +
    +    [1] https://public-inbox.org/git/87y359cfjj.fsf@evledraar.gmail.com/
         Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>

-- 2.21.0

Previous: Junio C HamanoNext: Phillip Wood
Message 26 of 40 in “rebase -i run without forking rebase--interactive”
  1. 00/11 rebase -i run without forking rebase--interactivePhillip Wood, Mar 19, 2019
  2. 02/11 rebase: rename write_basic_state()Phillip Wood, Mar 19, 2019
  3. 01/11 sequencer: always discard index after checkoutPhillip Wood, Mar 19, 2019
  4. Duy NguyenMar 20, 2019
  5. Phillip WoodMar 21, 2019
  6. 03/11 rebase: use OPT_RERERE_AUTOUPDATE()Phillip Wood, Mar 19, 2019
  7. 05/11 rebase -i: remove duplicationPhillip Wood, Mar 19, 2019
  8. 06/11 rebase -i: use struct commit when parsing optionsPhillip Wood, Mar 19, 2019
  9. 04/11 rebase -i: combine rebase--interactive.c with rebase.cPhillip Wood, Mar 19, 2019
  10. 07/11 rebase -i: use struct object_id for squash_ontoPhillip Wood, Mar 19, 2019
  11. 08/11 rebase -i: use struct rebase_options to parse argsPhillip Wood, Mar 19, 2019
  12. Junio C HamanoMar 21, 2019
  13. Phillip WoodMar 21, 2019
  14. Junio C HamanoMar 22, 2019
  15. Alban GruinMar 21, 2019
  16. Phillip WoodApr 10, 2019
  17. 10/11 rebase: use a common action enumPhillip Wood, Mar 19, 2019
  18. Ævar Arnfjörð BjarmasonMar 19, 2019
  19. Phillip WoodMar 21, 2019
  20. 09/11 rebase -i: use struct rebase_options in do_interactive_rebase()Phillip Wood, Mar 19, 2019
  21. 11/11 rebase -i: run without forking rebase--interactivePhillip Wood, Mar 19, 2019
  22. Josh SteadmonMar 20, 2019
  23. Ævar Arnfjörð BjarmasonMar 20, 2019
  24. Phillip WoodMar 21, 2019
  25. Junio C HamanoMar 21, 2019
  26. 00/12 Run rebase -i without forking rebase--interactivePhillip Wood, Apr 17, 2019
  27. 01/12 sequencer: always discard index after checkoutPhillip Wood, Apr 17, 2019
  28. 03/12 rebase: rename write_basic_state()Phillip Wood, Apr 17, 2019
  29. 04/12 rebase: use OPT_RERERE_AUTOUPDATE()Phillip Wood, Apr 17, 2019
  30. 02/12 rebase: don't translate trace stringsPhillip Wood, Apr 17, 2019
  31. Junio C HamanoApr 19, 2019
  32. Phillip WoodApr 25, 2019
  33. 05/12 rebase -i: combine rebase--interactive.c with rebase.cPhillip Wood, Apr 17, 2019
  34. 06/12 rebase -i: remove duplicationPhillip Wood, Apr 17, 2019
  35. 08/12 rebase -i: use struct object_id for squash_ontoPhillip Wood, Apr 17, 2019
  36. 07/12 rebase -i: use struct commit when parsing optionsPhillip Wood, Apr 17, 2019
  37. 09/12 rebase -i: use struct rebase_options to parse argsPhillip Wood, Apr 17, 2019
  38. 10/12 rebase -i: use struct rebase_options in do_interactive_rebase()Phillip Wood, Apr 17, 2019
  39. 12/12 rebase -i: run without forking rebase--interactivePhillip Wood, Apr 17, 2019
  40. 11/12 rebase: use a common action enumPhillip Wood, Apr 17, 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.