Thread (1 message) 1 message, 1 author, 2016-06-15

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

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:56:31

Jens Lehmann [off-list ref] writes:
Am 12.03.2013 17:01, schrieb Phil Hord:
quoted
On Sat, Mar 9, 2013 at 1:18 PM, Jens Lehmann [off-list ref] wrote:
quoted
Am 05.03.2013 22:17, schrieb Phil Hord:
quoted
On Tue, Mar 5, 2013 at 3:51 PM, Jens Lehmann [off-list ref] wrote:
quoted
Am 05.03.2013 19:34, schrieb Junio C Hamano:
quoted
Eric Cousineau [off-list ref] writes:
quoted
...
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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help