Merge branch 'sb/submodule-add-force'
authorJunio C Hamano <gitster@pobox.com>
Thu, 2 Feb 2017 21:36:54 +0000 (13:36 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 2 Feb 2017 21:36:54 +0000 (13:36 -0800)
"git submodule add" used to be confused and refused to add a
locally created repository; users can now use "--force" option
to add them.

* sb/submodule-add-force:
submodule add: extend force flag to add existing repos

1  2 
git-submodule.sh
diff --combined git-submodule.sh
index 9788175979273f8748635e2f5078f3ca8d4b7500,3762616b5cf2cb0c5bc02abc30cc2ae83741770c..123ac104c6f312cc27f1ddf925c80b386bfd4f23
@@@ -12,8 -12,7 +12,8 @@@ USAGE="[--quiet] add [-b <branch>] [-f|
     or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--] [<path>...]
     or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
     or: $dashless [--quiet] foreach [--recursive] <command>
 -   or: $dashless [--quiet] sync [--recursive] [--] [<path>...]"
 +   or: $dashless [--quiet] sync [--recursive] [--] [<path>...]
 +   or: $dashless [--quiet] absorbgitdirs [--] [<path>...]"
  OPTIONS_SPEC=
  SUBDIRECTORY_OK=Yes
  . git-sh-setup
@@@ -22,10 -21,14 +22,10 @@@ require_work_tre
  wt_prefix=$(git rev-parse --show-prefix)
  cd_to_toplevel
  
 -# Restrict ourselves to a vanilla subset of protocols; the URLs
 -# we get are under control of a remote repository, and we do not
 -# want them kicking off arbitrary git-remote-* programs.
 -#
 -# If the user has already specified a set of allowed protocols,
 -# we assume they know what they're doing and use that instead.
 -: ${GIT_ALLOW_PROTOCOL=file:git:http:https:ssh}
 -export GIT_ALLOW_PROTOCOL
 +# Tell the rest of git that any URLs we get don't come
 +# directly from the user, so it can apply policy as appropriate.
 +GIT_PROTOCOL_FROM_USER=0
 +export GIT_PROTOCOL_FROM_USER
  
  command=
  branch=
@@@ -204,8 -207,14 +204,14 @@@ cmd_add(
                        tstart
                        s|/*$||
                ')
-       git ls-files --error-unmatch "$sm_path" > /dev/null 2>&1 &&
-       die "$(eval_gettext "'\$sm_path' already exists in the index")"
+       if test -z "$force"
+       then
+               git ls-files --error-unmatch "$sm_path" > /dev/null 2>&1 &&
+               die "$(eval_gettext "'\$sm_path' already exists in the index")"
+       else
+               git ls-files -s "$sm_path" | sane_grep -v "^160000" > /dev/null 2>&1 &&
+               die "$(eval_gettext "'\$sm_path' already exists in the index and is not a submodule")"
+       fi
  
        if test -z "$force" && ! git add --dry-run --ignore-missing "$sm_path" > /dev/null 2>&1
        then
@@@ -371,7 -380,7 +377,7 @@@ cmd_init(
                shift
        done
  
 -      git ${wt_prefix:+-C "$wt_prefix"} submodule--helper init ${GIT_QUIET:+--quiet} ${prefix:+--prefix "$prefix"} "$@"
 +      git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper init ${GIT_QUIET:+--quiet}  "$@"
  }
  
  #
@@@ -1128,11 -1137,6 +1134,11 @@@ cmd_sync(
        done
  }
  
 +cmd_absorbgitdirs()
 +{
 +      git submodule--helper absorb-git-dirs --prefix "$wt_prefix" "$@"
 +}
 +
  # This loop parses the command line arguments to find the
  # subcommand name to dispatch.  Parsing of the subcommand specific
  # options are primarily done by the subcommand implementations.
  while test $# != 0 && test -z "$command"
  do
        case "$1" in
 -      add | foreach | init | deinit | update | status | summary | sync)
 +      add | foreach | init | deinit | update | status | summary | sync | absorbgitdirs)
                command=$1
                ;;
        -q|--quiet)