t / t5801-remote-helpers.shon commit Merge branch 'dd/use-alloc-grow' (fe9122a)
   1#!/bin/sh
   2#
   3# Copyright (c) 2010 Sverre Rabbelier
   4#
   5
   6test_description='Test remote-helper import and export commands'
   7
   8. ./test-lib.sh
   9. "$TEST_DIRECTORY"/lib-gpg.sh
  10
  11compare_refs() {
  12        git --git-dir="$1/.git" rev-parse --verify $2 >expect &&
  13        git --git-dir="$3/.git" rev-parse --verify $4 >actual &&
  14        test_cmp expect actual
  15}
  16
  17test_expect_success 'setup repository' '
  18        git init server &&
  19        (cd server &&
  20         echo content >file &&
  21         git add file &&
  22         git commit -m one)
  23'
  24
  25test_expect_success 'cloning from local repo' '
  26        git clone "testgit::${PWD}/server" local &&
  27        test_cmp server/file local/file
  28'
  29
  30test_expect_success 'create new commit on remote' '
  31        (cd server &&
  32         echo content >>file &&
  33         git commit -a -m two)
  34'
  35
  36test_expect_success 'pulling from local repo' '
  37        (cd local && git pull) &&
  38        test_cmp server/file local/file
  39'
  40
  41test_expect_success 'pushing to local repo' '
  42        (cd local &&
  43        echo content >>file &&
  44        git commit -a -m three &&
  45        git push) &&
  46        compare_refs local HEAD server HEAD
  47'
  48
  49test_expect_success 'fetch new branch' '
  50        (cd server &&
  51         git reset --hard &&
  52         git checkout -b new &&
  53         echo content >>file &&
  54         git commit -a -m five
  55        ) &&
  56        (cd local &&
  57         git fetch origin new
  58        ) &&
  59        compare_refs server HEAD local FETCH_HEAD
  60'
  61
  62test_expect_success 'fetch multiple branches' '
  63        (cd local &&
  64         git fetch
  65        ) &&
  66        compare_refs server master local refs/remotes/origin/master &&
  67        compare_refs server new local refs/remotes/origin/new
  68'
  69
  70test_expect_success 'push when remote has extra refs' '
  71        (cd local &&
  72         git reset --hard origin/master &&
  73         echo content >>file &&
  74         git commit -a -m six &&
  75         git push
  76        ) &&
  77        compare_refs local master server master
  78'
  79
  80test_expect_success 'push new branch by name' '
  81        (cd local &&
  82         git checkout -b new-name  &&
  83         echo content >>file &&
  84         git commit -a -m seven &&
  85         git push origin new-name
  86        ) &&
  87        compare_refs local HEAD server refs/heads/new-name
  88'
  89
  90test_expect_failure 'push new branch with old:new refspec' '
  91        (cd local &&
  92         git push origin new-name:new-refspec
  93        ) &&
  94        compare_refs local HEAD server refs/heads/new-refspec
  95'
  96
  97test_expect_success 'forced push' '
  98        (cd local &&
  99        git checkout -b force-test &&
 100        echo content >> file &&
 101        git commit -a -m eight &&
 102        git push origin force-test &&
 103        echo content >> file &&
 104        git commit -a --amend -m eight-modified &&
 105        git push --force origin force-test
 106        ) &&
 107        compare_refs local refs/heads/force-test server refs/heads/force-test
 108'
 109
 110test_expect_success 'cloning without refspec' '
 111        GIT_REMOTE_TESTGIT_REFSPEC="" \
 112        git clone "testgit::${PWD}/server" local2 2>error &&
 113        grep "This remote helper should implement refspec capability" error &&
 114        compare_refs local2 HEAD server HEAD
 115'
 116
 117test_expect_success 'pulling without refspecs' '
 118        (cd local2 &&
 119        git reset --hard &&
 120        GIT_REMOTE_TESTGIT_REFSPEC="" git pull 2>../error) &&
 121        grep "This remote helper should implement refspec capability" error &&
 122        compare_refs local2 HEAD server HEAD
 123'
 124
 125test_expect_success 'pushing without refspecs' '
 126        test_when_finished "(cd local2 && git reset --hard origin)" &&
 127        (cd local2 &&
 128        echo content >>file &&
 129        git commit -a -m ten &&
 130        GIT_REMOTE_TESTGIT_REFSPEC="" &&
 131        export GIT_REMOTE_TESTGIT_REFSPEC &&
 132        test_must_fail git push 2>../error) &&
 133        grep "remote-helper doesn.t support push; refspec needed" error
 134'
 135
 136test_expect_success 'pulling without marks' '
 137        (cd local2 &&
 138        GIT_REMOTE_TESTGIT_NO_MARKS=1 git pull) &&
 139        compare_refs local2 HEAD server HEAD
 140'
 141
 142test_expect_failure 'pushing without marks' '
 143        test_when_finished "(cd local2 && git reset --hard origin)" &&
 144        (cd local2 &&
 145        echo content >>file &&
 146        git commit -a -m twelve &&
 147        GIT_REMOTE_TESTGIT_NO_MARKS=1 git push) &&
 148        compare_refs local2 HEAD server HEAD
 149'
 150
 151test_expect_success 'push all with existing object' '
 152        (cd local &&
 153        git branch dup2 master &&
 154        git push origin --all
 155        ) &&
 156        compare_refs local dup2 server dup2
 157'
 158
 159test_expect_success 'push ref with existing object' '
 160        (cd local &&
 161        git branch dup master &&
 162        git push origin dup
 163        ) &&
 164        compare_refs local dup server dup
 165'
 166
 167test_expect_success GPG 'push signed tag' '
 168        (cd local &&
 169        git checkout master &&
 170        git tag -s -m signed-tag signed-tag &&
 171        git push origin signed-tag
 172        ) &&
 173        compare_refs local signed-tag^{} server signed-tag^{} &&
 174        test_must_fail compare_refs local signed-tag server signed-tag
 175'
 176
 177test_expect_success GPG 'push signed tag with signed-tags capability' '
 178        (cd local &&
 179        git checkout master &&
 180        git tag -s -m signed-tag signed-tag-2 &&
 181        GIT_REMOTE_TESTGIT_SIGNED_TAGS=1 git push origin signed-tag-2
 182        ) &&
 183        compare_refs local signed-tag-2 server signed-tag-2
 184'
 185
 186test_expect_success 'push update refs' '
 187        (cd local &&
 188        git checkout -b update master &&
 189        echo update >>file &&
 190        git commit -a -m update &&
 191        git push origin update &&
 192        git rev-parse --verify remotes/origin/update >expect &&
 193        git rev-parse --verify testgit/origin/heads/update >actual &&
 194        test_cmp expect actual
 195        )
 196'
 197
 198test_expect_success 'push update refs disabled by no-private-update' '
 199        (cd local &&
 200        echo more-update >>file &&
 201        git commit -a -m more-update &&
 202        git rev-parse --verify testgit/origin/heads/update >expect &&
 203        GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE=t git push origin update &&
 204        git rev-parse --verify testgit/origin/heads/update >actual &&
 205        test_cmp expect actual
 206        )
 207'
 208
 209test_expect_success 'push update refs failure' '
 210        (cd local &&
 211        git checkout update &&
 212        echo "update fail" >>file &&
 213        git commit -a -m "update fail" &&
 214        git rev-parse --verify testgit/origin/heads/update >expect &&
 215        GIT_REMOTE_TESTGIT_PUSH_ERROR="non-fast forward" &&
 216        export GIT_REMOTE_TESTGIT_PUSH_ERROR &&
 217        test_expect_code 1 git push origin update &&
 218        git rev-parse --verify testgit/origin/heads/update >actual &&
 219        test_cmp expect actual
 220        )
 221'
 222
 223test_expect_success 'proper failure checks for fetching' '
 224        (GIT_REMOTE_TESTGIT_FAILURE=1 &&
 225        export GIT_REMOTE_TESTGIT_FAILURE &&
 226        cd local &&
 227        test_must_fail git fetch 2> error &&
 228        cat error &&
 229        grep -q "Error while running fast-import" error
 230        )
 231'
 232
 233test_expect_success 'proper failure checks for pushing' '
 234        (GIT_REMOTE_TESTGIT_FAILURE=1 &&
 235        export GIT_REMOTE_TESTGIT_FAILURE &&
 236        cd local &&
 237        test_must_fail git push --all
 238        )
 239'
 240
 241test_expect_success 'push messages' '
 242        (cd local &&
 243        git checkout -b new_branch master &&
 244        echo new >>file &&
 245        git commit -a -m new &&
 246        git push origin new_branch &&
 247        git fetch origin &&
 248        echo new >>file &&
 249        git commit -a -m new &&
 250        git push origin new_branch 2> msg &&
 251        ! grep "\[new branch\]" msg
 252        )
 253'
 254
 255test_done