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

Re: [PATCH v2 13/14] rebase --apply: set ORIG_HEAD correctly

From
Elijah Newren <newren@gmail.com>
Date
Dec 11, 2021, 10:59 UTC
Message-ID
<CABPp-BEHW4VLG18twcM_8iOco1jZ2iuGT+KN8aS+-sAAnBhTnw@mail.gmail.com>
In-Reply-To
<45a5b5e981804c540991a63675909c4155b86b5e.1638975482.git.gitgitgadget@gmail.com>

On Wed, Dec 8, 2021 at 6:58 AM Phillip Wood via GitGitGadget <gitgitgadget@gmail.com> wrote:

>
> From: Phillip Wood <phillip.wood@dunelm.org.uk>
>
> At the start of a rebase ORIG_HEAD is updated to tip of the branch

Could we insert a comma between "rebase" and "ORIG_HEAD"? Otherwise I try to read it as "At the start of a `rebase ORIG_HEAD` is updated..." and get totally lost. I had to re-read the sentence a few times before I understood what it was trying to say.

Also, perhaps s/to tip of/to the tip of/ ?
Show 101 quoted lines
> being rebased. Unfortunately reset_head() always uses the current
> value of HEAD for this which is incorrect if the rebase is started
> with "git rebase <upstream> <branch>" as in that case ORIG_HEAD should
> be updated to <branch>. This only affects the "apply" backend as the
> "merge" backend does not yet use reset_head() for the initial
> checkout. Fix this by passing in orig_head when calling reset_head()
> and add some regression tests.
>
> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
> ---
>  builtin/rebase.c           |  1 +
>  reset.c                    |  4 +++-
>  reset.h                    |  4 ++++
>  t/t3418-rebase-continue.sh | 26 ++++++++++++++++++++++++++
>  4 files changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index b55a9cff05d..e942c300f8c 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -1769,6 +1769,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
>         strbuf_addf(&msg, "%s: checkout %s",
>                     getenv(GIT_REFLOG_ACTION_ENVIRONMENT), options.onto_name);
>         ropts.oid = &options.onto->object.oid;
> +       ropts.orig_head = &options.orig_head,
>         ropts.flags = RESET_HEAD_DETACH | RESET_ORIG_HEAD |
>                         RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
>         ropts.head_msg = msg.buf;
> diff --git a/reset.c b/reset.c
> index e02915c0f65..448cb3fd785 100644
> --- a/reset.c
> +++ b/reset.c
> @@ -15,6 +15,7 @@ static int update_refs(const struct reset_head_opts *opts,
>         unsigned detach_head = opts->flags & RESET_HEAD_DETACH;
>         unsigned run_hook = opts->flags & RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
>         unsigned update_orig_head = opts->flags & RESET_ORIG_HEAD;
> +       const struct object_id *orig_head = opts->orig_head;
>         const char *switch_to_branch = opts->branch;
>         const char *reflog_branch = opts->branch_msg;
>         const char *reflog_head = opts->head_msg;
> @@ -43,7 +44,8 @@ static int update_refs(const struct reset_head_opts *opts,
>                                 strbuf_addstr(&msg, "updating ORIG_HEAD");
>                                 reflog_orig_head = msg.buf;
>                         }
> -                       update_ref(reflog_orig_head, "ORIG_HEAD", head,
> +                       update_ref(reflog_orig_head, "ORIG_HEAD",
> +                                  orig_head ? orig_head : head,
>                                    old_orig, 0, UPDATE_REFS_MSG_ON_ERR);
>                 } else if (old_orig)
>                         delete_ref(NULL, "ORIG_HEAD", old_orig, 0);
> diff --git a/reset.h b/reset.h
> index 7ef7e43ea8c..a28f81829d8 100644
> --- a/reset.h
> +++ b/reset.h
> @@ -22,6 +22,10 @@ struct reset_head_opts {
>          * The commit to checkout/reset to. Defaults to HEAD.
>          */
>         const struct object_id *oid;
> +       /*
> +        * Optional value to set ORIG_HEAD. Defaults to HEAD.
> +        */
> +       const struct object_id *orig_head;
>         /*
>          * Optional branch to switch to.
>          */
> diff --git a/t/t3418-rebase-continue.sh b/t/t3418-rebase-continue.sh
> index 22eca73aa3e..130e2f9b553 100755
> --- a/t/t3418-rebase-continue.sh
> +++ b/t/t3418-rebase-continue.sh
> @@ -308,4 +308,30 @@ test_expect_success 'there is no --no-reschedule-failed-exec in an ongoing rebas
>         test_expect_code 129 git rebase --edit-todo --no-reschedule-failed-exec
>  '
>
> +test_orig_head_helper () {
> +       test_when_finished 'git rebase --abort &&
> +               git checkout topic &&
> +               git reset --hard commit-new-file-F2-on-topic-branch' &&
> +       git update-ref -d ORIG_HEAD &&
> +       test_must_fail git rebase "$@" &&
> +       test_cmp_rev ORIG_HEAD commit-new-file-F2-on-topic-branch
> +}
> +
> +test_orig_head () {
> +       type=$1
> +       test_expect_success "rebase $type sets ORIG_HEAD correctly" '
> +               git checkout topic &&
> +               git reset --hard commit-new-file-F2-on-topic-branch &&
> +               test_orig_head_helper $type main
> +       '
> +
> +       test_expect_success "rebase $type <upstream> <branch> sets ORIG_HEAD correctly" '
> +               git checkout main &&
> +               test_orig_head_helper $type main topic
> +       '
> +}
> +
> +test_orig_head --apply
> +test_orig_head --merge
> +
>  test_done
> --
Previous: Phillip Wood via GitGitGadgetNext: Phillip Wood via GitGitGadget
Message 62 of 85 in “rebase: reset_head() related fixes and improvements”
  1. 00/11 rebase: reset_head() related fixes and improvementsPhillip Wood via GitGitGadget, Oct 1, 2021
  2. 01/11 rebase: factor out checkout for up to date branchPhillip Wood via GitGitGadget, Oct 1, 2021
  3. 03/11 reset_head(): don't run checkout hook if there is an errorPhillip Wood via GitGitGadget, Oct 1, 2021
  4. Junio C HamanoOct 1, 2021
  5. Phillip WoodOct 4, 2021
  6. Ævar Arnfjörð BjarmasonOct 12, 2021
  7. 04/11 reset_head(): remove action parameterPhillip Wood via GitGitGadget, Oct 1, 2021
  8. Junio C HamanoOct 1, 2021
  9. Phillip WoodOct 4, 2021
  10. 05/11 reset_head(): factor out ref updatesPhillip Wood via GitGitGadget, Oct 1, 2021
  11. Junio C HamanoOct 1, 2021
  12. Phillip WoodOct 4, 2021
  13. 06/11 reset_head(): make default_reflog_action optionalPhillip Wood via GitGitGadget, Oct 1, 2021
  14. Junio C HamanoOct 1, 2021
  15. Junio C HamanoOct 1, 2021
  16. Phillip WoodOct 4, 2021
  17. 09/11 rebase --apply: fix reflogPhillip Wood via GitGitGadget, Oct 1, 2021
  18. Junio C HamanoOct 1, 2021
  19. 08/11 reset_head(): take struct rebase_head_optsPhillip Wood via GitGitGadget, Oct 1, 2021
  20. Junio C HamanoOct 1, 2021
  21. Phillip WoodOct 4, 2021
  22. 10/11 rebase --apply: set ORIG_HEAD correctlyPhillip Wood via GitGitGadget, Oct 1, 2021
  23. Junio C HamanoOct 1, 2021
  24. 02/11 reset_head(): fix checkoutPhillip Wood via GitGitGadget, Oct 1, 2021
  25. Junio C HamanoOct 1, 2021
  26. Phillip WoodOct 4, 2021
  27. Junio C HamanoOct 4, 2021
  28. Eric SunshineOct 1, 2021
  29. 11/11 rebase -m: don't fork git checkoutPhillip Wood via GitGitGadget, Oct 1, 2021
  30. 07/11 rebase: cleanup reset_head() callsPhillip Wood via GitGitGadget, Oct 1, 2021
  31. Junio C HamanoOct 2, 2021
  32. Junio C HamanoOct 2, 2021
  33. Phillip WoodOct 2, 2021
  34. Phillip WoodOct 2, 2021
  35. René ScharfeOct 2, 2021
  36. Phillip WoodOct 6, 2021
  37. 00/14 rebase: reset_head() related fixes and improvementsPhillip Wood via GitGitGadget, Dec 8, 2021
  38. 01/14 rebase: factor out checkout for up to date branchPhillip Wood via GitGitGadget, Dec 8, 2021
  39. Junio C HamanoDec 9, 2021
  40. 02/14 t5403: refactor rebase post-checkout hook testsPhillip Wood via GitGitGadget, Dec 8, 2021
  41. Junio C HamanoDec 9, 2021
  42. 03/14 rebase: pass correct arguments to post-checkout hookPhillip Wood via GitGitGadget, Dec 8, 2021
  43. Junio C HamanoDec 9, 2021
  44. 04/14 rebase: do not remove untracked files on checkoutPhillip Wood via GitGitGadget, Dec 8, 2021
  45. Junio C HamanoDec 9, 2021
  46. 05/14 rebase --apply: don't run post-checkout hook if there is an errorPhillip Wood via GitGitGadget, Dec 8, 2021
  47. 06/14 reset_head(): remove action parameterPhillip Wood via GitGitGadget, Dec 8, 2021
  48. 07/14 create_autostash(): remove unneeded parameterPhillip Wood via GitGitGadget, Dec 8, 2021
  49. Junio C HamanoDec 9, 2021
  50. Phillip WoodJan 25, 2022
  51. 08/14 reset_head(): factor out ref updatesPhillip Wood via GitGitGadget, Dec 8, 2021
  52. 09/14 reset_head(): make default_reflog_action optionalPhillip Wood via GitGitGadget, Dec 8, 2021
  53. Junio C HamanoDec 9, 2021
  54. 10/14 rebase: cleanup reset_head() callsPhillip Wood via GitGitGadget, Dec 8, 2021
  55. Junio C HamanoDec 9, 2021
  56. Phillip WoodJan 25, 2022
  57. 11/14 reset_head(): take struct rebase_head_optsPhillip Wood via GitGitGadget, Dec 8, 2021
  58. Junio C HamanoDec 9, 2021
  59. 12/14 rebase --apply: fix reflogPhillip Wood via GitGitGadget, Dec 8, 2021
  60. Junio C HamanoDec 9, 2021
  61. 13/14 rebase --apply: set ORIG_HEAD correctlyPhillip Wood via GitGitGadget, Dec 8, 2021
  62. Elijah NewrenDec 11, 2021
  63. 14/14 rebase -m: don't fork git checkoutPhillip Wood via GitGitGadget, Dec 8, 2021
  64. Junio C HamanoDec 9, 2021
  65. Phillip WoodJan 26, 2022
  66. Junio C HamanoJan 27, 2022
  67. Elijah NewrenDec 11, 2021
  68. 00/14 rebase: reset_head() related fixes and improvementsPhillip Wood via GitGitGadget, Jan 26, 2022
  69. 01/14 rebase: factor out checkout for up to date branchPhillip Wood via GitGitGadget, Jan 26, 2022
  70. 02/14 t5403: refactor rebase post-checkout hook testsPhillip Wood via GitGitGadget, Jan 26, 2022
  71. 03/14 rebase: pass correct arguments to post-checkout hookPhillip Wood via GitGitGadget, Jan 26, 2022
  72. 04/14 rebase: do not remove untracked files on checkoutPhillip Wood via GitGitGadget, Jan 26, 2022
  73. 05/14 rebase --apply: don't run post-checkout hook if there is an errorPhillip Wood via GitGitGadget, Jan 26, 2022
  74. 06/14 reset_head(): remove action parameterPhillip Wood via GitGitGadget, Jan 26, 2022
  75. 07/14 reset_head(): factor out ref updatesPhillip Wood via GitGitGadget, Jan 26, 2022
  76. 08/14 reset_head(): make default_reflog_action optionalPhillip Wood via GitGitGadget, Jan 26, 2022
  77. 09/14 create_autostash(): remove unneeded parameterPhillip Wood via GitGitGadget, Jan 26, 2022
  78. 10/14 rebase: cleanup reset_head() callsPhillip Wood via GitGitGadget, Jan 26, 2022
  79. 11/14 reset_head(): take struct rebase_head_optsPhillip Wood via GitGitGadget, Jan 26, 2022
  80. Ævar Arnfjörð BjarmasonJan 26, 2022
  81. Phillip WoodJan 26, 2022
  82. 12/14 rebase --apply: fix reflogPhillip Wood via GitGitGadget, Jan 26, 2022
  83. 13/14 rebase --apply: set ORIG_HEAD correctlyPhillip Wood via GitGitGadget, Jan 26, 2022
  84. 14/14 rebase -m: don't fork git checkoutPhillip Wood via GitGitGadget, Jan 26, 2022
  85. Elijah NewrenFeb 1, 2022

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.