t / t5801-remote-helpers.shon commit Merge branch 'fc/cleanups' (7221dd3)
   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 'cloning without refspec' '
  98        GIT_REMOTE_TESTGIT_REFSPEC="" \
  99        git clone "testgit::${PWD}/server" local2 2>error &&
 100        grep "This remote helper should implement refspec capability" error &&
 101        compare_refs local2 HEAD server HEAD
 102'
 103
 104test_expect_success 'pulling without refspecs' '
 105        (cd local2 &&
 106        git reset --hard &&
 107        GIT_REMOTE_TESTGIT_REFSPEC="" git pull 2>../error) &&
 108        grep "This remote helper should implement refspec capability" error &&
 109        compare_refs local2 HEAD server HEAD
 110'
 111
 112test_expect_success 'pushing without refspecs' '
 113        test_when_finished "(cd local2 && git reset --hard origin)" &&
 114        (cd local2 &&
 115        echo content >>file &&
 116        git commit -a -m ten &&
 117        GIT_REMOTE_TESTGIT_REFSPEC="" &&
 118        export GIT_REMOTE_TESTGIT_REFSPEC &&
 119        test_must_fail git push 2>../error) &&
 120        grep "remote-helper doesn.t support push; refspec needed" error
 121'
 122
 123test_expect_success 'pulling without marks' '
 124        (cd local2 &&
 125        GIT_REMOTE_TESTGIT_NO_MARKS=1 git pull) &&
 126        compare_refs local2 HEAD server HEAD
 127'
 128
 129test_expect_failure 'pushing without marks' '
 130        test_when_finished "(cd local2 && git reset --hard origin)" &&
 131        (cd local2 &&
 132        echo content >>file &&
 133        git commit -a -m twelve &&
 134        GIT_REMOTE_TESTGIT_NO_MARKS=1 git push) &&
 135        compare_refs local2 HEAD server HEAD
 136'
 137
 138test_expect_success 'push all with existing object' '
 139        (cd local &&
 140        git branch dup2 master &&
 141        git push origin --all
 142        ) &&
 143        compare_refs local dup2 server dup2
 144'
 145
 146test_expect_success 'push ref with existing object' '
 147        (cd local &&
 148        git branch dup master &&
 149        git push origin dup
 150        ) &&
 151        compare_refs local dup server dup
 152'
 153
 154test_expect_success GPG 'push signed tag' '
 155        (cd local &&
 156        git checkout master &&
 157        git tag -s -m signed-tag signed-tag &&
 158        git push origin signed-tag
 159        ) &&
 160        compare_refs local signed-tag^{} server signed-tag^{} &&
 161        test_must_fail compare_refs local signed-tag server signed-tag
 162'
 163
 164test_expect_success GPG 'push signed tag with signed-tags capability' '
 165        (cd local &&
 166        git checkout master &&
 167        git tag -s -m signed-tag signed-tag-2 &&
 168        GIT_REMOTE_TESTGIT_SIGNED_TAGS=1 git push origin signed-tag-2
 169        ) &&
 170        compare_refs local signed-tag-2 server signed-tag-2
 171'
 172
 173test_expect_success 'push update refs' '
 174        (cd local &&
 175        git checkout -b update master &&
 176        echo update >>file &&
 177        git commit -a -m update &&
 178        git push origin update &&
 179        git rev-parse --verify remotes/origin/update >expect &&
 180        git rev-parse --verify testgit/origin/heads/update >actual &&
 181        test_cmp expect actual
 182        )
 183'
 184
 185test_expect_success 'push update refs failure' '
 186        (cd local &&
 187        git checkout update &&
 188        echo "update fail" >>file &&
 189        git commit -a -m "update fail" &&
 190        git rev-parse --verify testgit/origin/heads/update >expect &&
 191        GIT_REMOTE_TESTGIT_PUSH_ERROR="non-fast forward" &&
 192        export GIT_REMOTE_TESTGIT_PUSH_ERROR &&
 193        test_expect_code 1 git push origin update &&
 194        git rev-parse --verify testgit/origin/heads/update >actual &&
 195        test_cmp expect actual
 196        )
 197'
 198
 199test_expect_success 'proper failure checks for fetching' '
 200        (GIT_REMOTE_TESTGIT_FAILURE=1 &&
 201        export GIT_REMOTE_TESTGIT_FAILURE &&
 202        cd local &&
 203        test_must_fail git fetch 2> error &&
 204        cat error &&
 205        grep -q "Error while running fast-import" error
 206        )
 207'
 208
 209test_expect_success 'proper failure checks for pushing' '
 210        (GIT_REMOTE_TESTGIT_FAILURE=1 &&
 211        export GIT_REMOTE_TESTGIT_FAILURE &&
 212        cd local &&
 213        test_must_fail git push --all 2> error &&
 214        cat error &&
 215        grep -q "Reading from helper .git-remote-testgit. failed" error
 216        )
 217'
 218
 219test_expect_success 'push messages' '
 220        (cd local &&
 221        git checkout -b new_branch master &&
 222        echo new >>file &&
 223        git commit -a -m new &&
 224        git push origin new_branch &&
 225        git fetch origin &&
 226        echo new >>file &&
 227        git commit -a -m new &&
 228        git push origin new_branch 2> msg &&
 229        ! grep "\[new branch\]" msg
 230        )
 231'
 232
 233test_done