rebase: update refs from 'update-ref' commands
commit89fc0b53fdb4ea2f9581ea728577f4d2a4947672
authorDerrick Stolee <derrickstolee@github.com>
Tue, 19 Jul 2022 18:33:40 +0000 (19 18:33 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 19 Jul 2022 19:49:04 +0000 (19 12:49 -0700)
treeb6d8559ef8a9ee3803e2a64af1ad2c412e90a551
parent900b50c242dfa6b47033cbb495d2fd9d06752ff1
rebase: update refs from 'update-ref' commands

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/before/after triple 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. The 'before' value is used to ensure that
we do not accidentally obliterate a ref that was updated concurrently
(say, by an older version of Git or a third-party tool).

Now that the 'git rebase --update-refs' command is implemented to write
to the update-refs file, we can remove the fake construction of the
update-refs file from a test in t2407-worktree-heads.sh.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
t/t2407-worktree-heads.sh
t/t3404-rebase-interactive.sh