mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
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]: <Z5BTQRlsOj1sygun@tapette.crustytoothpaste.net>
Reported-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
8ddcdc1bb3
commit
a0bea0978f
2
refs.c
2
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;
|
||||
|
||||
@@ -224,6 +224,23 @@ do
|
||||
test_commit --date "100003000 +0700" --no-tag -C repo second &&
|
||||
test_migration repo "$to_format"
|
||||
'
|
||||
|
||||
test_expect_success "$from_format -> $to_format: stash is retained" '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
git init --ref-format=$from_format repo &&
|
||||
(
|
||||
cd repo &&
|
||||
test_commit initial A &&
|
||||
echo foo >A &&
|
||||
git stash push &&
|
||||
echo bar >A &&
|
||||
git stash push &&
|
||||
git stash list >expect.reflog &&
|
||||
test_migration . "$to_format" &&
|
||||
git stash list >actual.reflog &&
|
||||
test_cmp expect.reflog actual.reflog
|
||||
)
|
||||
'
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
Reference in New Issue
Block a user