File tree Expand file tree Collapse file tree 2 files changed +61
-3
lines changed Expand file tree Collapse file tree 2 files changed +61
-3
lines changed Original file line number Diff line number Diff line change @@ -167,9 +167,18 @@ cmd_add()
167
167
;;
168
168
esac
169
169
170
- # strip trailing slashes from path
171
- path=$( echo " $path " | sed -e ' s|/*$||' )
172
-
170
+ # normalize path:
171
+ # multiple //; leading ./; /./; /../; trailing /
172
+ path=$( printf ' %s/\n' " $path " |
173
+ sed -e '
174
+ s|//*|/|g
175
+ s|^\(\./\)*||
176
+ s|/\./|/|g
177
+ :start
178
+ s|\([^/]*\)/\.\./||
179
+ tstart
180
+ s|/*$||
181
+ ' )
173
182
git ls-files --error-unmatch " $path " > /dev/null 2>&1 &&
174
183
die " '$path ' already exists in the index"
175
184
Original file line number Diff line number Diff line change @@ -47,6 +47,55 @@ test_expect_success 'Prepare submodule testing' '
47
47
GIT_CONFIG=.gitmodules git config submodule.example.url git://example.com/init.git
48
48
'
49
49
50
+ test_expect_success ' Prepare submodule add testing' '
51
+ submodurl=$(pwd)
52
+ (
53
+ mkdir addtest &&
54
+ cd addtest &&
55
+ git init
56
+ )
57
+ '
58
+
59
+ test_expect_success ' submodule add' '
60
+ (
61
+ cd addtest &&
62
+ git submodule add "$submodurl" submod &&
63
+ git submodule init
64
+ )
65
+ '
66
+
67
+ test_expect_success ' submodule add with ./ in path' '
68
+ (
69
+ cd addtest &&
70
+ git submodule add "$submodurl" ././dotsubmod/./frotz/./ &&
71
+ git submodule init
72
+ )
73
+ '
74
+
75
+ test_expect_success ' submodule add with // in path' '
76
+ (
77
+ cd addtest &&
78
+ git submodule add "$submodurl" slashslashsubmod///frotz// &&
79
+ git submodule init
80
+ )
81
+ '
82
+
83
+ test_expect_success ' submodule add with /.. in path' '
84
+ (
85
+ cd addtest &&
86
+ git submodule add "$submodurl" dotdotsubmod/../realsubmod/frotz/.. &&
87
+ git submodule init
88
+ )
89
+ '
90
+
91
+ test_expect_success ' submodule add with ./, /.. and // in path' '
92
+ (
93
+ cd addtest &&
94
+ git submodule add "$submodurl" dot/dotslashsubmod/./../..////realsubmod2/a/b/c/d/../../../../frotz//.. &&
95
+ git submodule init
96
+ )
97
+ '
98
+
50
99
test_expect_success ' status should fail for unmapped paths' '
51
100
if git submodule status
52
101
then
You can’t perform that action at this time.
0 commit comments