git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCHv2] push: change submodule default to check

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 24, 2016, 19:37 UTC
Message-ID
<xmqqh9aaot49.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20160824183112.ceekegpzavnbybxp@sigill.intra.peff.net>
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.

Show 48 quoted lines
> 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.

Show 11 quoted lines
>     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.
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 25 in “[PATCHv2] push: change submodule default to check”
  1. Stefan BellerAug 24, 2016
  2. Junio C HamanoAug 24, 2016
  3. Junio C HamanoAug 24, 2016
  4. Junio C HamanoAug 24, 2016
  5. Stefan BellerAug 24, 2016
  6. Jeff KingAug 24, 2016
  7. 1/2 serialize collection of changed submodulesHeiko Voigt, Sep 14, 2016
  8. Junio C HamanoSep 14, 2016
  9. 3/2 batch check whether submodule needs pushing into one callHeiko Voigt, Sep 15, 2016
  10. Junio C HamanoSep 15, 2016
  11. Heiko VoigtSep 16, 2016
  12. Heiko VoigtSep 16, 2016
  13. Junio C HamanoSep 16, 2016
  14. Heiko VoigtSep 19, 2016
  15. Junio C HamanoSep 16, 2016
  16. Heiko VoigtSep 19, 2016
  17. 4/2 use actual start hashes for submodule push check instead of local refsHeiko Voigt, Sep 15, 2016
  18. Junio C HamanoSep 16, 2016
  19. Heiko VoigtSep 19, 2016
  20. 2/2 serialize collection of refs that contain submodule changesHeiko Voigt, Sep 14, 2016
  21. Heiko VoigtSep 14, 2016
  22. Stefan BellerSep 14, 2016
  23. Junio C HamanoSep 16, 2016
  24. Heiko VoigtSep 19, 2016
  25. Junio C HamanoSep 19, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.