Jeff King <p...@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
> 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
>> 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
> The second case takes 30-40 seconds longer. This is a full push of
> history, so it's an extreme case, 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.
>  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.
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html