From: Junio C Hamano <gitster@pobox.com>
To: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, johannes.schindelin@gmx.de, me@ttaylorr.com,
Jeff Hostetler <git@jeffhostetler.com>,
Phillip Wood <phillip.wood123@gmail.com>,
Elijah Newren <newren@gmail.com>,
Derrick Stolee <derrickstolee@github.com>
Subject: Re: [PATCH v3 7/8] rebase: update refs from 'update-ref' commands
Date: Tue, 28 Jun 2022 14:15:20 -0700 [thread overview]
Message-ID: <xmqq7d50ij6f.fsf@gitster.g> (raw)
In-Reply-To: <72e0481b643e98c5670eee0bf5c199c4fb693b16.1656422759.git.gitgitgadget@gmail.com> (Derrick Stolee via GitGitGadget's message of "Tue, 28 Jun 2022 13:25:58 +0000")
"Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Derrick Stolee <derrickstolee@github.com>
>
> The previous change introduced the 'git rebase --update-refs' option
> which added 'update-ref <ref>' commands to the todo list of an
> interactive rebase.
>
> Teach Git to record the HEAD position when reaching these 'update-ref'
> commands. The ref/OID pair is stored in the
> $GIT_DIR/rebase-merge/update-refs file. A previous change parsed this
> file to avoid having other processes updating the refs in that file
> while the rebase is in progress.
>
> Not only do we update the file when the sequencer reaches these
> 'update-ref' commands, we then update the refs themselves at the end of
> the rebase sequence. If the rebase is aborted before this final step,
> then the refs are not updated.
So, in general, we would
* first scan the range of commits being rebased
* compute what should happen and write the "todo" thing
* write also "update-refs" to lick the branches to repel others
* execute the "todo" insns one by one, possibly giving control back
And this order is important---update-refs file is written fairly
early, and the branches potentially involved in the rebase are all
protected during the time-consuming (due to possibility of manual
conflict resolution) execution step.
Makes sense.
> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
> index 3cd20733bc8..63a69bc073e 100755
> --- a/t/t3404-rebase-interactive.sh
> +++ b/t/t3404-rebase-interactive.sh
> @@ -1813,6 +1813,29 @@ test_expect_success '--update-refs adds commands with --rebase-merges' '
> )
> '
>
> +compare_two_refs () {
> + git rev-parse $1 >expect &&
> + git rev-parse $2 >actual &&
> + test_cmp expect actual
> +}
> +
> +test_expect_success '--update-refs updates refs correctly' '
> + git checkout -B update-refs no-conflict-branch &&
> + git branch -f base HEAD~4 &&
> + git branch -f first HEAD~3 &&
> + git branch -f second HEAD~3 &&
> + git branch -f third HEAD~1 &&
> + test_commit extra2 fileX &&
> + git commit --amend --fixup=L &&
> +
> + git rebase -i --autosquash --update-refs primary &&
> +
> + compare_two_refs HEAD~3 refs/heads/first &&
> + compare_two_refs HEAD~3 refs/heads/second &&
> + compare_two_refs HEAD~1 refs/heads/third &&
> + compare_two_refs HEAD refs/heads/no-conflict-branch
> +'
> +
> # This must be the last test in this file
> test_expect_success '$EDITOR and friends are unchanged' '
> test_editor_unchanged
It would be nice to also have a test that makes sure that other
people will be prevented from checking out a branch whose tips may
be updated at the end.
Thanks.
next prev parent reply other threads:[~2022-06-28 21:15 UTC|newest]
Thread overview: 144+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-03 13:37 [PATCH 0/4] rebase: update branches in multi-part topic Derrick Stolee via GitGitGadget
2022-06-03 13:37 ` [PATCH 1/4] log-tree: create for_each_decoration() Derrick Stolee via GitGitGadget
2022-06-03 17:39 ` Junio C Hamano
2022-06-03 17:58 ` Derrick Stolee
2022-06-03 18:40 ` Junio C Hamano
2022-06-03 13:37 ` [PATCH 2/4] branch: add branch_checked_out() helper Derrick Stolee via GitGitGadget
2022-06-03 18:31 ` Junio C Hamano
2022-06-03 13:37 ` [PATCH 3/4] rebase: add --update-refs option Derrick Stolee via GitGitGadget
2022-06-07 10:25 ` Phillip Wood
2022-06-03 13:37 ` [PATCH 4/4] rebase: add rebase.updateRefs config option Derrick Stolee via GitGitGadget
2022-06-03 16:56 ` [PATCH 0/4] rebase: update branches in multi-part topic Junio C Hamano
2022-06-03 18:27 ` Taylor Blau
2022-06-03 18:52 ` Junio C Hamano
2022-06-03 19:59 ` Jeff Hostetler
2022-06-03 20:03 ` Taylor Blau
2022-06-03 21:23 ` Junio C Hamano
2022-06-04 15:28 ` Phillip Wood
2022-06-06 15:12 ` Derrick Stolee
2022-06-07 10:11 ` Phillip Wood
2022-06-07 19:39 ` Derrick Stolee
2022-06-08 16:03 ` Junio C Hamano
2022-06-06 16:36 ` Junio C Hamano
2022-06-07 6:25 ` Elijah Newren
2022-06-07 20:42 ` [PATCH v2 0/7] " Derrick Stolee via GitGitGadget
2022-06-07 20:42 ` [PATCH v2 1/7] log-tree: create for_each_decoration() Derrick Stolee via GitGitGadget
2022-06-07 20:42 ` [PATCH v2 2/7] branch: add branch_checked_out() helper Derrick Stolee via GitGitGadget
2022-06-07 22:09 ` Junio C Hamano
2022-06-08 2:14 ` Derrick Stolee
2022-06-08 2:43 ` Derrick Stolee
2022-06-08 4:52 ` Junio C Hamano
2022-06-07 20:42 ` [PATCH v2 3/7] sequencer: define array with enum values Derrick Stolee via GitGitGadget
2022-06-07 22:11 ` Junio C Hamano
2022-06-07 20:42 ` [PATCH v2 4/7] sequencer: add update-refs command Derrick Stolee via GitGitGadget
2022-06-07 20:42 ` [PATCH v2 5/7] rebase: add --update-refs option Derrick Stolee via GitGitGadget
2022-06-07 20:42 ` [PATCH v2 6/7] sequencer: implement 'update-refs' command Derrick Stolee via GitGitGadget
2022-06-07 22:23 ` Junio C Hamano
2022-06-07 20:42 ` [PATCH v2 7/7] rebase: add rebase.updateRefs config option Derrick Stolee via GitGitGadget
2022-06-08 14:32 ` [PATCH v2 0/7] rebase: update branches in multi-part topic Phillip Wood
2022-06-08 18:09 ` Derrick Stolee
2022-06-09 10:04 ` Phillip Wood
2022-06-28 13:25 ` [PATCH v3 0/8] " Derrick Stolee via GitGitGadget
2022-06-28 13:25 ` [PATCH v3 1/8] t2407: test branches currently using apply backend Derrick Stolee via GitGitGadget
2022-06-28 20:44 ` Junio C Hamano
2022-06-29 12:54 ` Derrick Stolee
2022-06-30 16:44 ` Junio C Hamano
2022-06-30 17:35 ` Derrick Stolee
2022-06-28 13:25 ` [PATCH v3 2/8] branch: consider refs under 'update-refs' Derrick Stolee via GitGitGadget
2022-06-28 20:48 ` Junio C Hamano
2022-06-29 12:58 ` Derrick Stolee
2022-06-30 9:47 ` Phillip Wood
2022-06-30 16:50 ` Junio C Hamano
2022-06-30 16:49 ` Junio C Hamano
2022-06-30 9:32 ` Phillip Wood
2022-06-30 13:35 ` Derrick Stolee
2022-07-01 13:40 ` Phillip Wood
2022-06-28 13:25 ` [PATCH v3 3/8] rebase-interactive: update 'merge' description Derrick Stolee via GitGitGadget
2022-06-28 21:00 ` Junio C Hamano
2022-06-29 13:02 ` Derrick Stolee
2022-06-30 17:05 ` Junio C Hamano
2022-06-30 9:34 ` Phillip Wood
2022-06-28 13:25 ` [PATCH v3 4/8] sequencer: define array with enum values Derrick Stolee via GitGitGadget
2022-06-28 21:02 ` Junio C Hamano
2022-06-28 13:25 ` [PATCH v3 5/8] sequencer: add update-ref command Derrick Stolee via GitGitGadget
2022-06-30 9:39 ` Phillip Wood
2022-06-28 13:25 ` [PATCH v3 6/8] rebase: add --update-refs option Derrick Stolee via GitGitGadget
2022-06-28 21:09 ` Junio C Hamano
2022-06-29 13:03 ` Derrick Stolee
2022-07-01 9:20 ` Phillip Wood
2022-07-01 21:20 ` Elijah Newren
2022-07-04 12:56 ` Derrick Stolee
2022-07-04 17:57 ` Elijah Newren
2022-07-05 22:22 ` Derrick Stolee
2022-07-08 2:27 ` Elijah Newren
2022-06-28 13:25 ` [PATCH v3 7/8] rebase: update refs from 'update-ref' commands Derrick Stolee via GitGitGadget
2022-06-28 21:15 ` Junio C Hamano [this message]
2022-06-29 13:05 ` Derrick Stolee
2022-06-30 17:09 ` Junio C Hamano
2022-06-29 13:06 ` Derrick Stolee
2022-07-01 9:31 ` Phillip Wood
2022-07-01 18:35 ` Junio C Hamano
2022-07-01 23:18 ` Elijah Newren
2022-07-04 13:05 ` Derrick Stolee
2022-06-28 13:25 ` [PATCH v3 8/8] rebase: add rebase.updateRefs config option Derrick Stolee via GitGitGadget
2022-06-28 21:19 ` [PATCH v3 0/8] rebase: update branches in multi-part topic Junio C Hamano
2022-07-01 13:43 ` Phillip Wood
2022-07-12 13:06 ` [PATCH v4 00/12] " Derrick Stolee via GitGitGadget
2022-07-12 13:06 ` [PATCH v4 01/12] t2407: test bisect and rebase as black-boxes Derrick Stolee via GitGitGadget
2022-07-12 13:06 ` [PATCH v4 02/12] t2407: test branches currently using apply backend Derrick Stolee via GitGitGadget
2022-07-12 13:06 ` [PATCH v4 03/12] branch: consider refs under 'update-refs' Derrick Stolee via GitGitGadget
2022-07-15 15:37 ` Phillip Wood
2022-07-12 13:06 ` [PATCH v4 04/12] rebase-interactive: update 'merge' description Derrick Stolee via GitGitGadget
2022-07-12 13:06 ` [PATCH v4 05/12] sequencer: define array with enum values Derrick Stolee via GitGitGadget
2022-07-12 13:06 ` [PATCH v4 06/12] sequencer: add update-ref command Derrick Stolee via GitGitGadget
2022-07-12 13:07 ` [PATCH v4 07/12] rebase: add --update-refs option Derrick Stolee via GitGitGadget
2022-07-16 19:30 ` Elijah Newren
2022-07-19 15:50 ` Derrick Stolee
2022-07-18 9:05 ` SZEDER Gábor
2022-07-18 16:55 ` Derrick Stolee
2022-07-18 19:35 ` Junio C Hamano
2022-07-19 15:53 ` Derrick Stolee
2022-07-19 16:44 ` Junio C Hamano
2022-07-19 16:47 ` Derrick Stolee
2022-07-12 13:07 ` [PATCH v4 08/12] rebase: update refs from 'update-ref' commands Derrick Stolee via GitGitGadget
2022-07-15 13:25 ` Phillip Wood
2022-07-19 16:04 ` Derrick Stolee
2022-07-12 13:07 ` [PATCH v4 09/12] sequencer: rewrite update-refs as user edits todo list Derrick Stolee via GitGitGadget
2022-07-15 10:27 ` Phillip Wood
2022-07-15 13:13 ` Derrick Stolee
2022-07-18 13:09 ` Phillip Wood
2022-07-16 19:20 ` Elijah Newren
2022-07-12 13:07 ` [PATCH v4 10/12] rebase: add rebase.updateRefs config option Derrick Stolee via GitGitGadget
2022-07-12 13:07 ` [PATCH v4 11/12] sequencer: ignore HEAD ref under --update-refs Derrick Stolee via GitGitGadget
2022-07-12 13:07 ` [PATCH v4 12/12] sequencer: notify user of --update-refs activity Derrick Stolee via GitGitGadget
2022-07-15 10:12 ` Phillip Wood
2022-07-15 13:20 ` Derrick Stolee
2022-07-16 20:51 ` Elijah Newren
2022-07-16 22:09 ` Elijah Newren
2022-07-19 16:09 ` Derrick Stolee
2022-07-12 15:37 ` [PATCH v4 00/12] rebase: update branches in multi-part topic Junio C Hamano
2022-07-14 14:50 ` Derrick Stolee
2022-07-14 18:11 ` Junio C Hamano
2022-07-16 21:23 ` Elijah Newren
2022-07-16 20:56 ` Elijah Newren
2022-07-15 15:41 ` Phillip Wood
2022-07-19 18:33 ` [PATCH v5 " Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 01/12] t2407: test bisect and rebase as black-boxes Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 02/12] t2407: test branches currently using apply backend Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 03/12] branch: consider refs under 'update-refs' Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 04/12] rebase-interactive: update 'merge' description Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 05/12] sequencer: define array with enum values Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 06/12] sequencer: add update-ref command Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 07/12] rebase: add --update-refs option Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 08/12] rebase: update refs from 'update-ref' commands Derrick Stolee via GitGitGadget
2022-07-21 14:03 ` Phillip Wood
2022-07-19 18:33 ` [PATCH v5 09/12] sequencer: rewrite update-refs as user edits todo list Derrick Stolee via GitGitGadget
2022-07-21 14:04 ` Phillip Wood
2022-07-19 18:33 ` [PATCH v5 10/12] rebase: add rebase.updateRefs config option Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 11/12] sequencer: ignore HEAD ref under --update-refs Derrick Stolee via GitGitGadget
2022-07-19 18:33 ` [PATCH v5 12/12] sequencer: notify user of --update-refs activity Derrick Stolee via GitGitGadget
2022-07-21 4:35 ` [PATCH v5 00/12] rebase: update branches in multi-part topic Elijah Newren
2022-07-21 12:12 ` Derrick Stolee
2022-07-21 19:43 ` Elijah Newren
2022-07-21 20:05 ` Derrick Stolee
2022-07-21 14:04 ` Phillip Wood
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq7d50ij6f.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=derrickstolee@github.com \
--cc=git@jeffhostetler.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=johannes.schindelin@gmx.de \
--cc=me@ttaylorr.com \
--cc=newren@gmail.com \
--cc=phillip.wood123@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).