summaryrefslogtreecommitdiff
path: root/git-submodule.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-03-11 20:50:29 (GMT)
committerJunio C Hamano <gitster@pobox.com>2009-03-11 20:50:29 (GMT)
commit500ff119682eaa6d5047b40e54688219a57716ca (patch)
treea911f4f85436ea1fd5c8b3f4d5b7b70154156f91 /git-submodule.sh
parentaec813062b340e6bb181470cf57cc4b4406e1bb8 (diff)
parentdb75ada559dd4de99fedd1fc4f62a9273f032dd3 (diff)
downloadgit-500ff119682eaa6d5047b40e54688219a57716ca.zip
git-500ff119682eaa6d5047b40e54688219a57716ca.tar.gz
git-500ff119682eaa6d5047b40e54688219a57716ca.tar.bz2
Merge branch 'mg/maint-submodule-normalize-path'
* mg/maint-submodule-normalize-path: git submodule: Fix adding of submodules at paths with ./, .. and // git submodule: Add test cases for git submodule add
Diffstat (limited to 'git-submodule.sh')
-rwxr-xr-xgit-submodule.sh15
1 files changed, 12 insertions, 3 deletions
diff --git a/git-submodule.sh b/git-submodule.sh
index 204aab6..0a27232 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -167,9 +167,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"