Code

Merge branch 'da/difftool-test'
[git.git] / git-submodule.sh
index c405caaa0ee6998c4bdd39f97c7d53edcdcbea48..efc86ad4e0b90edbbf5a927aa87e7ad4b1a1949e 100755 (executable)
@@ -132,30 +132,11 @@ module_clone()
        gitdir_base=
        name=$(module_name "$path" 2>/dev/null)
        test -n "$name" || name="$path"
-       base_path=$(dirname "$path")
+       base_name=$(dirname "$name")
 
        gitdir=$(git rev-parse --git-dir)
-       gitdir_base="$gitdir/modules/$base_path"
-       gitdir="$gitdir/modules/$path"
-
-       case $gitdir in
-       /*)
-               a="$(cd_to_toplevel && pwd)/"
-               b=$gitdir
-               while [ "$b" ] && [ "${a%%/*}" = "${b%%/*}" ]
-               do
-                       a=${a#*/} b=${b#*/};
-               done
-
-               rel="$a$name"
-               rel=`echo $rel | sed -e 's|[^/]*|..|g'`
-               rel_gitdir="$rel/$b"
-               ;;
-       *)
-               rel=`echo $name | sed -e 's|[^/]*|..|g'`
-               rel_gitdir="$rel/$gitdir"
-               ;;
-       esac
+       gitdir_base="$gitdir/modules/$base_name"
+       gitdir="$gitdir/modules/$name"
 
        if test -d "$gitdir"
        then
@@ -168,10 +149,11 @@ module_clone()
                die "$(eval_gettext "Clone of '\$url' into submodule path '\$path' failed")"
        fi
 
-       echo "gitdir: $rel_gitdir" >"$path/.git"
-
        a=$(cd "$gitdir" && pwd)/
        b=$(cd "$path" && pwd)/
+       # normalize Windows-style absolute paths to POSIX-style absolute paths
+       case $a in [a-zA-Z]:/*) a=/${a%%:*}${a#*:} ;; esac
+       case $b in [a-zA-Z]:/*) b=/${b%%:*}${b#*:} ;; esac
        # Remove all common leading directories after a sanity check
        if test "${a#$b}" != "$a" || test "${b#$a}" != "$b"; then
                die "$(eval_gettext "Gitdir '\$a' is part of the submodule path '\$b' or vice versa")"
@@ -185,6 +167,9 @@ module_clone()
        a=${a%/}
        b=${b%/}
 
+       rel=$(echo $b | sed -e 's|[^/]*|..|g')
+       echo "gitdir: $rel/$a" >"$path/.git"
+
        rel=$(echo $a | sed -e 's|[^/]*|..|g')
        (clear_local_git_env; cd "$path" && GIT_WORK_TREE=. git config core.worktree "$rel/$b")
 }