t / t5603-clone-dirname.shon commit Merge branch 'nd/clone-linked-checkout' (b9d23c2)
   1#!/bin/sh
   2
   3test_description='check output directory names used by git-clone'
   4. ./test-lib.sh
   5
   6# we use a fake ssh wrapper that ignores the arguments
   7# entirely; we really only care that we get _some_ repo,
   8# as the real test is what clone does on the local side
   9test_expect_success 'setup ssh wrapper' '
  10        write_script "$TRASH_DIRECTORY/ssh-wrapper" <<-\EOF &&
  11        git upload-pack "$TRASH_DIRECTORY"
  12        EOF
  13        GIT_SSH="$TRASH_DIRECTORY/ssh-wrapper" &&
  14        export GIT_SSH &&
  15        export TRASH_DIRECTORY
  16'
  17
  18# make sure that cloning $1 results in local directory $2
  19test_clone_dir () {
  20        url=$1; shift
  21        dir=$1; shift
  22        expect=success
  23        bare=non-bare
  24        clone_opts=
  25        for i in "$@"
  26        do
  27                case "$i" in
  28                fail)
  29                        expect=failure
  30                        ;;
  31                bare)
  32                        bare=bare
  33                        clone_opts=--bare
  34                        ;;
  35                esac
  36        done
  37        test_expect_$expect "clone of $url goes to $dir ($bare)" "
  38                rm -rf $dir &&
  39                git clone $clone_opts $url &&
  40                test_path_is_dir $dir
  41        "
  42}
  43
  44# basic syntax with bare and non-bare variants
  45test_clone_dir host:foo foo
  46test_clone_dir host:foo foo.git bare
  47test_clone_dir host:foo.git foo
  48test_clone_dir host:foo.git foo.git bare
  49test_clone_dir host:foo/.git foo
  50test_clone_dir host:foo/.git foo.git bare
  51
  52# similar, but using ssh URL rather than host:path syntax
  53test_clone_dir ssh://host/foo foo
  54test_clone_dir ssh://host/foo foo.git bare
  55test_clone_dir ssh://host/foo.git foo
  56test_clone_dir ssh://host/foo.git foo.git bare
  57test_clone_dir ssh://host/foo/.git foo
  58test_clone_dir ssh://host/foo/.git foo.git bare
  59
  60# we should remove trailing slashes and .git suffixes
  61test_clone_dir ssh://host/foo/ foo
  62test_clone_dir ssh://host/foo/// foo
  63test_clone_dir ssh://host/foo/.git/ foo
  64test_clone_dir ssh://host/foo.git/ foo
  65test_clone_dir ssh://host/foo.git/// foo
  66test_clone_dir ssh://host/foo///.git/ foo
  67test_clone_dir ssh://host/foo/.git/// foo
  68
  69test_clone_dir host:foo/ foo
  70test_clone_dir host:foo/// foo
  71test_clone_dir host:foo.git/ foo
  72test_clone_dir host:foo/.git/ foo
  73test_clone_dir host:foo.git/// foo
  74test_clone_dir host:foo///.git/ foo
  75test_clone_dir host:foo/.git/// foo
  76
  77# omitting the path should default to the hostname
  78test_clone_dir ssh://host/ host
  79test_clone_dir ssh://host:1234/ host
  80test_clone_dir ssh://user@host/ host
  81test_clone_dir host:/ host
  82
  83# auth materials should be redacted
  84test_clone_dir ssh://user:password@host/ host
  85test_clone_dir ssh://user:password@host:1234/ host
  86test_clone_dir ssh://user:passw@rd@host:1234/ host
  87test_clone_dir user@host:/ host
  88test_clone_dir user:password@host:/ host
  89test_clone_dir user:passw@rd@host:/ host
  90
  91# auth-like material should not be dropped
  92test_clone_dir ssh://host/foo@bar foo@bar
  93test_clone_dir ssh://host/foo@bar.git foo@bar
  94test_clone_dir ssh://user:password@host/foo@bar foo@bar
  95test_clone_dir ssh://user:passw@rd@host/foo@bar.git foo@bar
  96
  97test_clone_dir host:/foo@bar foo@bar
  98test_clone_dir host:/foo@bar.git foo@bar
  99test_clone_dir user:password@host:/foo@bar foo@bar
 100test_clone_dir user:passw@rd@host:/foo@bar.git foo@bar
 101
 102# trailing port-like numbers should not be stripped for paths
 103test_clone_dir ssh://user:password@host/test:1234 1234
 104test_clone_dir ssh://user:password@host/test:1234.git 1234
 105
 106test_done