diff options
author | Patrick Steinhardt <ps@pks.im> | 2022-02-17 14:04:36 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-02-17 11:19:44 -0800 |
commit | b3a804663c4682f6df55dd6703f8f8af9a7c6ab5 (patch) | |
tree | f80dc75559e6db94ac157328c36f61fc8667c06e /sideband.c | |
parent | refs: add interface to iterate over queued transactional updates (diff) | |
download | tgif-b3a804663c4682f6df55dd6703f8f8af9a7c6ab5.tar.xz |
fetch: make `--atomic` flag cover backfilling of tags
When fetching references from a remote we by default also fetch all tags
which point into the history we have fetched. This is a separate step
performed after updating local references because it requires us to walk
over the history on the client-side to determine whether the remote has
announced any tags which point to one of the fetched commits.
This backfilling of tags isn't covered by the `--atomic` flag: right
now, it only applies to the step where we update our local references.
This is an oversight at the time the flag was introduced: its purpose is
to either update all references or none, but right now we happily update
local references even in the case where backfilling failed.
Fix this by pulling up creation of the reference transaction such that
we can pass the same transaction to both the code which updates local
references and to the code which backfills tags. This allows us to only
commit the transaction in case both actions succeed.
Note that we also have to start passing the transaction into
`find_non_local_tags()`: this function is responsible for finding all
tags which we need to backfill. Right now, it will happily return tags
which have already been updated with our local references. But when we
use a single transaction for both local references and backfilling then
it may happen that we try to queue the same reference update twice to
the transaction, which consequently triggers a bug. We thus have to skip
over any tags which have already been queued.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'sideband.c')
0 files changed, 0 insertions, 0 deletions