From a0bea0978fe80a64e7ccc27d9cafc1725a61e6dc Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Wed, 22 Jan 2025 10:48:06 +0100 Subject: refs: fix migration of reflogs respecting "core.logAllRefUpdates" In 246cebe320 (refs: add support for migrating reflogs, 2024-12-16) we have added support to git-refs(1) to migrate reflogs between reference backends. It was reported [1] though that not we don't migrate reflogs for a subset of references, most importantly "refs/stash". This issue is caused by us still honoring "core.logAllRefUpdates" when trying to migrate reflogs: we do queue the updates, but depending on the value of that config we may decide to just skip writing the reflog entry altogether. And given that: - The default for "core.logAllRefUpdates" is to only create reflogs for branches, remotes, note refs and "HEAD" - "refs/stash" is neither of these ref types. We end up skipping the reflog creation for that particular reference. Fix the bug by setting `REF_FORCE_CREATE_REFLOG`, which instructs the ref backends to create the reflog entry regardless of the config or any preexisting state. [1]: Reported-by: brian m. carlson Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- refs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'refs.c') diff --git a/refs.c b/refs.c index c555839869..c36bc57a6c 100644 --- a/refs.c +++ b/refs.c @@ -1282,7 +1282,7 @@ int ref_transaction_update_reflog(struct ref_transaction *transaction, assert(err); - flags |= REF_LOG_ONLY | REF_NO_DEREF; + flags |= REF_LOG_ONLY | REF_FORCE_CREATE_REFLOG | REF_NO_DEREF; if (!transaction_refname_valid(refname, new_oid, flags, err)) return -1; -- cgit 1.2.3-korg