Re: [PATCH 0/2] submodules: Use relative paths to gitdir and work tree
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Feb 26, 2012, 17:38 UTC
- Message-ID
- <4F4A6DFA.5080709@kdbg.org>
- In-Reply-To
- <4F32F252.7050105@web.de>
Am 08.02.2012 23:08, schrieb Jens Lehmann:
Show 11 quoted lines
> 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