|
1 Create an extension to test bundle2 with multiple changegroups |
|
2 |
|
3 $ cat > bundle2.py <<EOF |
|
4 > """ |
|
5 > """ |
|
6 > from mercurial import changegroup, exchange |
|
7 > |
|
8 > def _getbundlechangegrouppart(bundler, repo, source, bundlecaps=None, |
|
9 > b2caps=None, heads=None, common=None, |
|
10 > **kwargs): |
|
11 > # Create two changegroups given the common changesets and heads for the |
|
12 > # changegroup part we are being requested. Use the parent of each head |
|
13 > # in 'heads' as intermediate heads for the first changegroup. |
|
14 > intermediates = [repo[r].p1().node() for r in heads] |
|
15 > cg = changegroup.getchangegroup(repo, source, heads=intermediates, |
|
16 > common=common, bundlecaps=bundlecaps) |
|
17 > bundler.newpart('b2x:output', data='changegroup1') |
|
18 > bundler.newpart('b2x:changegroup', data=cg.getchunks()) |
|
19 > cg = changegroup.getchangegroup(repo, source, heads=heads, |
|
20 > common=common + intermediates, |
|
21 > bundlecaps=bundlecaps) |
|
22 > bundler.newpart('b2x:output', data='changegroup2') |
|
23 > bundler.newpart('b2x:changegroup', data=cg.getchunks()) |
|
24 > |
|
25 > def _pull(repo, *args, **kwargs): |
|
26 > pullop = _orig_pull(repo, *args, **kwargs) |
|
27 > repo.ui.write('pullop.cgresult is %d\n' % pullop.cgresult) |
|
28 > return pullop |
|
29 > |
|
30 > _orig_pull = exchange.pull |
|
31 > exchange.pull = _pull |
|
32 > exchange.getbundle2partsmapping['changegroup'] = _getbundlechangegrouppart |
|
33 > EOF |
|
34 |
|
35 $ cat >> $HGRCPATH << EOF |
|
36 > [experimental] |
|
37 > bundle2-exp=True |
|
38 > [ui] |
|
39 > logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline} |
|
40 > EOF |
|
41 |
|
42 Start with a simple repository with a single commit |
|
43 |
|
44 $ hg init repo |
|
45 $ cd repo |
|
46 $ cat > .hg/hgrc << EOF |
|
47 > [extensions] |
|
48 > bundle2=$TESTTMP/bundle2.py |
|
49 > EOF |
|
50 |
|
51 $ echo A > A |
|
52 $ hg commit -A -m A -q |
|
53 $ cd .. |
|
54 |
|
55 Clone |
|
56 |
|
57 $ hg clone -q repo clone |
|
58 |
|
59 Add two linear commits |
|
60 |
|
61 $ cd repo |
|
62 $ echo B > B |
|
63 $ hg commit -A -m B -q |
|
64 $ echo C > C |
|
65 $ hg commit -A -m C -q |
|
66 |
|
67 $ cd ../clone |
|
68 $ cat >> .hg/hgrc <<EOF |
|
69 > [hooks] |
|
70 > pretxnchangegroup = sh -c "python \"$TESTDIR/printenv.py\" pretxnchangegroup" |
|
71 > changegroup = sh -c "python \"$TESTDIR/printenv.py\" changegroup" |
|
72 > incoming = sh -c "python \"$TESTDIR/printenv.py\" incoming" |
|
73 > EOF |
|
74 |
|
75 Pull the new commits in the clone |
|
76 |
|
77 $ hg pull |
|
78 pulling from $TESTTMP/repo (glob) |
|
79 searching for changes |
|
80 remote: changegroup1 |
|
81 adding changesets |
|
82 adding manifests |
|
83 adding file changes |
|
84 added 1 changesets with 1 changes to 1 files |
|
85 pretxnchangegroup hook: HG_NODE=27547f69f25460a52fff66ad004e58da7ad3fb56 HG_PENDING=$TESTTMP/clone HG_SOURCE=bundle2 HG_URL=bundle2 |
|
86 remote: changegroup2 |
|
87 adding changesets |
|
88 adding manifests |
|
89 adding file changes |
|
90 added 1 changesets with 1 changes to 1 files |
|
91 pretxnchangegroup hook: HG_NODE=f838bfaca5c7226600ebcfd84f3c3c13a28d3757 HG_PENDING=$TESTTMP/clone HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
92 changegroup hook: HG_NODE=27547f69f25460a52fff66ad004e58da7ad3fb56 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
93 incoming hook: HG_NODE=27547f69f25460a52fff66ad004e58da7ad3fb56 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
94 changegroup hook: HG_NODE=f838bfaca5c7226600ebcfd84f3c3c13a28d3757 HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
95 incoming hook: HG_NODE=f838bfaca5c7226600ebcfd84f3c3c13a28d3757 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
96 pullop.cgresult is 1 |
|
97 (run 'hg update' to get a working copy) |
|
98 $ hg update |
|
99 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
100 $ hg log -G |
|
101 @ 2:f838bfaca5c7 public test C |
|
102 | |
|
103 o 1:27547f69f254 public test B |
|
104 | |
|
105 o 0:4a2df7238c3b public test A |
|
106 |
|
107 Add more changesets with multiple heads to the original repository |
|
108 |
|
109 $ cd ../repo |
|
110 $ echo D > D |
|
111 $ hg commit -A -m D -q |
|
112 $ hg up -r 1 |
|
113 0 files updated, 0 files merged, 2 files removed, 0 files unresolved |
|
114 $ echo E > E |
|
115 $ hg commit -A -m E -q |
|
116 $ echo F > F |
|
117 $ hg commit -A -m F -q |
|
118 $ hg up -r 1 |
|
119 0 files updated, 0 files merged, 2 files removed, 0 files unresolved |
|
120 $ echo G > G |
|
121 $ hg commit -A -m G -q |
|
122 $ hg up -r 3 |
|
123 2 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
124 $ echo H > H |
|
125 $ hg commit -A -m H -q |
|
126 $ hg log -G |
|
127 @ 7:5cd59d311f65 draft test H |
|
128 | |
|
129 | o 6:1d14c3ce6ac0 draft test G |
|
130 | | |
|
131 | | o 5:7f219660301f draft test F |
|
132 | | | |
|
133 | | o 4:8a5212ebc852 draft test E |
|
134 | |/ |
|
135 o | 3:b3325c91a4d9 draft test D |
|
136 | | |
|
137 o | 2:f838bfaca5c7 draft test C |
|
138 |/ |
|
139 o 1:27547f69f254 draft test B |
|
140 | |
|
141 o 0:4a2df7238c3b draft test A |
|
142 |
|
143 New heads are reported during transfer and properly accounted for in |
|
144 pullop.cgresult |
|
145 |
|
146 $ cd ../clone |
|
147 $ hg pull |
|
148 pulling from $TESTTMP/repo (glob) |
|
149 searching for changes |
|
150 remote: changegroup1 |
|
151 adding changesets |
|
152 adding manifests |
|
153 adding file changes |
|
154 added 2 changesets with 2 changes to 2 files (+1 heads) |
|
155 pretxnchangegroup hook: HG_NODE=b3325c91a4d916bcc4cdc83ea3fe4ece46a42f6e HG_PENDING=$TESTTMP/clone HG_SOURCE=bundle2 HG_URL=bundle2 |
|
156 remote: changegroup2 |
|
157 adding changesets |
|
158 adding manifests |
|
159 adding file changes |
|
160 added 3 changesets with 3 changes to 3 files (+1 heads) |
|
161 pretxnchangegroup hook: HG_NODE=7f219660301fe4c8a116f714df5e769695cc2b46 HG_PENDING=$TESTTMP/clone HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
162 changegroup hook: HG_NODE=b3325c91a4d916bcc4cdc83ea3fe4ece46a42f6e HG_SOURCE=bundle2 HG_URL=bundle2 |
|
163 incoming hook: HG_NODE=b3325c91a4d916bcc4cdc83ea3fe4ece46a42f6e HG_SOURCE=bundle2 HG_URL=bundle2 |
|
164 incoming hook: HG_NODE=8a5212ebc8527f9fb821601504794e3eb11a1ed3 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
165 changegroup hook: HG_NODE=7f219660301fe4c8a116f714df5e769695cc2b46 HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
166 incoming hook: HG_NODE=7f219660301fe4c8a116f714df5e769695cc2b46 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
167 incoming hook: HG_NODE=1d14c3ce6ac0582d2809220d33e8cd7a696e0156 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
168 incoming hook: HG_NODE=5cd59d311f6508b8e0ed28a266756c859419c9f1 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
169 pullop.cgresult is 3 |
|
170 (run 'hg heads' to see heads, 'hg merge' to merge) |
|
171 $ hg log -G |
|
172 o 7:5cd59d311f65 public test H |
|
173 | |
|
174 | o 6:1d14c3ce6ac0 public test G |
|
175 | | |
|
176 | | o 5:7f219660301f public test F |
|
177 | | | |
|
178 | | o 4:8a5212ebc852 public test E |
|
179 | |/ |
|
180 o | 3:b3325c91a4d9 public test D |
|
181 | | |
|
182 @ | 2:f838bfaca5c7 public test C |
|
183 |/ |
|
184 o 1:27547f69f254 public test B |
|
185 | |
|
186 o 0:4a2df7238c3b public test A |
|
187 |
|
188 Removing a head from the original repository by merging it |
|
189 |
|
190 $ cd ../repo |
|
191 $ hg merge -r 6 -q |
|
192 $ hg commit -m Merge |
|
193 $ echo I > I |
|
194 $ hg commit -A -m H -q |
|
195 $ hg log -G |
|
196 @ 9:9d18e5bd9ab0 draft test H |
|
197 | |
|
198 o 8:71bd7b46de72 draft test Merge |
|
199 |\ |
|
200 | o 7:5cd59d311f65 draft test H |
|
201 | | |
|
202 o | 6:1d14c3ce6ac0 draft test G |
|
203 | | |
|
204 | | o 5:7f219660301f draft test F |
|
205 | | | |
|
206 +---o 4:8a5212ebc852 draft test E |
|
207 | | |
|
208 | o 3:b3325c91a4d9 draft test D |
|
209 | | |
|
210 | o 2:f838bfaca5c7 draft test C |
|
211 |/ |
|
212 o 1:27547f69f254 draft test B |
|
213 | |
|
214 o 0:4a2df7238c3b draft test A |
|
215 |
|
216 Removed heads are reported during transfer and properly accounted for in |
|
217 pullop.cgresult |
|
218 |
|
219 $ cd ../clone |
|
220 $ hg pull |
|
221 pulling from $TESTTMP/repo (glob) |
|
222 searching for changes |
|
223 remote: changegroup1 |
|
224 adding changesets |
|
225 adding manifests |
|
226 adding file changes |
|
227 added 1 changesets with 0 changes to 0 files (-1 heads) |
|
228 pretxnchangegroup hook: HG_NODE=71bd7b46de72e69a32455bf88d04757d542e6cf4 HG_PENDING=$TESTTMP/clone HG_SOURCE=bundle2 HG_URL=bundle2 |
|
229 remote: changegroup2 |
|
230 adding changesets |
|
231 adding manifests |
|
232 adding file changes |
|
233 added 1 changesets with 1 changes to 1 files |
|
234 pretxnchangegroup hook: HG_NODE=9d18e5bd9ab09337802595d49f1dad0c98df4d84 HG_PENDING=$TESTTMP/clone HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
235 changegroup hook: HG_NODE=71bd7b46de72e69a32455bf88d04757d542e6cf4 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
236 incoming hook: HG_NODE=71bd7b46de72e69a32455bf88d04757d542e6cf4 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
237 changegroup hook: HG_NODE=9d18e5bd9ab09337802595d49f1dad0c98df4d84 HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
238 incoming hook: HG_NODE=9d18e5bd9ab09337802595d49f1dad0c98df4d84 HG_SOURCE=bundle2 HG_URL=bundle2 |
|
239 pullop.cgresult is -2 |
|
240 (run 'hg update' to get a working copy) |
|
241 $ hg log -G |
|
242 o 9:9d18e5bd9ab0 public test H |
|
243 | |
|
244 o 8:71bd7b46de72 public test Merge |
|
245 |\ |
|
246 | o 7:5cd59d311f65 public test H |
|
247 | | |
|
248 o | 6:1d14c3ce6ac0 public test G |
|
249 | | |
|
250 | | o 5:7f219660301f public test F |
|
251 | | | |
|
252 +---o 4:8a5212ebc852 public test E |
|
253 | | |
|
254 | o 3:b3325c91a4d9 public test D |
|
255 | | |
|
256 | @ 2:f838bfaca5c7 public test C |
|
257 |/ |
|
258 o 1:27547f69f254 public test B |
|
259 | |
|
260 o 0:4a2df7238c3b public test A |
|
261 |