From: Patrick Steinhardt <ps@pks.im>
To: Christian Couder <christian.couder@gmail.com>
Cc: git <git@vger.kernel.org>
Subject: Re: [PATCH 3/6] fetch: control lifecycle of FETCH_HEAD in a single place
Date: Thu, 17 Feb 2022 12:18:47 +0100 [thread overview]
Message-ID: <Yg4vF/ph9yQRTdMM@ncase> (raw)
In-Reply-To: <CAP8UFD32MQSVQ2uUhmO29jFz=LfqvN8U7e-a=sDgQAxUh+Gadw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2205 bytes --]
On Tue, Feb 15, 2022 at 08:32:56AM +0100, Christian Couder wrote:
> On Sat, Feb 12, 2022 at 5:49 PM Patrick Steinhardt <ps@pks.im> wrote:
> >
> > There are two different locations where we're appending to FETCH_HEAD:
> > first when storing updated references, and second when backfilling tags.
> > Both times we open the file, append to it and then commit it into place,
> > which is essentially duplicate work.
> >
> > Improve the lifecycle of updating FETCH_HEAD by opening and committing
> > it once in `do_fetch()`, where we pass the structure down to code which
>
> s/down to code/down to the code/
>
> > wants to append to it.
>
> > @@ -1601,6 +1596,10 @@ static int do_fetch(struct transport *transport,
> > if (!update_head_ok)
> > check_not_current_branch(ref_map, worktrees);
> >
> > + retcode = open_fetch_head(&fetch_head);
> > + if (retcode)
> > + goto cleanup;
> > +
> > if (tags == TAGS_DEFAULT && autotags)
> > transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
> > if (prune) {
> > @@ -1617,7 +1616,8 @@ static int do_fetch(struct transport *transport,
> > transport->url);
> > }
> > }
> > - if (fetch_and_consume_refs(transport, ref_map, worktrees)) {
> > +
> > + if (fetch_and_consume_refs(transport, ref_map, &fetch_head, worktrees)) {
> > retcode = 1;
> > goto cleanup;
> > }
>
> I think the following (if it works) would be more consistent with
> what's done for open_fetch_head() above:
>
> retcode = fetch_and_consume_refs(transport, ref_map, &fetch_head, worktrees)
> if (retcode)
> goto cleanup;
The code here is really quite fragile, and I'm not much of a fan how we
need to retain `retcode` across the calls. But we can't change it like
you propose because the preceding call to `prune_refs()` may have
already set `retcode = 1`, and we must not clobber that value in case
the fetch succeeds. The effect is thus that we have `retcode == 1` if
either `prune_refs()` or `fetch_and_consume_refs()` fails.
Patrick
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2022-02-17 11:18 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-11 7:46 [PATCH 0/6] fetch: improve atomicity of `--atomic` flag Patrick Steinhardt
2022-02-11 7:46 ` [PATCH 1/6] fetch: increase test coverage of fetches Patrick Steinhardt
2022-02-15 6:19 ` Christian Couder
2022-02-17 11:13 ` Patrick Steinhardt
2022-02-11 7:46 ` [PATCH 2/6] fetch: backfill tags before setting upstream Patrick Steinhardt
2022-02-15 6:43 ` Christian Couder
2022-02-11 7:46 ` [PATCH 3/6] fetch: control lifecycle of FETCH_HEAD in a single place Patrick Steinhardt
2022-02-15 7:32 ` Christian Couder
2022-02-17 11:18 ` Patrick Steinhardt [this message]
2022-02-11 7:46 ` [PATCH 4/6] fetch: report errors when backfilling tags fails Patrick Steinhardt
2022-02-15 7:52 ` Christian Couder
2022-02-17 11:27 ` Patrick Steinhardt
2022-02-17 12:47 ` Patrick Steinhardt
2022-02-16 23:35 ` Jonathan Tan
2022-02-17 1:31 ` Elijah Newren
2022-02-11 7:47 ` [PATCH 5/6] fetch: make `--atomic` flag cover backfilling of tags Patrick Steinhardt
2022-02-15 8:11 ` Christian Couder
2022-02-16 23:41 ` Jonathan Tan
2022-02-17 11:37 ` Patrick Steinhardt
2022-02-17 1:34 ` Elijah Newren
2022-02-17 11:58 ` Patrick Steinhardt
2022-02-11 7:47 ` [PATCH 6/6] fetch: make `--atomic` flag cover pruning of refs Patrick Steinhardt
2022-02-15 9:12 ` Christian Couder
2022-02-17 12:03 ` Patrick Steinhardt
2022-02-16 23:39 ` Jonathan Tan
2022-02-17 1:40 ` Elijah Newren
2022-02-17 12:06 ` Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Yg4vF/ph9yQRTdMM@ncase \
--to=ps@pks.im \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.