@@ -313,7 +313,7 @@ expect_ssh () {
313313
314314setup_ssh_wrapper
315315
316- test_expect_success ' cloning myhost:src uses ssh' '
316+ test_expect_success ' clone myhost:src uses ssh' '
317317 git clone myhost:src ssh-clone &&
318318 expect_ssh myhost src
319319'
@@ -329,6 +329,104 @@ test_expect_success 'bracketed hostnames are still ssh' '
329329 expect_ssh myhost:123 src
330330'
331331
332+ counter=0
333+ # $1 url
334+ # $2 none|host
335+ # $3 path
336+ test_clone_url () {
337+ counter=$(( $counter + 1 ))
338+ test_might_fail git clone " $1 " tmp$counter &&
339+ expect_ssh " $2 " " $3 "
340+ }
341+
342+ test_expect_success NOT_MINGW ' clone c:temp is ssl' '
343+ test_clone_url c:temp c temp
344+ '
345+
346+ test_expect_success MINGW ' clone c:temp is dos drive' '
347+ test_clone_url c:temp none
348+ '
349+
350+ # ip v4
351+ for repo in rep rep/home/project /~proj 123
352+ do
353+ test_expect_success " clone host:$repo " '
354+ test_clone_url host:$repo host $repo
355+ '
356+ done
357+
358+ # ipv6
359+ # failing
360+ for repo in /~proj
361+ do
362+ test_expect_failure " clone [::1]:$repo " '
363+ test_clone_url [::1]:$repo ::1 $repo
364+ '
365+ done
366+
367+ for repo in rep rep/home/project 123
368+ do
369+ test_expect_success " clone [::1]:$repo " '
370+ test_clone_url [::1]:$repo ::1 $repo
371+ '
372+ done
373+
374+ # Corner cases
375+ # failing
376+ for repo in [foo]bar/baz:qux [foo/bar]:baz
377+ do
378+ test_expect_failure " clone $url is not ssh" '
379+ test_clone_url $url none
380+ '
381+ done
382+
383+ for url in foo/bar:baz
384+ do
385+ test_expect_success " clone $url is not ssh" '
386+ test_clone_url $url none
387+ '
388+ done
389+
390+ # with ssh:// scheme
391+ test_expect_success ' clone ssh://host.xz/home/user/repo' '
392+ test_clone_url "ssh://host.xz/home/user/repo" host.xz "/home/user/repo"
393+ '
394+
395+ # from home directory
396+ test_expect_success ' clone ssh://host.xz/~repo' '
397+ test_clone_url "ssh://host.xz/~repo" host.xz "~repo"
398+ '
399+
400+ # with port number
401+ test_expect_success ' clone ssh://host.xz:22/home/user/repo' '
402+ test_clone_url "ssh://host.xz:22/home/user/repo" "-p 22 host.xz" "/home/user/repo"
403+ '
404+
405+ # from home directory with port number
406+ test_expect_success ' clone ssh://host.xz:22/~repo' '
407+ test_clone_url "ssh://host.xz:22/~repo" "-p 22 host.xz" "~repo"
408+ '
409+
410+ # IPv6
411+ test_expect_success ' clone ssh://[::1]/home/user/repo' '
412+ test_clone_url "ssh://[::1]/home/user/repo" "::1" "/home/user/repo"
413+ '
414+
415+ # IPv6 from home directory
416+ test_expect_success ' clone ssh://[::1]/~repo' '
417+ test_clone_url "ssh://[::1]/~repo" "::1" "~repo"
418+ '
419+
420+ # IPv6 with port number
421+ test_expect_success ' clone ssh://[::1]:22/home/user/repo' '
422+ test_clone_url "ssh://[::1]:22/home/user/repo" "-p 22 ::1" "/home/user/repo"
423+ '
424+
425+ # IPv6 from home directory with port number
426+ test_expect_success ' clone ssh://[::1]:22/~repo' '
427+ test_clone_url "ssh://[::1]:22/~repo" "-p 22 ::1" "~repo"
428+ '
429+
332430test_expect_success ' clone from a repository with two identical branches' '
333431
334432 (
0 commit comments