t / t5514-fetch-multiple.shon commit Merge branch 'cb/notes-freeing-always-null-fix' (e14af5f)
   1#!/bin/sh
   2
   3test_description='fetch --all works correctly'
   4
   5. ./test-lib.sh
   6
   7setup_repository () {
   8        mkdir "$1" && (
   9        cd "$1" &&
  10        git init &&
  11        >file &&
  12        git add file &&
  13        test_tick &&
  14        git commit -m "Initial" &&
  15        git checkout -b side &&
  16        >elif &&
  17        git add elif &&
  18        test_tick &&
  19        git commit -m "Second" &&
  20        git checkout master
  21        )
  22}
  23
  24test_expect_success setup '
  25        setup_repository one &&
  26        setup_repository two &&
  27        (
  28                cd two && git branch another
  29        ) &&
  30        git clone --mirror two three &&
  31        git clone one test
  32'
  33
  34cat > test/expect << EOF
  35  one/master
  36  one/side
  37  origin/HEAD -> origin/master
  38  origin/master
  39  origin/side
  40  three/another
  41  three/master
  42  three/side
  43  two/another
  44  two/master
  45  two/side
  46EOF
  47
  48test_expect_success 'git fetch --all' '
  49        (cd test &&
  50         git remote add one ../one &&
  51         git remote add two ../two &&
  52         git remote add three ../three &&
  53         git fetch --all &&
  54         git branch -r > output &&
  55         test_cmp expect output)
  56'
  57
  58test_expect_success 'git fetch --all should continue if a remote has errors' '
  59        (git clone one test2 &&
  60         cd test2 &&
  61         git remote add bad ../non-existing &&
  62         git remote add one ../one &&
  63         git remote add two ../two &&
  64         git remote add three ../three &&
  65         test_must_fail git fetch --all &&
  66         git branch -r > output &&
  67         test_cmp ../test/expect output)
  68'
  69
  70test_expect_success 'git fetch --all does not allow non-option arguments' '
  71        (cd test &&
  72         test_must_fail git fetch --all origin &&
  73         test_must_fail git fetch --all origin master)
  74'
  75
  76cat > expect << EOF
  77  origin/HEAD -> origin/master
  78  origin/master
  79  origin/side
  80  three/another
  81  three/master
  82  three/side
  83EOF
  84
  85test_expect_success 'git fetch --multiple (but only one remote)' '
  86        (git clone one test3 &&
  87         cd test3 &&
  88         git remote add three ../three &&
  89         git fetch --multiple three &&
  90         git branch -r > output &&
  91         test_cmp ../expect output)
  92'
  93
  94cat > expect << EOF
  95  one/master
  96  one/side
  97  two/another
  98  two/master
  99  two/side
 100EOF
 101
 102test_expect_success 'git fetch --multiple (two remotes)' '
 103        (git clone one test4 &&
 104         cd test4 &&
 105         git remote rm origin &&
 106         git remote add one ../one &&
 107         git remote add two ../two &&
 108         git fetch --multiple one two &&
 109         git branch -r > output &&
 110         test_cmp ../expect output)
 111'
 112
 113test_expect_success 'git fetch --multiple (bad remote names)' '
 114        (cd test4 &&
 115         test_must_fail git fetch --multiple four)
 116'
 117
 118
 119test_expect_success 'git fetch --all (skipFetchAll)' '
 120        (cd test4 &&
 121         for b in $(git branch -r)
 122         do
 123                git branch -r -d $b || exit 1
 124         done &&
 125         git remote add three ../three &&
 126         git config remote.three.skipFetchAll true &&
 127         git fetch --all &&
 128         git branch -r > output &&
 129         test_cmp ../expect output)
 130'
 131
 132cat > expect << EOF
 133  one/master
 134  one/side
 135  three/another
 136  three/master
 137  three/side
 138  two/another
 139  two/master
 140  two/side
 141EOF
 142
 143test_expect_success 'git fetch --multiple (ignoring skipFetchAll)' '
 144        (cd test4 &&
 145         for b in $(git branch -r)
 146         do
 147                git branch -r -d $b || exit 1
 148         done &&
 149         git fetch --multiple one two three &&
 150         git branch -r > output &&
 151         test_cmp ../expect output)
 152'
 153
 154test_expect_success 'git fetch --all --no-tags' '
 155        git clone one test5 &&
 156        git clone test5 test6 &&
 157        (cd test5 && git tag test-tag) &&
 158        (
 159                cd test6 &&
 160                git fetch --all --no-tags &&
 161                git tag >output
 162        ) &&
 163        test_must_be_empty test6/output
 164'
 165
 166test_expect_success 'git fetch --all --tags' '
 167        echo test-tag >expect &&
 168        git clone one test7 &&
 169        git clone test7 test8 &&
 170        (
 171                cd test7 &&
 172                test_commit test-tag &&
 173                git reset --hard HEAD^
 174        ) &&
 175        (
 176                cd test8 &&
 177                git fetch --all --tags &&
 178                git tag >output
 179        ) &&
 180        test_cmp expect test8/output
 181'
 182
 183test_done