Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

executable file 144 lines (130 sloc) 3.439 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
#!/bin/sh

test_description='push to a repository that borrows from elsewhere'

. ./test-lib.sh

test_expect_success setup '
mkdir alice-pub &&
(
cd alice-pub &&
GIT_DIR=. git init
) &&
mkdir alice-work &&
(
cd alice-work &&
git init &&
>file &&
git add . &&
git commit -m initial &&
git push ../alice-pub master
) &&

# Project Bob is a fork of project Alice
mkdir bob-pub &&
(
cd bob-pub &&
GIT_DIR=. git init &&
mkdir -p objects/info &&
echo ../../alice-pub/objects >objects/info/alternates
) &&
git clone alice-pub bob-work &&
(
cd bob-work &&
git push ../bob-pub master
)
'

test_expect_success 'alice works and pushes' '
(
cd alice-work &&
echo more >file &&
git commit -a -m second &&
git push ../alice-pub :
)
'

test_expect_success 'bob fetches from alice, works and pushes' '
(
# Bob acquires what Alice did in his work tree first.
# Even though these objects are not directly in
# the public repository of Bob, this push does not
# need to send the commit Bob received from Alice
# to his public repository, as all the object Alice
# has at her public repository are available to it
# via its alternates.
cd bob-work &&
git pull ../alice-pub master &&
echo more bob >file &&
git commit -a -m third &&
git push ../bob-pub :
) &&

# Check that the second commit by Alice is not sent
# to ../bob-pub
(
cd bob-pub &&
second=$(git rev-parse HEAD^) &&
rm -f objects/info/alternates &&
test_must_fail git cat-file -t $second &&
echo ../../alice-pub/objects >objects/info/alternates
)
'

test_expect_success 'clean-up in case the previous failed' '
(
cd bob-pub &&
echo ../../alice-pub/objects >objects/info/alternates
)
'

test_expect_success 'alice works and pushes again' '
(
# Alice does not care what Bob does. She does not
# even have to be aware of his existence. She just
# keeps working and pushing
cd alice-work &&
echo more alice >file &&
git commit -a -m fourth &&
git push ../alice-pub :
)
'

test_expect_success 'bob works and pushes' '
(
# This time Bob does not pull from Alice, and
# the master branch at her public repository points
# at a commit Bob does not know about. This should
# not prevent the push by Bob from succeeding.
cd bob-work &&
echo yet more bob >file &&
git commit -a -m fifth &&
git push ../bob-pub :
)
'

test_expect_success 'alice works and pushes yet again' '
(
# Alice does not care what Bob does. She does not
# even have to be aware of his existence. She just
# keeps working and pushing
cd alice-work &&
echo more and more alice >file &&
git commit -a -m sixth.1 &&
echo more and more alice >>file &&
git commit -a -m sixth.2 &&
echo more and more alice >>file &&
git commit -a -m sixth.3 &&
git push ../alice-pub :
)
'

test_expect_success 'bob works and pushes again' '
(
cd alice-pub &&
git cat-file commit master >../bob-work/commit
) &&
(
# This time Bob does not pull from Alice, and
# the master branch at her public repository points
# at a commit Bob does not fully know about, but
# he happens to have the commit object (but not the
# necessary tree) in his repository from Alice.
# This should not prevent the push by Bob from
# succeeding.
cd bob-work &&
git hash-object -t commit -w commit &&
echo even more bob >file &&
git commit -a -m seventh &&
git push ../bob-pub :
)
'

test_done
Something went wrong with that request. Please try again.