From: Eric Cousineau <eacousineau@gmail.com>
To: Jens Lehmann <Jens.Lehmann@web.de>
Cc: Phil Hord <phil.hord@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Heiko Voigt <hvoigt@hvoigt.net>,
"git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: [PATCH/RFC] Changing submodule foreach --recursive to be depth-first, --parent option to execute command in supermodule as well
Date: Mon, 25 Mar 2013 23:03:16 -0500 [thread overview]
Message-ID: <51511E04.6070504@gmail.com> (raw)
In-Reply-To: <5147863B.8010104@web.de>
From 2c2923ada809d671828aa58dcda05a1b71222b70 Mon Sep 17 00:00:00 2001
From: Eric Cousineau <eacousineau@gmail.com>
Date: Mon, 25 Mar 2013 22:27:06 -0500
Subject: [PATCH] submodule-foreach: Added in --post-order=<command> and
adjusted code per Jens Lehmann's suggestion
Signed-off-by: Eric Cousineau <eacousineau@gmail.com>
---
Updated the usage line.
I had put the locals in there before because I think I was having
trouble with resolving some
of the variables in nested submodules, but now that I've taken them out
they seem to work fine.
I also changed the message for the post-order to say "Exiting".
I did not have a chance to look into why I couldn't group the
--post-order stuff into a string
when passing it on to submodule. I can look at it later on though.
Now the output is as follows:
$ git submodule foreach --recursive --post-order 'echo Post $name' 'echo
Pre $path'
Entering 'b'
Pre b
Entering 'b/d'
Pre d
Exiting 'b/d'
Post d
Exiting 'b'
Post b
Entering 'c'
Pre c
Exiting 'c'
Post c
git-submodule.sh | 35 ++++++++++++++++++++++++++++++-----
1 file changed, 30 insertions(+), 5 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 004c034..4c9923a 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -10,7 +10,7 @@ USAGE="[--quiet] add [-b <branch>] [-f|--force]
[--name <name>] [--reference <re
or: $dashless [--quiet] init [--] [<path>...]
or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch]
[-f|--force] [--rebase] [--reference <repository>] [--merge]
[--recursive] [--] [<path>...]
or: $dashless [--quiet] summary [--cached|--files] [--summary-limit
<n>] [commit] [--] [<path>...]
- or: $dashless [--quiet] foreach [--recursive] <command>
+ or: $dashless [--quiet] foreach [--recursive] [--post-order
<command>] <command>
or: $dashless [--quiet] sync [--recursive] [--] [<path>...]"
OPTIONS_SPEC=
. git-sh-setup
@@ -434,6 +434,8 @@ Use -f if you really want to add it." >&2
cmd_foreach()
{
# parse $args after "submodule ... foreach".
+ recursive=
+ post_order=
while test $# -ne 0
do
case "$1" in
@@ -443,6 +445,15 @@ cmd_foreach()
--recursive)
recursive=1
;;
+ --post-order)
+ test "$#" = "1" && usage
+ post_order="$2"
+ shift
+ ;;
+ --post-order=*)
+ # Will skip empty commands
+ post_order=${1#*=}
+ ;;
-*)
usage
;;
@@ -465,7 +476,9 @@ cmd_foreach()
die_if_unmatched "$mode"
if test -e "$sm_path"/.git
then
- say "$(eval_gettext "Entering '\$prefix\$sm_path'")"
+ enter_msg="$(eval_gettext "Entering '\$prefix\$sm_path'")"
+ exit_msg="$(eval_gettext "Exiting '\$prefix\$sm_path'")"
+ die_msg="$(eval_gettext "Stopping at '\$sm_path'; script returned
non-zero status.")"
name=$(module_name "$sm_path")
(
prefix="$prefix$sm_path/"
@@ -473,13 +486,25 @@ cmd_foreach()
# we make $path available to scripts ...
path=$sm_path
cd "$sm_path" &&
- eval "$@" &&
+ say "$enter_msg" &&
+ eval "$@" || die "$die_msg" &&
if test -n "$recursive"
then
- cmd_foreach "--recursive" "$@"
+ if test -n "$post_order"
+ then
+ # tried keeping flags as a variable, but was having difficulty
+ cmd_foreach --recursive --post-order "$post_order" "$@"
+ else
+ cmd_foreach --recursive "$@"
+ fi
+ fi &&
+ if test -n "$post_order"
+ then
+ say "$exit_msg" &&
+ eval "$post_order" || die "$die_msg"
fi
) <&3 3<&- ||
- die "$(eval_gettext "Stopping at '\$sm_path'; script returned
non-zero status.")"
+ die "$die_msg"
fi
done
}
--
1.7.9.5
next prev parent reply other threads:[~2013-03-26 4:03 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-04 8:41 [PATCH/RFC] Changing submodule foreach --recursive to be depth-first, --parent option to execute command in supermodule as well Eric Cousineau
2013-03-04 22:15 ` Jens Lehmann
2013-03-04 23:00 ` Junio C Hamano
2013-03-05 5:37 ` Eric Cousineau
2013-03-05 7:59 ` Heiko Voigt
2013-03-05 16:09 ` Junio C Hamano
2013-03-05 16:42 ` Eric Cousineau
2013-03-05 18:34 ` Junio C Hamano
2013-03-05 20:51 ` Jens Lehmann
2013-03-05 21:17 ` Phil Hord
2013-03-09 18:18 ` Jens Lehmann
2013-03-11 16:46 ` Heiko Voigt
2013-03-12 16:01 ` Phil Hord
2013-03-14 6:30 ` Eric Cousineau
2013-03-18 21:25 ` Jens Lehmann
2013-03-26 4:03 ` Eric Cousineau [this message]
2013-04-02 20:14 ` Jens Lehmann
2013-04-13 4:04 ` [PATCH] submodule foreach: Added in --post-order=<command> and adjusted code per Jens Lehmann's suggestions eacousineau
[not found] ` <CA+aSAWuK9Yhvx-vO1fUteq-K=xOPgxkyeWeHG3UwZuDHsxLzAw@mail.gmail.com>
2013-04-13 4:11 ` Eric Cousineau
2013-04-14 18:52 ` Jens Lehmann
2013-03-18 21:10 ` [PATCH/RFC] Changing submodule foreach --recursive to be depth-first, --parent option to execute command in supermodule as well Jens Lehmann
2013-03-26 3:56 ` Eric Cousineau
2013-03-26 4:36 ` Eric Cousineau
2013-03-26 5:23 ` Junio C Hamano
2013-03-26 5:25 ` 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=51511E04.6070504@gmail.com \
--to=eacousineau@gmail.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hvoigt@hvoigt.net \
--cc=phil.hord@gmail.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.