t / t5514-fetch-multiple.shon commit Teach the --multiple option to 'git fetch' (16679e3)
   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  origin/HEAD -> origin/master
  98  origin/master
  99  origin/side
 100  two/another
 101  two/master
 102  two/side
 103EOF
 104
 105test_expect_success 'git fetch --multiple (two remotes)' '
 106        (git clone one test4 &&
 107         cd test4 &&
 108         git remote add one ../one &&
 109         git remote add two ../two &&
 110         git fetch --multiple one two &&
 111         git branch -r > output &&
 112         test_cmp ../expect output)
 113'
 114
 115test_expect_success 'git fetch --multiple (bad remote names)' '
 116        (cd test4 &&
 117         test_must_fail git fetch --multiple four)
 118'
 119
 120test_done