From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: Stefan Beller <sbeller@google.com>,
git@vger.kernel.org, hvoigt@hvoigt.net, Jens.Lehmann@web.de,
iveqy@iveqy.com, leandro.lucarella@sociomantic.com
Subject: Re: [PATCHv2] push: change submodule default to check
Date: Wed, 24 Aug 2016 12:37:58 -0700 [thread overview]
Message-ID: <xmqqh9aaot49.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20160824183112.ceekegpzavnbybxp@sigill.intra.peff.net> (Jeff King's message of "Wed, 24 Aug 2016 14:31:13 -0400")
Jeff King <peff@peff.net> writes:
This seems to be dropped from the list, probably due to no "To:"
header in the original, which led to "no", "To-header" "on" and
"input <" on YOUR recipient list, so I am quoting it in full without
trimming.
> On Wed, Aug 24, 2016 at 10:30:17AM -0700, Stefan Beller wrote:
>
>> When working with submodules, it is easy to forget to push the submodules.
>> The setting 'check', which checks if any existing submodule is present on
>> at least one remote of the submodule remotes, is designed to prevent this
>> mistake.
>>
>> Flipping the default to check for submodules is safer than the current
>> default of ignoring submodules while pushing.
>
> It is safer, and that's good. But it's also slower, because it requires
> an extra traversal of all of the pushed commits. And now people will
> have to pay the price even if they are not using submodules at all.
>
> For instance, try this from a checkout of linux.git:
>
> for i in no check; do
> rm -rf dst.git
> git init --bare dst.git
> echo "==> Pushing with submodules=$i"
> time git push --recurse-submodules=$i dst.git HEAD
> done
>
> The second case takes 30-40 seconds longer. This is a full push of
> history, so it's an extreme case[1], but it's still rather unfortunate.
>
> Can we tie this default to some sign that submodules are actually in
> use? I don't think the presence of .gitmodules is perfect (because you
> might be in a bare repo, for example, and have just fetched some other
> history you are relaying), but it may be a good compromise. I'm
> envisioning something like "--recurse-submodules=auto-check" which
> auto-detects common situations (e.g., presence of .gitmodules or
> .git/modules checkouts) and enables "check", and then setting the
> default to that in the long run.
>
> -Peff
>
> [1] Actually, there is another much worse case lurking there. Try:
>
> git push --recurse-submodules=check --mirror dst.git
>
> from the kernel. I didn't let it finish, but I'd estimate it would
> take on the order of 5 hours. The problem is that push feeds each
> updated ref tip to find_unpushed_submodules(), so we end up walking
> over the same history over and over.
>
> I think it should feed all of the "before" and "after" ref tips it
> proposes to update to a _single_ revision traversal.
That sounds massively ... broken. So before even thinking about
flipping it to default, this needs to be fixed first.
> I also notice that it uses "--remote=...", which is weird, because
> push knows exactly what it proposes to update, which may be ahead of
> where our refs/remotes/* cache is. Not to mention that we may be
> pushing to a remote for which we do not keep tracking refs at all!
>
> So I'd actually suspect that with your patch, a bare URL like:
>
> git push https://github.com/peff/linux.git
>
> would do the full 40-second walk, even if I was only pushing up one
> or two objects.
next prev parent reply other threads:[~2016-08-24 19:39 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-24 17:30 [PATCHv2] push: change submodule default to check Stefan Beller
2016-08-24 18:38 ` Junio C Hamano
[not found] ` <20160824183112.ceekegpzavnbybxp@sigill.intra.peff.net>
2016-08-24 19:37 ` Junio C Hamano [this message]
2016-08-24 21:26 ` Junio C Hamano
2016-08-24 22:37 ` Stefan Beller
2016-08-24 23:01 ` Jeff King
2016-09-14 17:31 ` [PATCH 1/2] serialize collection of changed submodules Heiko Voigt
2016-09-14 22:30 ` Junio C Hamano
2016-09-15 12:10 ` [PATCH 3/2] batch check whether submodule needs pushing into one call Heiko Voigt
2016-09-15 21:08 ` Junio C Hamano
2016-09-16 9:40 ` Heiko Voigt
2016-09-16 12:31 ` Heiko Voigt
2016-09-16 18:13 ` Junio C Hamano
2016-09-19 20:08 ` Heiko Voigt
2016-09-16 17:59 ` Junio C Hamano
2016-09-19 19:58 ` Heiko Voigt
2016-09-15 12:18 ` [PATCH 4/2] use actual start hashes for submodule push check instead of local refs Heiko Voigt
2016-09-16 17:27 ` [PATCH 1/2] serialize collection of changed submodules Junio C Hamano
2016-09-19 19:44 ` Heiko Voigt
2016-09-14 17:51 ` [PATCH 2/2] serialize collection of refs that contain submodule changes Heiko Voigt
2016-09-14 19:46 ` Heiko Voigt
2016-09-14 20:04 ` Stefan Beller
2016-09-16 17:47 ` Junio C Hamano
2016-09-19 19:51 ` Heiko Voigt
2016-09-19 20:09 ` Junio C Hamano
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=xmqqh9aaot49.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=hvoigt@hvoigt.net \
--cc=iveqy@iveqy.com \
--cc=leandro.lucarella@sociomantic.com \
--cc=peff@peff.net \
--cc=sbeller@google.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.
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.