[PATCH] submodule foreach: Added in --post-order=<command> and adjusted code per Jens Lehmann's suggestions
- From
- eacousineau <eacousineau@gmail.com>
- Date
- Apr 13, 2013, 04:04 UTC
- Message-ID
- <1365825865-12858-1-git-send-email-eacousineau@gmail.com>
- In-Reply-To
- <515B3C0E.9000802@web.de>
Signed-off-by: eacousineau <eacousineau@gmail.com> --- I see what you meant by the extra variables, so I've fixed that so the original flags aren't needed with recursion. Also updated it to not print the entering command if there is only a post-order command.
Examples:
$ git submodule foreach --recursive --post-order 'echo Goodbye' "echo \"'ello\"" Entering 'b' 'ello Entering 'b/d' 'ello Leaving 'b/d' Goodbye Leaving 'b' Goodbye Entering 'c' 'ello Leaving 'c' Goodbye
$ git submodule foreach --recursive --post-order : Leaving 'b/d' Leaving 'b' Leaving 'c'
git-submodule.sh | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh index 79bfaac..e08a724 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -11,7 +11,7 @@ USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <re or: $dashless [--quiet] deinit [-f|--force] [--] <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 @@ -449,6 +449,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 ;; @@ -471,7 +480,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'")" + leave_msg="$(eval_gettext "Leaving '\$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/" @@ -479,13 +490,23 @@ cmd_foreach() # we make $path available to scripts ... path=$sm_path cd "$sm_path" && - eval "$@" && + if test $# -gt 0 -o -z "$post_order" + then + say "$enter_msg" && + eval "$@" || die "$die_msg" + fi && if test -n "$recursive" then - cmd_foreach "--recursive" "$@" + # subshell will use parent-scoped values + cmd_foreach "$@" + fi && + if test -n "$post_order" + then + say "$leave_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.8.2.1.390.gd4ee029