diff options
author | Michael J Gruber <git@drmicha.warpmail.net> | 2009-03-03 16:08:21 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-03-03 21:46:09 -0800 |
commit | db75ada559dd4de99fedd1fc4f62a9273f032dd3 (patch) | |
tree | 4761f0ffa459a46195a6eeac39a4ed35334c3fa6 /git-submodule.sh | |
parent | ac8463d2b4c0e88011c40985bc519c0e2e2f2278 (diff) | |
download | git-db75ada559dd4de99fedd1fc4f62a9273f032dd3.tar.gz |
git submodule: Fix adding of submodules at paths with ./, .. and //
Make 'git submodule add' normalize the submodule path in the
same way as 'git ls-files' does, so that 'git submodule init' looks up
the information in .gitmodules with the same key under which 'git
submodule add' stores it.
This fixes 4 known breakages.
Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-submodule.sh')
-rwxr-xr-x | git-submodule.sh | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/git-submodule.sh b/git-submodule.sh index 2f47e065fe..68d6afd15c 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -166,9 +166,18 @@ cmd_add() ;; esac - # strip trailing slashes from path - path=$(echo "$path" | sed -e 's|/*$||') - + # normalize path: + # multiple //; leading ./; /./; /../; trailing / + path=$(printf '%s/\n' "$path" | + sed -e ' + s|//*|/|g + s|^\(\./\)*|| + s|/\./|/|g + :start + s|\([^/]*\)/\.\./|| + tstart + s|/*$|| + ') git ls-files --error-unmatch "$path" > /dev/null 2>&1 && die "'$path' already exists in the index" |