git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Derrick Stolee <stolee@gmail.com>
Cc: "Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
	"Christian Couder" <christian.couder@gmail.com>,
	git@vger.kernel.org, "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 09:14:03 -0700	[thread overview]
Message-ID: <xmqqlfymwqic.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <2329a4c7-bfb9-10ce-9d1c-8c754d6dee05@gmail.com> (Derrick Stolee's message of "Thu, 30 May 2019 16:54:47 -0400")

Derrick Stolee <stolee@gmail.com> writes:

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

The bit is not an attribute of a repository instance, and I agree it
is an ugly hack to take advantage of an unrelated fact that a repo
is getting passed throughout the codechain.  It is better than
nothing if we stop there and will not do anything more to the topic,
but in the longer term, it is not that better than a global, I am
afraid.  We may not be doing the save-flip-and-restore-the-bit dance
on the global anymore, but instead would be doing the same for the
field in the repository object, no?

In any case, thanks for taking a look at the topic; what it wants to
achieve is worthwhile, but its execution does look like it needs
quite a lot more polishing, which is helped by review comments like
these.



  parent reply	other threads:[~2019-05-31 16:14 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
2019-05-31 16:14         ` Junio C Hamano [this message]
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=xmqqlfymwqic.fsf@gitster-ct.c.googlers.com \
    --to=gitster@pobox.com \
    --cc=Ben.Peart@microsoft.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=chriscool@tuxfamily.org \
    --cc=christian.couder@gmail.com \
    --cc=dev+git@drbeat.li \
    --cc=e@80x24.org \
    --cc=git@vger.kernel.org \
    --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).