submodule deinit: require '--all' instead of '.' for all submodules
The discussion in [1] pointed out that '.' is a faulty suggestion as there is a corner case where it fails: > "submodule deinit ." may have "worked" in the sense that you would > have at least one path in your tree and avoided this "nothing > matches" most of the time. It would have still failed with the > exactly same error if run in an empty repository, i.e. > > $ E=/var/tmp/x/empty && rm -fr "$E" && mkdir -p "$E" && cd "$E" > $ git init > $ rungit v2.6.6 submodule deinit . > error: pathspec '.' did not match any file(s) known to git. > Did you forget to 'git add'? > $ >file && git add file > $ rungit v2.6.6 submodule deinit . > $ echo $? > 0 So instead of a pathspec add the '--all' option to deinit all submodules and add a test to check for the corner case of an empty repository. The code only needs to learn about the '--all' option and doesn't require further changes as `git submodule--helper list "$@"` will list all submodules when "$@" is empty. [1] http://news.gmane.org/gmane.comp.version-control.git/289535 Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Stefan Beller <sbeller@google.com> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
90f7b16b3a
commit
f6a5279977
@ -8,7 +8,7 @@ dashless=$(basename "$0" | sed -e 's/-/ /')
|
||||
USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
|
||||
or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...]
|
||||
or: $dashless [--quiet] init [--] [<path>...]
|
||||
or: $dashless [--quiet] deinit [-f|--force] [--] <path>...
|
||||
or: $dashless [--quiet] deinit [-f|--force] (--all| [--] <path>...)
|
||||
or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--reference <repository>] [--recursive] [--] [<path>...]
|
||||
or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
|
||||
or: $dashless [--quiet] foreach [--recursive] <command>
|
||||
@ -521,6 +521,7 @@ cmd_init()
|
||||
cmd_deinit()
|
||||
{
|
||||
# parse $args after "submodule ... deinit".
|
||||
deinit_all=
|
||||
while test $# -ne 0
|
||||
do
|
||||
case "$1" in
|
||||
@ -530,6 +531,9 @@ cmd_deinit()
|
||||
-q|--quiet)
|
||||
GIT_QUIET=1
|
||||
;;
|
||||
--all)
|
||||
deinit_all=t
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
@ -544,9 +548,14 @@ cmd_deinit()
|
||||
shift
|
||||
done
|
||||
|
||||
if test $# = 0
|
||||
if test -n "$deinit_all" && test "$#" -ne 0
|
||||
then
|
||||
die "$(eval_gettext "Use '.' if you really want to deinitialize all submodules")"
|
||||
echo >&2 "$(eval_gettext "pathspec and --all are incompatible")"
|
||||
usage
|
||||
fi
|
||||
if test $# = 0 && test -z "$deinit_all"
|
||||
then
|
||||
die "$(eval_gettext "Use '--all' if you really want to deinitialize all submodules")"
|
||||
fi
|
||||
|
||||
git submodule--helper list --prefix "$wt_prefix" "$@" |
|
||||
|
||||
Reference in New Issue
Block a user