git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Derrick Stolee <stolee@gmail.com>
Cc: "Christian Couder" <christian.couder@gmail.com>,
	git@vger.kernel.org, "Junio C Hamano" <gitster@pobox.com>,
	"Jeff King" <peff@peff.net>,
	"Ben Peart" <Ben.Peart@microsoft.com>,
	"Jonathan Tan" <jonathantanmy@google.com>,
	"Jonathan Nieder" <jrnieder@gmail.com>,
	"Nguyen Thai Ngoc Duy" <pclouds@gmail.com>,
	"Mike Hommey" <mh@glandium.org>,
	"Lars Schneider" <larsxschneider@gmail.com>,
	"Eric Wong" <e@80x24.org>,
	"Christian Couder" <chriscool@tuxfamily.org>,
	"Jeff Hostetler" <jeffhost@microsoft.com>,
	"Eric Sunshine" <sunshine@sunshineco.com>,
	"Beat Bolli" <dev+git@drbeat.li>,
	"SZEDER Gábor" <szeder.dev@gmail.com>,
	"Ramsay Jones" <ramsay@ramsayjones.plus.com>
Subject: Re: [PATCH v5 04/16] promisor-remote: implement promisor_remote_get_direct()
Date: Fri, 31 May 2019 13:35:13 +0200 (CEST)	[thread overview]
Message-ID: <nycvar.QRO.7.76.6.1905311332560.44@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <2329a4c7-bfb9-10ce-9d1c-8c754d6dee05@gmail.com>

Hi Stolee,

On Thu, 30 May 2019, Derrick Stolee wrote:

