Merge branch 'sz/maint-submodule-reference-arg'
authorJeff King <peff@peff.net>
Sun, 4 Nov 2012 13:00:16 +0000 (08:00 -0500)
committerJeff King <peff@peff.net>
Sun, 4 Nov 2012 13:00:16 +0000 (08:00 -0500)
* sz/maint-submodule-reference-arg:
submodule add: fix handling of --reference=<repo> option

1  2 
git-submodule.sh
diff --combined git-submodule.sh
index 9e1e1f44106ca659ee705b4f66dc5cd4997ec907,dcceb43d714ac0829883581de32973d3cb7ca717..3d1617fa9eb490463f9a4a4218082de168e1491a
@@@ -5,7 -5,7 +5,7 @@@
  # Copyright (c) 2007 Lars Hjemli
  
  dashless=$(basename "$0" | sed -e 's/-/ /')
 -USAGE="[--quiet] add [-b branch] [-f|--force] [--reference <repository>] [--] <repository> [<path>]
 +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] update [--init] [-N|--no-fetch] [-f|--force] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
@@@ -29,7 -29,6 +29,7 @@@ files
  nofetch=
  update=
  prefix=
 +custom_name=
  
  # The function takes at most 2 arguments. The first argument is the
  # URL that navigates to the submodule origin repo. When relative, this URL
@@@ -180,9 -179,8 +180,9 @@@ module_name(
  module_clone()
  {
        sm_path=$1
 -      url=$2
 -      reference="$3"
 +      name=$2
 +      url=$3
 +      reference="$4"
        quiet=
        if test -n "$GIT_QUIET"
        then
  
        gitdir=
        gitdir_base=
 -      name=$(module_name "$sm_path" 2>/dev/null)
 -      test -n "$name" || name="$sm_path"
        base_name=$(dirname "$name")
  
        gitdir=$(git rev-parse --git-dir)
@@@ -270,13 -270,7 +270,12 @@@ cmd_add(
                        ;;
                --reference=*)
                        reference="$1"
-                       shift
                        ;;
 +              --name)
 +                      case "$2" in '') usage ;; esac
 +                      custom_name=$2
 +                      shift
 +                      ;;
                --)
                        shift
                        break
@@@ -341,13 -335,6 +340,13 @@@ Use -f if you really want to add it." >
                exit 1
        fi
  
 +      if test -n "$custom_name"
 +      then
 +              sm_name="$custom_name"
 +      else
 +              sm_name="$sm_path"
 +      fi
 +
        # perhaps the path exists and is already a git repo, else clone it
        if test -e "$sm_path"
        then
                fi
  
        else
 -
 -              module_clone "$sm_path" "$realrepo" "$reference" || exit
 +              if test -d ".git/modules/$sm_name"
 +              then
 +                      if test -z "$force"
 +                      then
 +                              echo >&2 "$(eval_gettext "A git directory for '\$sm_name' is found locally with remote(s):")"
 +                              GIT_DIR=".git/modules/$sm_name" GIT_WORK_TREE=. git remote -v | grep '(fetch)' | sed -e s,^,"  ", -e s,' (fetch)',, >&2
 +                              echo >&2 "$(eval_gettext "If you want to reuse this local git directory instead of cloning again from")"
 +                              echo >&2 "  $realrepo"
 +                              echo >&2 "$(eval_gettext "use the '--force' option. If the local git directory is not the correct repo")"
 +                              die "$(eval_gettext "or you are unsure what this means choose another name with the '--name' option.")"
 +                      else
 +                              echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")"
 +                      fi
 +              fi
 +              module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" || exit
                (
                        clear_local_git_env
                        cd "$sm_path" &&
                        esac
                ) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
        fi
 -      git config submodule."$sm_path".url "$realrepo"
 +      git config submodule."$sm_name".url "$realrepo"
  
        git add $force "$sm_path" ||
        die "$(eval_gettext "Failed to add submodule '\$sm_path'")"
  
 -      git config -f .gitmodules submodule."$sm_path".path "$sm_path" &&
 -      git config -f .gitmodules submodule."$sm_path".url "$repo" &&
 +      git config -f .gitmodules submodule."$sm_name".path "$sm_path" &&
 +      git config -f .gitmodules submodule."$sm_name".url "$repo" &&
        git add --force .gitmodules ||
        die "$(eval_gettext "Failed to register submodule '\$sm_path'")"
  }
@@@ -619,7 -593,7 +618,7 @@@ Maybe you want to use 'update --init'?"
  
                if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git
                then
 -                      module_clone "$sm_path" "$url" "$reference"|| exit
 +                      module_clone "$sm_path" "$name" "$url" "$reference" || exit
                        cloned_modules="$cloned_modules;$name"
                        subsha1=
                else