submodule: port submodule subcommand 'foreach' from shell to C
This aims to make git-submodule foreach a builtin. 'foreach' is ported to the submodule--helper, and submodule--helper is called from git-submodule.sh. Helped-by: Brandon Williams <bmwill@google.com> Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Stefan Beller <sbeller@google.com> Signed-off-by: Prathamesh Chavan <pc44800@gmail.com> Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
b6f7ac8fd5
commit
fc1b9243cd
@ -323,44 +323,7 @@ cmd_foreach()
|
||||
shift
|
||||
done
|
||||
|
||||
toplevel=$(pwd)
|
||||
|
||||
# dup stdin so that it can be restored when running the external
|
||||
# command in the subshell (and a recursive call to this function)
|
||||
exec 3<&0
|
||||
|
||||
{
|
||||
git submodule--helper list --prefix "$wt_prefix" ||
|
||||
echo "#unmatched" $?
|
||||
} |
|
||||
while read -r mode sha1 stage sm_path
|
||||
do
|
||||
die_if_unmatched "$mode" "$sha1"
|
||||
if test -e "$sm_path"/.git
|
||||
then
|
||||
displaypath=$(git submodule--helper relative-path "$prefix$sm_path" "$wt_prefix")
|
||||
say "$(eval_gettext "Entering '\$displaypath'")"
|
||||
name=$(git submodule--helper name "$sm_path")
|
||||
(
|
||||
prefix="$prefix$sm_path/"
|
||||
sanitize_submodule_env
|
||||
cd "$sm_path" &&
|
||||
# we make $path available to scripts ...
|
||||
path=$sm_path &&
|
||||
if test $# -eq 1
|
||||
then
|
||||
eval "$1"
|
||||
else
|
||||
"$@"
|
||||
fi &&
|
||||
if test -n "$recursive"
|
||||
then
|
||||
cmd_foreach "--recursive" "$@"
|
||||
fi
|
||||
) <&3 3<&- ||
|
||||
die "$(eval_gettext "Stopping at '\$displaypath'; script returned non-zero status.")"
|
||||
fi
|
||||
done
|
||||
git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper foreach ${GIT_QUIET:+--quiet} ${recursive:+--recursive} "$@"
|
||||
}
|
||||
|
||||
#
|
||||
|
Reference in New Issue
Block a user