Merge branch 'ml/submodule-foreach'
* ml/submodule-foreach: git-submodule - Add 'foreach' subcommand
This commit is contained in:
commit
5630feaf37
@ -14,6 +14,7 @@ SYNOPSIS
|
|||||||
'git submodule' [--quiet] init [--] [<path>...]
|
'git submodule' [--quiet] init [--] [<path>...]
|
||||||
'git submodule' [--quiet] update [--init] [--] [<path>...]
|
'git submodule' [--quiet] update [--init] [--] [<path>...]
|
||||||
'git submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]
|
'git submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]
|
||||||
|
'git submodule' [--quiet] foreach <command>
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
@ -123,6 +124,22 @@ summary::
|
|||||||
in the submodule between the given super project commit and the
|
in the submodule between the given super project commit and the
|
||||||
index or working tree (switched by --cached) are shown.
|
index or working tree (switched by --cached) are shown.
|
||||||
|
|
||||||
|
foreach::
|
||||||
|
Evaluates an arbitrary shell command in each checked out submodule.
|
||||||
|
The command has access to the variables $path and $sha1:
|
||||||
|
$path is the name of the submodule directory relative to the
|
||||||
|
superproject, and $sha1 is the commit as recorded in the superproject.
|
||||||
|
Any submodules defined in the superproject but not checked out are
|
||||||
|
ignored by this command. Unless given --quiet, foreach prints the name
|
||||||
|
of each submodule before evaluating the command.
|
||||||
|
A non-zero return from the command in any submodule causes
|
||||||
|
the processing to terminate. This can be overridden by adding '|| :'
|
||||||
|
to the end of the command.
|
||||||
|
+
|
||||||
|
As an example, "git submodule foreach 'echo $path `git rev-parse HEAD`' will
|
||||||
|
show the path and currently checked out commit for each submodule.
|
||||||
|
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
-q::
|
-q::
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
USAGE="[--quiet] [--cached] \
|
USAGE="[--quiet] [--cached] \
|
||||||
[add <repo> [-b branch] <path>]|[status|init|update [-i|--init]|summary [-n|--summary-limit <n>] [<commit>]] \
|
[add <repo> [-b branch] <path>]|[status|init|update [-i|--init]|summary [-n|--summary-limit <n>] [<commit>]] \
|
||||||
[--] [<path>...]"
|
[--] [<path>...]|[foreach <command>]"
|
||||||
OPTIONS_SPEC=
|
OPTIONS_SPEC=
|
||||||
. git-sh-setup
|
. git-sh-setup
|
||||||
require_work_tree
|
require_work_tree
|
||||||
@ -198,6 +198,26 @@ cmd_add()
|
|||||||
die "Failed to register submodule '$path'"
|
die "Failed to register submodule '$path'"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Execute an arbitrary command sequence in each checked out
|
||||||
|
# submodule
|
||||||
|
#
|
||||||
|
# $@ = command to execute
|
||||||
|
#
|
||||||
|
cmd_foreach()
|
||||||
|
{
|
||||||
|
git ls-files --stage | grep '^160000 ' |
|
||||||
|
while read mode sha1 stage path
|
||||||
|
do
|
||||||
|
if test -e "$path"/.git
|
||||||
|
then
|
||||||
|
say "Entering '$path'"
|
||||||
|
(cd "$path" && eval "$@") ||
|
||||||
|
die "Stopping at '$path'; script returned non-zero status."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Register submodules in .git/config
|
# Register submodules in .git/config
|
||||||
#
|
#
|
||||||
@ -583,7 +603,7 @@ cmd_status()
|
|||||||
while test $# != 0 && test -z "$command"
|
while test $# != 0 && test -z "$command"
|
||||||
do
|
do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
add | init | update | status | summary)
|
add | foreach | init | update | status | summary)
|
||||||
command=$1
|
command=$1
|
||||||
;;
|
;;
|
||||||
-q|--quiet)
|
-q|--quiet)
|
||||||
|
Loading…
Reference in New Issue
Block a user