rebase --abort/--quit: cleanup refs/rewritten
commitd559f502c59658ea1f360fd28d8909894e40a4fe
authorPhillip Wood <phillip.wood@dunelm.org.uk>
Tue, 14 May 2019 18:03:49 +0000 (14 19:03 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 15 May 2019 01:59:33 +0000 (15 10:59 +0900)
treea365c5be503a8e373fc34dd8459397a6fbbe56f1
parent37e9ee5cb90db0831d5d58bed82149ba67917d73
rebase --abort/--quit: cleanup refs/rewritten

When `rebase -r` finishes it removes any refs under refs/rewritten that
it has created. However if the user aborts or quits the rebase refs are
not removed. This can cause problems for future rebases. For example I
recently wanted to merge a updated version of a topic branch into an
integration branch so ran `rebase -ir` and removed the picks and label
for the topic branch from the todo list so that

    merge -C <old-merge> topic

would pick up the new version of topic. Unfortunately
refs/rewritten/topic already existed from a previous rebase that had
been aborted so the rebase just used the old topic, not the new one.

The logic for the non-interactive quit case is changed to ensure
`buf` is always freed.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/rebase.c
t/t3430-rebase-merges.sh