File: test-fetch

package info (click to toggle)
mercurial 1.6.4-1%2Bdeb6u1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze-lts
  • size: 17,928 kB
  • ctags: 6,062
  • sloc: python: 44,238; sh: 20,985; tcl: 3,578; ansic: 2,557; lisp: 1,412; makefile: 176; xml: 15
file content (216 lines) | stat: -rwxr-xr-x 4,964 bytes parent folder | download | duplicates (2)
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