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 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
|
#!/bin/sh
# adjust to non-default HGPORT, e.g. with run-tests.py -j
hideport() { sed "s/localhost:$HGPORT/localhost:\$HGPORT/"; }
hidehash() { sed "s/changeset 3:............ merges/changeset 3:... merges/"; }
echo "[extensions]" >> $HGRCPATH
echo "fetch=" >> $HGRCPATH
echo % test fetch with default branches only
hg init a
echo a > a/a
hg --cwd a commit -d '1 0' -Ama
hg clone a b
hg clone a c
echo b > a/b
hg --cwd a commit -d '2 0' -Amb
hg --cwd a parents -q
echo % should pull one change
hg --cwd b fetch ../a
hg --cwd b parents -q
echo c > c/c
hg --cwd c commit -d '3 0' -Amc
hg clone c d
hg clone c e
# We cannot use the default commit message if fetching from a local
# repo, because the path of the repo will be included in the commit
# message, making every commit appear different.
echo % should merge c into a
hg --cwd c fetch -d '4 0' -m 'automated merge' ../a
ls c
netstat -tnap 2>/dev/null | grep $HGPORT | grep LISTEN
hg --cwd a serve -a localhost -p $HGPORT -d --pid-file=hg.pid
cat a/hg.pid >> "$DAEMON_PIDS"
echo '% fetch over http, no auth'
hg --cwd d fetch -d '5 0' http://localhost:$HGPORT/ | hideport | hidehash
hg --cwd d tip --template '{desc}\n' | hideport
echo '% fetch over http with auth (should be hidden in desc)'
hg --cwd e fetch -d '5 0' http://user:password@localhost:$HGPORT/ | hideport | hidehash
hg --cwd e tip --template '{desc}\n' | hideport
hg clone a f
hg clone a g
echo f > f/f
hg --cwd f ci -d '6 0' -Amf
echo g > g/g
hg --cwd g ci -d '6 0' -Amg
hg clone -q f h
hg clone -q g i
echo % should merge f into g
hg --cwd g fetch -d '7 0' --switch -m 'automated merge' ../f
rm i/g
echo % should abort, because i is modified
hg --cwd i fetch ../h
echo % test fetch with named branches
hg init nbase
echo base > nbase/a
hg -R nbase ci -d '1 0' -Am base
hg -R nbase branch a
echo a > nbase/a
hg -R nbase ci -d '2 0' -m a
hg -R nbase up -C 0
hg -R nbase branch b
echo b > nbase/b
hg -R nbase ci -Ad '3 0' -m b
echo
echo % pull in change on foreign branch
hg clone nbase n1
hg clone nbase n2
hg -R n1 up -C a
echo aa > n1/a
hg -R n1 ci -d '4 0' -m a1
hg -R n2 up -C b
hg -R n2 fetch -d '9 0' -m 'merge' n1
echo '% parent should be 2 (no automatic update)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo
echo % pull in changes on both foreign and local branches
hg clone nbase n1
hg clone nbase n2
hg -R n1 up -C a
echo aa > n1/a
hg -R n1 ci -d '4 0' -m a1
hg -R n1 up -C b
echo bb > n1/b
hg -R n1 ci -d '5 0' -m b1
hg -R n2 up -C b
hg -R n2 fetch -d '9 0' -m 'merge' n1
echo '% parent should be 4 (fast forward)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo
echo '% pull changes on foreign (2 new heads) and local (1 new head) branches'
echo % with a local change
hg clone nbase n1
hg clone nbase n2
hg -R n1 up -C a
echo a1 > n1/a
hg -R n1 ci -d '4 0' -m a1
hg -R n1 up -C b
echo bb > n1/b
hg -R n1 ci -d '5 0' -m b1
hg -R n1 up -C 1
echo a2 > n1/a
hg -R n1 ci -d '6 0' -m a2
hg -R n2 up -C b
echo change >> n2/c
hg -R n2 ci -Ad '7 0' -m local
hg -R n2 fetch -d '9 0' -m 'merge' n1
echo '% parent should be 7 (new merge changeset)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo '% pull in changes on foreign (merge of local branch) and local (2 new'
echo '% heads) with a local change'
hg clone nbase n1
hg clone nbase n2
hg -R n1 up -C a
hg -R n1 merge b
hg -R n1 ci -d '4 0' -m merge
hg -R n1 up -C 2
echo c > n1/a
hg -R n1 ci -d '5 0' -m c
hg -R n1 up -C 2
echo cc > n1/a
hg -R n1 ci -d '6 0' -m cc
hg -R n2 up -C b
echo change >> n2/b
hg -R n2 ci -Ad '7 0' -m local
hg -R n2 fetch -d '9 0' -m 'merge' n1
echo '% parent should be 3 (fetch did not merge anything)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo % pull in change on different branch than dirstate
hg init n1
echo a > n1/a
hg -R n1 ci -Am initial
hg clone n1 n2
echo b > n1/a
hg -R n1 ci -m next
hg -R n2 branch topic
hg -R n2 fetch -d '0 0' -m merge n1
echo '% parent should be 0 (fetch did not update or merge anything)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo % test fetch with inactive branches
hg init ib1
echo a > ib1/a
hg --cwd ib1 ci -Am base
hg --cwd ib1 branch second
echo b > ib1/b
hg --cwd ib1 ci -Am onsecond
hg --cwd ib1 branch -f default
echo c > ib1/c
hg --cwd ib1 ci -Am newdefault
hg clone ib1 ib2
echo % fetch should succeed
hg --cwd ib2 fetch ../ib1
rm -fr ib1 ib2
echo % test issue1726
hg init i1726r1
echo a > i1726r1/a
hg --cwd i1726r1 ci -Am base
hg clone i1726r1 i1726r2
echo b > i1726r1/a
hg --cwd i1726r1 ci -m second
echo c > i1726r2/a
hg --cwd i1726r2 ci -m third
HGMERGE=true hg --cwd i1726r2 fetch ../i1726r1 | sed 's/new changeset 3:[0-9a-zA-Z]* /new changeset 3 /'
hg --cwd i1726r2 heads default --template '{rev}\n'
echo
echo % test issue2047
hg -q init i2047a
cd i2047a
echo a > a
hg -q ci -Am a
hg -q branch stable
echo b > b
hg -q ci -Am b
cd ..
hg -q clone -r 0 i2047a i2047b
cd i2047b
hg fetch ../i2047a
"$TESTDIR/killdaemons.py"
true
|