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

Re: [PATCH/RFC] Changing submodule foreach --recursive to be depth-first, --parent option to execute command in supermodule as well

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 26, 2013, 05:23 UTC
Message-ID
<7vhajyviny.fsf@alter.siamese.dyndns.org>
In-Reply-To
<514782D3.5060200@web.de>
Jens Lehmann <Jens.Lehmann@web.de> writes:
Show 19 quoted lines
> Am 12.03.2013 17:01, schrieb Phil Hord:
>> On Sat, Mar 9, 2013 at 1:18 PM, Jens Lehmann <Jens.Lehmann@web.de> wrote:
>>> Am 05.03.2013 22:17, schrieb Phil Hord:
>>>> On Tue, Mar 5, 2013 at 3:51 PM, Jens Lehmann <Jens.Lehmann@web.de> wrote:
>>>>> Am 05.03.2013 19:34, schrieb Junio C Hamano:
>>>>>> Eric Cousineau <eacousineau@gmail.com> writes:
>>>>>>> ...
>>>>>> I am not entirely convinced we would want --include-super in the
>>>>>> first place, though.  It does not belong to "submodule foreach";
>>>>>> it is doing something _outside_ the submoudules.
>>>>>
>>>>> I totally agree with that. First, adding --include-super does not
>>>>> belong into the --post-order patch at all, as that is a different
>>>>> topic (even though it belongs to the same use case Eric has). Also
>>>>> the reason why we are thinking about adding the --post-order option
>>>>> IMO cuts the other way for --include-super: It is so easy to do
>>>>> that yourself I'm not convinced we should add an extra option to
>>>>> foreach for that, especially as it has nothing to do with submodules.
>>>>> So I think we should just drop --include-super.

FWIW, after thinking about it a bit more and especially after thinking about the nested submodule layout, I changed my mind.

The reasoning is very simple. In short, your "top-level" may be somebody else's submodule.

If you have a project A, that has a submodule B & C that in turn have submodules D, E & F, G, like this:

	        A
               / \
              B   C
             / \ / \
            D  E F  G

you may want your "submodule foreach [--post-order]" that is run at the top-level to visit B D E C F G (or D E B F G C). A is not a submodule, and it may be rational to do without --also-toplevel option from the point of view of yourself.

But if "submodule foreach [--post-order] B" run at the top-level visits B D E (or D E B), wouldn't it be more natural if you had a way to optionally make this

	cd B && submodule foreach [--post-order]

visit the same modules in the same way? The story is the same if your top-level project A is bound at a path in somebody else's project as a submodule. His "submodulle foreach" will visit your top-level A while visiting the hierarchy of your submodules (and other submodules he has as your siblings).

I do not know if foreach should visit your top-level by default; changing that may be too late and too disruptive. But I think an optional "I want this traversal to also visit the top" would not be so _wrong_ even at the conceptual level.

Of course, it may make the implementation simpler, too ;-) foreach could just scan the immediate submodules, chdir into each of them and then run the equivalent foreach with --also-toplevel option, with the same --post-order (or --pre-order) option.

Previous: Eric CousineauNext: Junio C Hamano
Message 23 of 25 in “Changing submodule foreach --recursive to be depth-first, --parent option to execute command in supermodule as well”
  1. Changing submodule foreach --recursive to be depth-first, --parent option to execute command in supermodule as wellEric Cousineau, Mar 4, 2013
  2. Jens LehmannMar 4, 2013
  3. Junio C HamanoMar 4, 2013
  4. Eric CousineauMar 5, 2013
  5. Heiko VoigtMar 5, 2013
  6. Junio C HamanoMar 5, 2013
  7. Eric CousineauMar 5, 2013
  8. Junio C HamanoMar 5, 2013
  9. Jens LehmannMar 5, 2013
  10. Phil HordMar 5, 2013
  11. Jens LehmannMar 9, 2013
  12. Heiko VoigtMar 11, 2013
  13. Phil HordMar 12, 2013
  14. Eric CousineauMar 14, 2013
  15. Jens LehmannMar 18, 2013
  16. Eric CousineauMar 26, 2013
  17. Jens LehmannApr 2, 2013
  18. submodule foreach: Added in --post-order=<command> and adjusted code per Jens Lehmann's suggestionseacousineau, Apr 13, 2013
  19. Jens LehmannApr 14, 2013
  20. Jens LehmannMar 18, 2013
  21. Eric CousineauMar 26, 2013
  22. Eric CousineauMar 26, 2013
  23. Junio C HamanoMar 26, 2013
  24. Junio C HamanoMar 26, 2013
  25. Eric CousineauApr 13, 2013

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.