Subject: Re: [PATCH] refs: fix migration of reflogs respecting "core.logAllRefUpdates"

From: Junio C Hamano <[email-masked]>
Date: Wed, 22 Jan 2025 10:02:01 -0800

Patrick Steinhardt <[email-masked]> writes:

> 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.

Thanks for a clear problem analysis description.  The appraoch makes
perfect sense.

Will queue.

> +		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
>  
>
> ---
> base-commit: f93ff170b93a1782659637824b25923245ac9dd1
> change-id: 20250122-b4-pks-reflog-migration-fix-stash-d1fe7380f84a