> On 5/30/2019 4:46 PM, Johannes Schindelin wrote:
> >
> > On Thu, 30 May 2019, Derrick Stolee wrote:
> >
> >> On 4/9/2019 12:11 PM, Christian Couder wrote:
> >>> From: Christian Couder <christian.couder@gmail.com>
> >>>
> >>> +{
> >>> +	int i, missing_nr = 0;
> >>> +	int *missing = xcalloc(oid_nr, sizeof(*missing));
> >>> +	struct object_id *old_oids = *oids;
> >>> +	struct object_id *new_oids;
> >>> +	int old_fetch_if_missing = fetch_if_missing;
> >>> +
> >>> +	fetch_if_missing = 0;
> >>
> >> This global 'fetch_if_missing' swap seems very fragile. I'm guessing you
> >> are using it to prevent a loop when calling oid_object_info_extended()
> >> below. Can you instead pass a flag to the method that disables the
> >> fetch_if_missing behavior?
> >
> > FWIW I mentioned the very same concern here:
> > https://public-inbox.org/git/nycvar.QRO.7.76.6.1903272300020.41@tvgsbejvaqbjf.bet/
> >
> > The situation is *pretty* bad by now. I see `fetch_if_missing` mentioned
> > 25 times in `master`, and all but one are in .c files or in cache.h.
> >
> > The flag is actually used only in `oid_object_info_extended()`, and that
> > function accepts an `unsigned flags`, so one might think that it could be
> > extended to accept also a `OBJECT_INFO_LOOKUP_FETCH_IF_MISSING`. But then,
> > there are many callers of that function, some of them also pretty low in
> > the food chain. For example, `oid_object_info()` (does not accept `flags`)
> > or `read_object()` (does not accept flags either).
> >
> > So it looks as if the idea to pass this flag down the call chain entailed
> > a pretty serious avalanche effect.
>
> It could be approached in small bits.
>
> First, add an OBJECT_INFO_NEVER_FETCH_IF_MISSING flag that overrides
> fetch_if_missing, and then use the flag in small places like this one.
> Then, build up to the other methods as appropriate.

That is a good idea. I fear that it will still take a Herculean effort to
get there, as some of the call paths strike me as rather deep...

> > An alternative that strikes me as inelegant, still, but nevertheless
> > better would be to move `fetch_if_missing` into `struct repository`.
>
> This is literally the _least_ we should do to reduce our dependence on
> globals. Maybe this happens first, then the flag idea could be done bits
> at a time.

Okay, then, I added https://github.com/gitgitgadget/git/issues/251 so we
won't forget.

BTW I am rather happy about the way the GitGitGadget issues turn out: I
added a couple of left-over bits, and could already close two tickets
after other developers pointed out that they had already been addressed,
something an unsuspecting GSoC student, for example, could not otherwise
have found out very easily (or for that matter, I myself...).

Ciao,
Dscho

  reply	other threads:[~2019-05-31 11:36 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-09 16:11 [PATCH v5 00/16] Many promisor remotes Christian Couder
2019-04-09 16:11 ` [PATCH v5 01/16] t0410: remove pipes after git commands Christian Couder
2019-04-09 16:11 ` [PATCH v5 02/16] fetch-object: make functions return an error code Christian Couder
2019-04-09 16:11 ` [PATCH v5 03/16] Add initial support for many promisor remotes Christian Couder
2019-04-09 16:11 ` [PATCH v5 04/16] promisor-remote: implement promisor_remote_get_direct() Christian Couder
2019-05-30 17:21   ` Derrick Stolee
2019-05-30 20:46     ` Johannes Schindelin
2019-05-30 20:54       ` Derrick Stolee
2019-05-31 11:35         ` Johannes Schindelin [this message]
2019-05-31 16:14         ` Junio C Hamano
2019-05-31  5:10     ` Christian Couder
2019-06-25 13:50       ` Christian Couder
2019-04-09 16:11 ` [PATCH v5 05/16] promisor-remote: add promisor_remote_reinit() Christian Couder
2019-04-09 16:11 ` [PATCH v5 06/16] promisor-remote: use repository_format_partial_clone Christian Couder
2019-04-09 16:11 ` [PATCH v5 07/16] Use promisor_remote_get_direct() and has_promisor_remote() Christian Couder
2019-04-09 16:11 ` [PATCH v5 08/16] diff: use promisor-remote.h instead of fetch-object.h Christian Couder
2019-04-09 16:11 ` [PATCH v5 09/16] promisor-remote: parse remote.*.partialclonefilter Christian Couder
2019-04-09 16:11 ` [PATCH v5 10/16] builtin/fetch: remove unique promisor remote limitation Christian Couder
2019-04-09 16:11 ` [PATCH v5 11/16] t0410: test fetching from many promisor remotes Christian Couder
2019-04-09 16:11 ` [PATCH v5 12/16] partial-clone: add multiple remotes in the doc Christian Couder
2019-04-09 16:11 ` [PATCH v5 13/16] remote: add promisor and partial clone config to " Christian Couder
2019-04-09 16:11 ` [PATCH v5 14/16] Remove fetch-object.{c,h} in favor of promisor-remote.{c,h} Christian Couder
2019-04-09 16:11 ` [PATCH v5 15/16] Move repository_format_partial_clone to promisor-remote.c Christian Couder
2019-04-09 16:11 ` [PATCH v5 16/16] Move core_partial_clone_filter_default " Christian Couder
2019-04-15  9:27 ` [PATCH v5 00/16] Many promisor remotes Junio C Hamano
2019-04-15 10:30   ` Junio C Hamano
2019-04-15 10:39     ` Christian Couder
2019-04-15 10:37   ` Christian Couder

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=nycvar.QRO.7.76.6.1905311332560.44@tvgsbejvaqbjf.bet \
    --to=johannes.schindelin@gmx.de \
    --cc=Ben.Peart@microsoft.com \
    --cc=chriscool@tuxfamily.org \
    --cc=christian.couder@gmail.com \
    --cc=dev+git@drbeat.li \
    --cc=e@80x24.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jeffhost@microsoft.com \
    --cc=jonathantanmy@google.com \
    --cc=jrnieder@gmail.com \
    --cc=larsxschneider@gmail.com \
    --cc=mh@glandium.org \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    --cc=ramsay@ramsayjones.plus.com \
    --cc=stolee@gmail.com \
    --cc=sunshine@sunshineco.com \
    --cc=szeder.dev@gmail.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).