t / t5521-pull-options.shon commit t3903: abstract away SHA-1-specific constants (c784815)
   1#!/bin/sh
   2
   3test_description='pull options'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'setup' '
   8        mkdir parent &&
   9        (cd parent && git init &&
  10         echo one >file && git add file &&
  11         git commit -m one)
  12'
  13
  14test_expect_success 'git pull -q' '
  15        mkdir clonedq &&
  16        (cd clonedq && git init &&
  17        git pull -q "../parent" >out 2>err &&
  18        test_must_be_empty err &&
  19        test_must_be_empty out)
  20'
  21
  22test_expect_success 'git pull -q --rebase' '
  23        mkdir clonedqrb &&
  24        (cd clonedqrb && git init &&
  25        git pull -q --rebase "../parent" >out 2>err &&
  26        test_must_be_empty err &&
  27        test_must_be_empty out &&
  28        git pull -q --rebase "../parent" >out 2>err &&
  29        test_must_be_empty err &&
  30        test_must_be_empty out)
  31'
  32
  33test_expect_success 'git pull' '
  34        mkdir cloned &&
  35        (cd cloned && git init &&
  36        git pull "../parent" >out 2>err &&
  37        test -s err &&
  38        test_must_be_empty out)
  39'
  40
  41test_expect_success 'git pull --rebase' '
  42        mkdir clonedrb &&
  43        (cd clonedrb && git init &&
  44        git pull --rebase "../parent" >out 2>err &&
  45        test -s err &&
  46        test_must_be_empty out)
  47'
  48
  49test_expect_success 'git pull -v' '
  50        mkdir clonedv &&
  51        (cd clonedv && git init &&
  52        git pull -v "../parent" >out 2>err &&
  53        test -s err &&
  54        test_must_be_empty out)
  55'
  56
  57test_expect_success 'git pull -v --rebase' '
  58        mkdir clonedvrb &&
  59        (cd clonedvrb && git init &&
  60        git pull -v --rebase "../parent" >out 2>err &&
  61        test -s err &&
  62        test_must_be_empty out)
  63'
  64
  65test_expect_success 'git pull -v -q' '
  66        mkdir clonedvq &&
  67        (cd clonedvq && git init &&
  68        git pull -v -q "../parent" >out 2>err &&
  69        test_must_be_empty out &&
  70        test_must_be_empty err)
  71'
  72
  73test_expect_success 'git pull -q -v' '
  74        mkdir clonedqv &&
  75        (cd clonedqv && git init &&
  76        git pull -q -v "../parent" >out 2>err &&
  77        test_must_be_empty out &&
  78        test -s err)
  79'
  80test_expect_success 'git pull --cleanup errors early on invalid argument' '
  81        mkdir clonedcleanup &&
  82        (cd clonedcleanup && git init &&
  83        test_must_fail git pull --cleanup invalid "../parent" >out 2>err &&
  84        test_must_be_empty out &&
  85        test -s err)
  86'
  87
  88
  89test_expect_success 'git pull --force' '
  90        mkdir clonedoldstyle &&
  91        (cd clonedoldstyle && git init &&
  92        cat >>.git/config <<-\EOF &&
  93        [remote "one"]
  94                url = ../parent
  95                fetch = refs/heads/master:refs/heads/mirror
  96        [remote "two"]
  97                url = ../parent
  98                fetch = refs/heads/master:refs/heads/origin
  99        [branch "master"]
 100                remote = two
 101                merge = refs/heads/master
 102        EOF
 103        git pull two &&
 104        test_commit A &&
 105        git branch -f origin &&
 106        git pull --all --force
 107        )
 108'
 109
 110test_expect_success 'git pull --all' '
 111        mkdir clonedmulti &&
 112        (cd clonedmulti && git init &&
 113        cat >>.git/config <<-\EOF &&
 114        [remote "one"]
 115                url = ../parent
 116                fetch = refs/heads/*:refs/remotes/one/*
 117        [remote "two"]
 118                url = ../parent
 119                fetch = refs/heads/*:refs/remotes/two/*
 120        [branch "master"]
 121                remote = one
 122                merge = refs/heads/master
 123        EOF
 124        git pull --all
 125        )
 126'
 127
 128test_expect_success 'git pull --dry-run' '
 129        test_when_finished "rm -rf clonedry" &&
 130        git init clonedry &&
 131        (
 132                cd clonedry &&
 133                git pull --dry-run ../parent &&
 134                test_path_is_missing .git/FETCH_HEAD &&
 135                test_path_is_missing .git/refs/heads/master &&
 136                test_path_is_missing .git/index &&
 137                test_path_is_missing file
 138        )
 139'
 140
 141test_expect_success 'git pull --all --dry-run' '
 142        test_when_finished "rm -rf cloneddry" &&
 143        git init clonedry &&
 144        (
 145                cd clonedry &&
 146                git remote add origin ../parent &&
 147                git pull --all --dry-run &&
 148                test_path_is_missing .git/FETCH_HEAD &&
 149                test_path_is_missing .git/refs/remotes/origin/master &&
 150                test_path_is_missing .git/index &&
 151                test_path_is_missing file
 152        )
 153'
 154
 155test_expect_success 'git pull --allow-unrelated-histories' '
 156        test_when_finished "rm -fr src dst" &&
 157        git init src &&
 158        (
 159                cd src &&
 160                test_commit one &&
 161                test_commit two
 162        ) &&
 163        git clone src dst &&
 164        (
 165                cd src &&
 166                git checkout --orphan side HEAD^ &&
 167                test_commit three
 168        ) &&
 169        (
 170                cd dst &&
 171                test_must_fail git pull ../src side &&
 172                git pull --allow-unrelated-histories ../src side
 173        )
 174'
 175
 176test_expect_success 'git pull does not add a sign-off line' '
 177        test_when_finished "rm -fr src dst actual" &&
 178        git init src &&
 179        test_commit -C src one &&
 180        git clone src dst &&
 181        test_commit -C src two &&
 182        git -C dst pull --no-ff &&
 183        git -C dst show -s --pretty="format:%(trailers)" HEAD >actual &&
 184        test_must_be_empty actual
 185'
 186
 187test_expect_success 'git pull --no-signoff does not add sign-off line' '
 188        test_when_finished "rm -fr src dst actual" &&
 189        git init src &&
 190        test_commit -C src one &&
 191        git clone src dst &&
 192        test_commit -C src two &&
 193        git -C dst pull --no-signoff --no-ff &&
 194        git -C dst show -s --pretty="format:%(trailers)" HEAD >actual &&
 195        test_must_be_empty actual
 196'
 197
 198test_expect_success 'git pull --signoff add a sign-off line' '
 199        test_when_finished "rm -fr src dst expected actual" &&
 200        echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expected &&
 201        git init src &&
 202        test_commit -C src one &&
 203        git clone src dst &&
 204        test_commit -C src two &&
 205        git -C dst pull --signoff --no-ff &&
 206        git -C dst show -s --pretty="format:%(trailers)" HEAD >actual &&
 207        test_cmp expected actual
 208'
 209
 210test_expect_success 'git pull --no-signoff flag cancels --signoff flag' '
 211        test_when_finished "rm -fr src dst actual" &&
 212        git init src &&
 213        test_commit -C src one &&
 214        git clone src dst &&
 215        test_commit -C src two &&
 216        git -C dst pull --signoff --no-signoff --no-ff &&
 217        git -C dst show -s --pretty="format:%(trailers)" HEAD >actual &&
 218        test_must_be_empty actual
 219'
 220
 221test_done