Am 08.02.2012 23:08, schrieb Jens Lehmann: > This patch series replaces all absolute paths pointing from submodule work > trees to its gitdir and back with relative paths as discussed in $gmane/187785. > > The motivation is to make superprojects movable again. They lost this ability > with the move of the git directory of submodules into the .git/modules directory > of the superproject. While fixing that a bug which would hit when moving the > submodule inside the superproject was also fixed. > > Jens Lehmann (2): > submodules: always use a relative path to gitdir > submodules: always use a relative path from gitdir to work tree This series, with the tip at e3307adaba in Junio's repo causes major headaches on Windows. First, a check for an absolute path must be extended to take Windows-style paths into account. Second, the a's and b's are filled with different forms of absolute paths (/c/there vs. c:/there), and as a consequence the subsequent loops do not find a suitable relative path. The below is a minimal hack that passes all t/*submod* tests, but it works only on Windows, where the pwd utility has an option -W that prints a Windows style absolute path. How would you have this solved? One option would be to introduce a function pwd() { builtin pwd -W "$@"; } in git-sh-setup conditionally on Windows (but that would affect other shell scripts, too). Any other ideas? diff --git a/git-submodule.sh b/git-submodule.sh index 3463d6d..f37745e 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -139,8 +139,8 @@ module_clone() gitdir="$gitdir/modules/$path" case $gitdir in - /*) - a="$(cd_to_toplevel && pwd)/" + /* | [a-z]:/*) + a="$(cd_to_toplevel && pwd -W)/" b=$gitdir while [ "$b" ] && [ "${a%%/*}" = "${b%%/*}" ] do @@ -170,8 +170,8 @@ module_clone() echo "gitdir: $rel_gitdir" >"$path/.git" - a=$(cd "$gitdir" && pwd) - b=$(cd "$path" && pwd) + a=$(cd "$gitdir" && pwd -W) + b=$(cd "$path" && pwd -W) while [ "$b" ] && [ "${a%%/*}" = "${b%%/*}" ] do a=${a#*/} b=${b#*/}; -- 1.7.8.216.g2e426 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html