##// END OF EJS Templates
tests: explicitly flush output streams...
Jun Wu -
r28612:6fb1d3c9 default
parent child Browse files
Show More
@@ -1,1231 +1,1233 b''
1 This test is dedicated to test the bundle2 container format
1 This test is dedicated to test the bundle2 container format
2
2
3 It test multiple existing parts to test different feature of the container. You
3 It test multiple existing parts to test different feature of the container. You
4 probably do not need to touch this test unless you change the binary encoding
4 probably do not need to touch this test unless you change the binary encoding
5 of the bundle2 format itself.
5 of the bundle2 format itself.
6
6
7 Create an extension to test bundle2 API
7 Create an extension to test bundle2 API
8
8
9 $ cat > bundle2.py << EOF
9 $ cat > bundle2.py << EOF
10 > """A small extension to test bundle2 implementation
10 > """A small extension to test bundle2 implementation
11 >
11 >
12 > This extension allows detailed testing of the various bundle2 API and
12 > This extension allows detailed testing of the various bundle2 API and
13 > behaviors.
13 > behaviors.
14 > """
14 > """
15 >
15 >
16 > import sys, os, gc
16 > import sys, os, gc
17 > from mercurial import cmdutil
17 > from mercurial import cmdutil
18 > from mercurial import util
18 > from mercurial import util
19 > from mercurial import bundle2
19 > from mercurial import bundle2
20 > from mercurial import scmutil
20 > from mercurial import scmutil
21 > from mercurial import discovery
21 > from mercurial import discovery
22 > from mercurial import changegroup
22 > from mercurial import changegroup
23 > from mercurial import error
23 > from mercurial import error
24 > from mercurial import obsolete
24 > from mercurial import obsolete
25 >
25 >
26 >
26 >
27 > try:
27 > try:
28 > import msvcrt
28 > import msvcrt
29 > msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
29 > msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
30 > msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
30 > msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
31 > msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
31 > msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
32 > except ImportError:
32 > except ImportError:
33 > pass
33 > pass
34 >
34 >
35 > cmdtable = {}
35 > cmdtable = {}
36 > command = cmdutil.command(cmdtable)
36 > command = cmdutil.command(cmdtable)
37 >
37 >
38 > ELEPHANTSSONG = """Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
38 > ELEPHANTSSONG = """Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
39 > Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
39 > Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
40 > Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko."""
40 > Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko."""
41 > assert len(ELEPHANTSSONG) == 178 # future test say 178 bytes, trust it.
41 > assert len(ELEPHANTSSONG) == 178 # future test say 178 bytes, trust it.
42 >
42 >
43 > @bundle2.parthandler('test:song')
43 > @bundle2.parthandler('test:song')
44 > def songhandler(op, part):
44 > def songhandler(op, part):
45 > """handle a "test:song" bundle2 part, printing the lyrics on stdin"""
45 > """handle a "test:song" bundle2 part, printing the lyrics on stdin"""
46 > op.ui.write('The choir starts singing:\n')
46 > op.ui.write('The choir starts singing:\n')
47 > verses = 0
47 > verses = 0
48 > for line in part.read().split('\n'):
48 > for line in part.read().split('\n'):
49 > op.ui.write(' %s\n' % line)
49 > op.ui.write(' %s\n' % line)
50 > verses += 1
50 > verses += 1
51 > op.records.add('song', {'verses': verses})
51 > op.records.add('song', {'verses': verses})
52 >
52 >
53 > @bundle2.parthandler('test:ping')
53 > @bundle2.parthandler('test:ping')
54 > def pinghandler(op, part):
54 > def pinghandler(op, part):
55 > op.ui.write('received ping request (id %i)\n' % part.id)
55 > op.ui.write('received ping request (id %i)\n' % part.id)
56 > if op.reply is not None and 'ping-pong' in op.reply.capabilities:
56 > if op.reply is not None and 'ping-pong' in op.reply.capabilities:
57 > op.ui.write_err('replying to ping request (id %i)\n' % part.id)
57 > op.ui.write_err('replying to ping request (id %i)\n' % part.id)
58 > op.reply.newpart('test:pong', [('in-reply-to', str(part.id))],
58 > op.reply.newpart('test:pong', [('in-reply-to', str(part.id))],
59 > mandatory=False)
59 > mandatory=False)
60 >
60 >
61 > @bundle2.parthandler('test:debugreply')
61 > @bundle2.parthandler('test:debugreply')
62 > def debugreply(op, part):
62 > def debugreply(op, part):
63 > """print data about the capacity of the bundle reply"""
63 > """print data about the capacity of the bundle reply"""
64 > if op.reply is None:
64 > if op.reply is None:
65 > op.ui.write('debugreply: no reply\n')
65 > op.ui.write('debugreply: no reply\n')
66 > else:
66 > else:
67 > op.ui.write('debugreply: capabilities:\n')
67 > op.ui.write('debugreply: capabilities:\n')
68 > for cap in sorted(op.reply.capabilities):
68 > for cap in sorted(op.reply.capabilities):
69 > op.ui.write('debugreply: %r\n' % cap)
69 > op.ui.write('debugreply: %r\n' % cap)
70 > for val in op.reply.capabilities[cap]:
70 > for val in op.reply.capabilities[cap]:
71 > op.ui.write('debugreply: %r\n' % val)
71 > op.ui.write('debugreply: %r\n' % val)
72 >
72 >
73 > @command('bundle2',
73 > @command('bundle2',
74 > [('', 'param', [], 'stream level parameter'),
74 > [('', 'param', [], 'stream level parameter'),
75 > ('', 'unknown', False, 'include an unknown mandatory part in the bundle'),
75 > ('', 'unknown', False, 'include an unknown mandatory part in the bundle'),
76 > ('', 'unknownparams', False, 'include an unknown part parameters in the bundle'),
76 > ('', 'unknownparams', False, 'include an unknown part parameters in the bundle'),
77 > ('', 'parts', False, 'include some arbitrary parts to the bundle'),
77 > ('', 'parts', False, 'include some arbitrary parts to the bundle'),
78 > ('', 'reply', False, 'produce a reply bundle'),
78 > ('', 'reply', False, 'produce a reply bundle'),
79 > ('', 'pushrace', False, 'includes a check:head part with unknown nodes'),
79 > ('', 'pushrace', False, 'includes a check:head part with unknown nodes'),
80 > ('', 'genraise', False, 'includes a part that raise an exception during generation'),
80 > ('', 'genraise', False, 'includes a part that raise an exception during generation'),
81 > ('', 'timeout', False, 'emulate a timeout during bundle generation'),
81 > ('', 'timeout', False, 'emulate a timeout during bundle generation'),
82 > ('r', 'rev', [], 'includes those changeset in the bundle'),
82 > ('r', 'rev', [], 'includes those changeset in the bundle'),
83 > ('', 'compress', '', 'compress the stream'),],
83 > ('', 'compress', '', 'compress the stream'),],
84 > '[OUTPUTFILE]')
84 > '[OUTPUTFILE]')
85 > def cmdbundle2(ui, repo, path=None, **opts):
85 > def cmdbundle2(ui, repo, path=None, **opts):
86 > """write a bundle2 container on standard output"""
86 > """write a bundle2 container on standard output"""
87 > bundler = bundle2.bundle20(ui)
87 > bundler = bundle2.bundle20(ui)
88 > for p in opts['param']:
88 > for p in opts['param']:
89 > p = p.split('=', 1)
89 > p = p.split('=', 1)
90 > try:
90 > try:
91 > bundler.addparam(*p)
91 > bundler.addparam(*p)
92 > except ValueError, exc:
92 > except ValueError, exc:
93 > raise error.Abort('%s' % exc)
93 > raise error.Abort('%s' % exc)
94 >
94 >
95 > if opts['compress']:
95 > if opts['compress']:
96 > bundler.setcompression(opts['compress'])
96 > bundler.setcompression(opts['compress'])
97 >
97 >
98 > if opts['reply']:
98 > if opts['reply']:
99 > capsstring = 'ping-pong\nelephants=babar,celeste\ncity%3D%21=celeste%2Cville'
99 > capsstring = 'ping-pong\nelephants=babar,celeste\ncity%3D%21=celeste%2Cville'
100 > bundler.newpart('replycaps', data=capsstring)
100 > bundler.newpart('replycaps', data=capsstring)
101 >
101 >
102 > if opts['pushrace']:
102 > if opts['pushrace']:
103 > # also serve to test the assignement of data outside of init
103 > # also serve to test the assignement of data outside of init
104 > part = bundler.newpart('check:heads')
104 > part = bundler.newpart('check:heads')
105 > part.data = '01234567890123456789'
105 > part.data = '01234567890123456789'
106 >
106 >
107 > revs = opts['rev']
107 > revs = opts['rev']
108 > if 'rev' in opts:
108 > if 'rev' in opts:
109 > revs = scmutil.revrange(repo, opts['rev'])
109 > revs = scmutil.revrange(repo, opts['rev'])
110 > if revs:
110 > if revs:
111 > # very crude version of a changegroup part creation
111 > # very crude version of a changegroup part creation
112 > bundled = repo.revs('%ld::%ld', revs, revs)
112 > bundled = repo.revs('%ld::%ld', revs, revs)
113 > headmissing = [c.node() for c in repo.set('heads(%ld)', revs)]
113 > headmissing = [c.node() for c in repo.set('heads(%ld)', revs)]
114 > headcommon = [c.node() for c in repo.set('parents(%ld) - %ld', revs, revs)]
114 > headcommon = [c.node() for c in repo.set('parents(%ld) - %ld', revs, revs)]
115 > outgoing = discovery.outgoing(repo.changelog, headcommon, headmissing)
115 > outgoing = discovery.outgoing(repo.changelog, headcommon, headmissing)
116 > cg = changegroup.getlocalchangegroup(repo, 'test:bundle2', outgoing, None)
116 > cg = changegroup.getlocalchangegroup(repo, 'test:bundle2', outgoing, None)
117 > bundler.newpart('changegroup', data=cg.getchunks(),
117 > bundler.newpart('changegroup', data=cg.getchunks(),
118 > mandatory=False)
118 > mandatory=False)
119 >
119 >
120 > if opts['parts']:
120 > if opts['parts']:
121 > bundler.newpart('test:empty', mandatory=False)
121 > bundler.newpart('test:empty', mandatory=False)
122 > # add a second one to make sure we handle multiple parts
122 > # add a second one to make sure we handle multiple parts
123 > bundler.newpart('test:empty', mandatory=False)
123 > bundler.newpart('test:empty', mandatory=False)
124 > bundler.newpart('test:song', data=ELEPHANTSSONG, mandatory=False)
124 > bundler.newpart('test:song', data=ELEPHANTSSONG, mandatory=False)
125 > bundler.newpart('test:debugreply', mandatory=False)
125 > bundler.newpart('test:debugreply', mandatory=False)
126 > mathpart = bundler.newpart('test:math')
126 > mathpart = bundler.newpart('test:math')
127 > mathpart.addparam('pi', '3.14')
127 > mathpart.addparam('pi', '3.14')
128 > mathpart.addparam('e', '2.72')
128 > mathpart.addparam('e', '2.72')
129 > mathpart.addparam('cooking', 'raw', mandatory=False)
129 > mathpart.addparam('cooking', 'raw', mandatory=False)
130 > mathpart.data = '42'
130 > mathpart.data = '42'
131 > mathpart.mandatory = False
131 > mathpart.mandatory = False
132 > # advisory known part with unknown mandatory param
132 > # advisory known part with unknown mandatory param
133 > bundler.newpart('test:song', [('randomparam','')], mandatory=False)
133 > bundler.newpart('test:song', [('randomparam','')], mandatory=False)
134 > if opts['unknown']:
134 > if opts['unknown']:
135 > bundler.newpart('test:unknown', data='some random content')
135 > bundler.newpart('test:unknown', data='some random content')
136 > if opts['unknownparams']:
136 > if opts['unknownparams']:
137 > bundler.newpart('test:song', [('randomparams', '')])
137 > bundler.newpart('test:song', [('randomparams', '')])
138 > if opts['parts']:
138 > if opts['parts']:
139 > bundler.newpart('test:ping', mandatory=False)
139 > bundler.newpart('test:ping', mandatory=False)
140 > if opts['genraise']:
140 > if opts['genraise']:
141 > def genraise():
141 > def genraise():
142 > yield 'first line\n'
142 > yield 'first line\n'
143 > raise RuntimeError('Someone set up us the bomb!')
143 > raise RuntimeError('Someone set up us the bomb!')
144 > bundler.newpart('output', data=genraise(), mandatory=False)
144 > bundler.newpart('output', data=genraise(), mandatory=False)
145 >
145 >
146 > if path is None:
146 > if path is None:
147 > file = sys.stdout
147 > file = sys.stdout
148 > else:
148 > else:
149 > file = open(path, 'wb')
149 > file = open(path, 'wb')
150 >
150 >
151 > if opts['timeout']:
151 > if opts['timeout']:
152 > bundler.newpart('test:song', data=ELEPHANTSSONG, mandatory=False)
152 > bundler.newpart('test:song', data=ELEPHANTSSONG, mandatory=False)
153 > for idx, junk in enumerate(bundler.getchunks()):
153 > for idx, junk in enumerate(bundler.getchunks()):
154 > ui.write('%d chunk\n' % idx)
154 > ui.write('%d chunk\n' % idx)
155 > if idx > 4:
155 > if idx > 4:
156 > # This throws a GeneratorExit inside the generator, which
156 > # This throws a GeneratorExit inside the generator, which
157 > # can cause problems if the exception-recovery code is
157 > # can cause problems if the exception-recovery code is
158 > # too zealous. It's important for this test that the break
158 > # too zealous. It's important for this test that the break
159 > # occur while we're in the middle of a part.
159 > # occur while we're in the middle of a part.
160 > break
160 > break
161 > gc.collect()
161 > gc.collect()
162 > ui.write('fake timeout complete.\n')
162 > ui.write('fake timeout complete.\n')
163 > return
163 > return
164 > try:
164 > try:
165 > for chunk in bundler.getchunks():
165 > for chunk in bundler.getchunks():
166 > file.write(chunk)
166 > file.write(chunk)
167 > except RuntimeError, exc:
167 > except RuntimeError, exc:
168 > raise error.Abort(exc)
168 > raise error.Abort(exc)
169 > finally:
170 > file.flush()
169 >
171 >
170 > @command('unbundle2', [], '')
172 > @command('unbundle2', [], '')
171 > def cmdunbundle2(ui, repo, replypath=None):
173 > def cmdunbundle2(ui, repo, replypath=None):
172 > """process a bundle2 stream from stdin on the current repo"""
174 > """process a bundle2 stream from stdin on the current repo"""
173 > try:
175 > try:
174 > tr = None
176 > tr = None
175 > lock = repo.lock()
177 > lock = repo.lock()
176 > tr = repo.transaction('processbundle')
178 > tr = repo.transaction('processbundle')
177 > try:
179 > try:
178 > unbundler = bundle2.getunbundler(ui, sys.stdin)
180 > unbundler = bundle2.getunbundler(ui, sys.stdin)
179 > op = bundle2.processbundle(repo, unbundler, lambda: tr)
181 > op = bundle2.processbundle(repo, unbundler, lambda: tr)
180 > tr.close()
182 > tr.close()
181 > except error.BundleValueError, exc:
183 > except error.BundleValueError, exc:
182 > raise error.Abort('missing support for %s' % exc)
184 > raise error.Abort('missing support for %s' % exc)
183 > except error.PushRaced, exc:
185 > except error.PushRaced, exc:
184 > raise error.Abort('push race: %s' % exc)
186 > raise error.Abort('push race: %s' % exc)
185 > finally:
187 > finally:
186 > if tr is not None:
188 > if tr is not None:
187 > tr.release()
189 > tr.release()
188 > lock.release()
190 > lock.release()
189 > remains = sys.stdin.read()
191 > remains = sys.stdin.read()
190 > ui.write('%i unread bytes\n' % len(remains))
192 > ui.write('%i unread bytes\n' % len(remains))
191 > if op.records['song']:
193 > if op.records['song']:
192 > totalverses = sum(r['verses'] for r in op.records['song'])
194 > totalverses = sum(r['verses'] for r in op.records['song'])
193 > ui.write('%i total verses sung\n' % totalverses)
195 > ui.write('%i total verses sung\n' % totalverses)
194 > for rec in op.records['changegroup']:
196 > for rec in op.records['changegroup']:
195 > ui.write('addchangegroup return: %i\n' % rec['return'])
197 > ui.write('addchangegroup return: %i\n' % rec['return'])
196 > if op.reply is not None and replypath is not None:
198 > if op.reply is not None and replypath is not None:
197 > file = open(replypath, 'wb')
199 > with open(replypath, 'wb') as file:
198 > for chunk in op.reply.getchunks():
200 > for chunk in op.reply.getchunks():
199 > file.write(chunk)
201 > file.write(chunk)
200 >
202 >
201 > @command('statbundle2', [], '')
203 > @command('statbundle2', [], '')
202 > def cmdstatbundle2(ui, repo):
204 > def cmdstatbundle2(ui, repo):
203 > """print statistic on the bundle2 container read from stdin"""
205 > """print statistic on the bundle2 container read from stdin"""
204 > unbundler = bundle2.getunbundler(ui, sys.stdin)
206 > unbundler = bundle2.getunbundler(ui, sys.stdin)
205 > try:
207 > try:
206 > params = unbundler.params
208 > params = unbundler.params
207 > except error.BundleValueError, exc:
209 > except error.BundleValueError, exc:
208 > raise error.Abort('unknown parameters: %s' % exc)
210 > raise error.Abort('unknown parameters: %s' % exc)
209 > ui.write('options count: %i\n' % len(params))
211 > ui.write('options count: %i\n' % len(params))
210 > for key in sorted(params):
212 > for key in sorted(params):
211 > ui.write('- %s\n' % key)
213 > ui.write('- %s\n' % key)
212 > value = params[key]
214 > value = params[key]
213 > if value is not None:
215 > if value is not None:
214 > ui.write(' %s\n' % value)
216 > ui.write(' %s\n' % value)
215 > count = 0
217 > count = 0
216 > for p in unbundler.iterparts():
218 > for p in unbundler.iterparts():
217 > count += 1
219 > count += 1
218 > ui.write(' :%s:\n' % p.type)
220 > ui.write(' :%s:\n' % p.type)
219 > ui.write(' mandatory: %i\n' % len(p.mandatoryparams))
221 > ui.write(' mandatory: %i\n' % len(p.mandatoryparams))
220 > ui.write(' advisory: %i\n' % len(p.advisoryparams))
222 > ui.write(' advisory: %i\n' % len(p.advisoryparams))
221 > ui.write(' payload: %i bytes\n' % len(p.read()))
223 > ui.write(' payload: %i bytes\n' % len(p.read()))
222 > ui.write('parts count: %i\n' % count)
224 > ui.write('parts count: %i\n' % count)
223 > EOF
225 > EOF
224 $ cat >> $HGRCPATH << EOF
226 $ cat >> $HGRCPATH << EOF
225 > [extensions]
227 > [extensions]
226 > bundle2=$TESTTMP/bundle2.py
228 > bundle2=$TESTTMP/bundle2.py
227 > [experimental]
229 > [experimental]
228 > bundle2-exp=True
230 > bundle2-exp=True
229 > evolution=createmarkers
231 > evolution=createmarkers
230 > [ui]
232 > [ui]
231 > ssh=python "$TESTDIR/dummyssh"
233 > ssh=python "$TESTDIR/dummyssh"
232 > logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline}
234 > logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline}
233 > [web]
235 > [web]
234 > push_ssl = false
236 > push_ssl = false
235 > allow_push = *
237 > allow_push = *
236 > [phases]
238 > [phases]
237 > publish=False
239 > publish=False
238 > EOF
240 > EOF
239
241
240 The extension requires a repo (currently unused)
242 The extension requires a repo (currently unused)
241
243
242 $ hg init main
244 $ hg init main
243 $ cd main
245 $ cd main
244 $ touch a
246 $ touch a
245 $ hg add a
247 $ hg add a
246 $ hg commit -m 'a'
248 $ hg commit -m 'a'
247
249
248
250
249 Empty bundle
251 Empty bundle
250 =================
252 =================
251
253
252 - no option
254 - no option
253 - no parts
255 - no parts
254
256
255 Test bundling
257 Test bundling
256
258
257 $ hg bundle2 | f --hexdump
259 $ hg bundle2 | f --hexdump
258
260
259 0000: 48 47 32 30 00 00 00 00 00 00 00 00 |HG20........|
261 0000: 48 47 32 30 00 00 00 00 00 00 00 00 |HG20........|
260
262
261 Test timeouts during bundling
263 Test timeouts during bundling
262 $ hg bundle2 --timeout --debug --config devel.bundle2.debug=yes
264 $ hg bundle2 --timeout --debug --config devel.bundle2.debug=yes
263 bundle2-output-bundle: "HG20", 1 parts total
265 bundle2-output-bundle: "HG20", 1 parts total
264 bundle2-output: start emission of HG20 stream
266 bundle2-output: start emission of HG20 stream
265 0 chunk
267 0 chunk
266 bundle2-output: bundle parameter:
268 bundle2-output: bundle parameter:
267 1 chunk
269 1 chunk
268 bundle2-output: start of parts
270 bundle2-output: start of parts
269 bundle2-output: bundle part: "test:song"
271 bundle2-output: bundle part: "test:song"
270 bundle2-output-part: "test:song" (advisory) 178 bytes payload
272 bundle2-output-part: "test:song" (advisory) 178 bytes payload
271 bundle2-output: part 0: "test:song"
273 bundle2-output: part 0: "test:song"
272 bundle2-output: header chunk size: 16
274 bundle2-output: header chunk size: 16
273 2 chunk
275 2 chunk
274 3 chunk
276 3 chunk
275 bundle2-output: payload chunk size: 178
277 bundle2-output: payload chunk size: 178
276 4 chunk
278 4 chunk
277 5 chunk
279 5 chunk
278 bundle2-generatorexit
280 bundle2-generatorexit
279 fake timeout complete.
281 fake timeout complete.
280
282
281 Test unbundling
283 Test unbundling
282
284
283 $ hg bundle2 | hg statbundle2
285 $ hg bundle2 | hg statbundle2
284 options count: 0
286 options count: 0
285 parts count: 0
287 parts count: 0
286
288
287 Test old style bundle are detected and refused
289 Test old style bundle are detected and refused
288
290
289 $ hg bundle --all --type v1 ../bundle.hg
291 $ hg bundle --all --type v1 ../bundle.hg
290 1 changesets found
292 1 changesets found
291 $ hg statbundle2 < ../bundle.hg
293 $ hg statbundle2 < ../bundle.hg
292 abort: unknown bundle version 10
294 abort: unknown bundle version 10
293 [255]
295 [255]
294
296
295 Test parameters
297 Test parameters
296 =================
298 =================
297
299
298 - some options
300 - some options
299 - no parts
301 - no parts
300
302
301 advisory parameters, no value
303 advisory parameters, no value
302 -------------------------------
304 -------------------------------
303
305
304 Simplest possible parameters form
306 Simplest possible parameters form
305
307
306 Test generation simple option
308 Test generation simple option
307
309
308 $ hg bundle2 --param 'caution' | f --hexdump
310 $ hg bundle2 --param 'caution' | f --hexdump
309
311
310 0000: 48 47 32 30 00 00 00 07 63 61 75 74 69 6f 6e 00 |HG20....caution.|
312 0000: 48 47 32 30 00 00 00 07 63 61 75 74 69 6f 6e 00 |HG20....caution.|
311 0010: 00 00 00 |...|
313 0010: 00 00 00 |...|
312
314
313 Test unbundling
315 Test unbundling
314
316
315 $ hg bundle2 --param 'caution' | hg statbundle2
317 $ hg bundle2 --param 'caution' | hg statbundle2
316 options count: 1
318 options count: 1
317 - caution
319 - caution
318 parts count: 0
320 parts count: 0
319
321
320 Test generation multiple option
322 Test generation multiple option
321
323
322 $ hg bundle2 --param 'caution' --param 'meal' | f --hexdump
324 $ hg bundle2 --param 'caution' --param 'meal' | f --hexdump
323
325
324 0000: 48 47 32 30 00 00 00 0c 63 61 75 74 69 6f 6e 20 |HG20....caution |
326 0000: 48 47 32 30 00 00 00 0c 63 61 75 74 69 6f 6e 20 |HG20....caution |
325 0010: 6d 65 61 6c 00 00 00 00 |meal....|
327 0010: 6d 65 61 6c 00 00 00 00 |meal....|
326
328
327 Test unbundling
329 Test unbundling
328
330
329 $ hg bundle2 --param 'caution' --param 'meal' | hg statbundle2
331 $ hg bundle2 --param 'caution' --param 'meal' | hg statbundle2
330 options count: 2
332 options count: 2
331 - caution
333 - caution
332 - meal
334 - meal
333 parts count: 0
335 parts count: 0
334
336
335 advisory parameters, with value
337 advisory parameters, with value
336 -------------------------------
338 -------------------------------
337
339
338 Test generation
340 Test generation
339
341
340 $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | f --hexdump
342 $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | f --hexdump
341
343
342 0000: 48 47 32 30 00 00 00 1c 63 61 75 74 69 6f 6e 20 |HG20....caution |
344 0000: 48 47 32 30 00 00 00 1c 63 61 75 74 69 6f 6e 20 |HG20....caution |
343 0010: 6d 65 61 6c 3d 76 65 67 61 6e 20 65 6c 65 70 68 |meal=vegan eleph|
345 0010: 6d 65 61 6c 3d 76 65 67 61 6e 20 65 6c 65 70 68 |meal=vegan eleph|
344 0020: 61 6e 74 73 00 00 00 00 |ants....|
346 0020: 61 6e 74 73 00 00 00 00 |ants....|
345
347
346 Test unbundling
348 Test unbundling
347
349
348 $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | hg statbundle2
350 $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | hg statbundle2
349 options count: 3
351 options count: 3
350 - caution
352 - caution
351 - elephants
353 - elephants
352 - meal
354 - meal
353 vegan
355 vegan
354 parts count: 0
356 parts count: 0
355
357
356 parameter with special char in value
358 parameter with special char in value
357 ---------------------------------------------------
359 ---------------------------------------------------
358
360
359 Test generation
361 Test generation
360
362
361 $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | f --hexdump
363 $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | f --hexdump
362
364
363 0000: 48 47 32 30 00 00 00 29 65 25 37 43 25 32 31 25 |HG20...)e%7C%21%|
365 0000: 48 47 32 30 00 00 00 29 65 25 37 43 25 32 31 25 |HG20...)e%7C%21%|
364 0010: 32 30 37 2f 3d 62 61 62 61 72 25 32 35 25 32 33 |207/=babar%25%23|
366 0010: 32 30 37 2f 3d 62 61 62 61 72 25 32 35 25 32 33 |207/=babar%25%23|
365 0020: 25 33 44 25 33 44 74 75 74 75 20 73 69 6d 70 6c |%3D%3Dtutu simpl|
367 0020: 25 33 44 25 33 44 74 75 74 75 20 73 69 6d 70 6c |%3D%3Dtutu simpl|
366 0030: 65 00 00 00 00 |e....|
368 0030: 65 00 00 00 00 |e....|
367
369
368 Test unbundling
370 Test unbundling
369
371
370 $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg statbundle2
372 $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg statbundle2
371 options count: 2
373 options count: 2
372 - e|! 7/
374 - e|! 7/
373 babar%#==tutu
375 babar%#==tutu
374 - simple
376 - simple
375 parts count: 0
377 parts count: 0
376
378
377 Test unknown mandatory option
379 Test unknown mandatory option
378 ---------------------------------------------------
380 ---------------------------------------------------
379
381
380 $ hg bundle2 --param 'Gravity' | hg statbundle2
382 $ hg bundle2 --param 'Gravity' | hg statbundle2
381 abort: unknown parameters: Stream Parameter - Gravity
383 abort: unknown parameters: Stream Parameter - Gravity
382 [255]
384 [255]
383
385
384 Test debug output
386 Test debug output
385 ---------------------------------------------------
387 ---------------------------------------------------
386
388
387 bundling debug
389 bundling debug
388
390
389 $ hg bundle2 --debug --param 'e|! 7/=babar%#==tutu' --param simple ../out.hg2 --config progress.debug=true --config devel.bundle2.debug=true
391 $ hg bundle2 --debug --param 'e|! 7/=babar%#==tutu' --param simple ../out.hg2 --config progress.debug=true --config devel.bundle2.debug=true
390 bundle2-output-bundle: "HG20", (2 params) 0 parts total
392 bundle2-output-bundle: "HG20", (2 params) 0 parts total
391 bundle2-output: start emission of HG20 stream
393 bundle2-output: start emission of HG20 stream
392 bundle2-output: bundle parameter: e%7C%21%207/=babar%25%23%3D%3Dtutu simple
394 bundle2-output: bundle parameter: e%7C%21%207/=babar%25%23%3D%3Dtutu simple
393 bundle2-output: start of parts
395 bundle2-output: start of parts
394 bundle2-output: end of bundle
396 bundle2-output: end of bundle
395
397
396 file content is ok
398 file content is ok
397
399
398 $ f --hexdump ../out.hg2
400 $ f --hexdump ../out.hg2
399 ../out.hg2:
401 ../out.hg2:
400 0000: 48 47 32 30 00 00 00 29 65 25 37 43 25 32 31 25 |HG20...)e%7C%21%|
402 0000: 48 47 32 30 00 00 00 29 65 25 37 43 25 32 31 25 |HG20...)e%7C%21%|
401 0010: 32 30 37 2f 3d 62 61 62 61 72 25 32 35 25 32 33 |207/=babar%25%23|
403 0010: 32 30 37 2f 3d 62 61 62 61 72 25 32 35 25 32 33 |207/=babar%25%23|
402 0020: 25 33 44 25 33 44 74 75 74 75 20 73 69 6d 70 6c |%3D%3Dtutu simpl|
404 0020: 25 33 44 25 33 44 74 75 74 75 20 73 69 6d 70 6c |%3D%3Dtutu simpl|
403 0030: 65 00 00 00 00 |e....|
405 0030: 65 00 00 00 00 |e....|
404
406
405 unbundling debug
407 unbundling debug
406
408
407 $ hg statbundle2 --debug --config progress.debug=true --config devel.bundle2.debug=true < ../out.hg2
409 $ hg statbundle2 --debug --config progress.debug=true --config devel.bundle2.debug=true < ../out.hg2
408 bundle2-input: start processing of HG20 stream
410 bundle2-input: start processing of HG20 stream
409 bundle2-input: reading bundle2 stream parameters
411 bundle2-input: reading bundle2 stream parameters
410 bundle2-input: ignoring unknown parameter 'e|! 7/'
412 bundle2-input: ignoring unknown parameter 'e|! 7/'
411 bundle2-input: ignoring unknown parameter 'simple'
413 bundle2-input: ignoring unknown parameter 'simple'
412 options count: 2
414 options count: 2
413 - e|! 7/
415 - e|! 7/
414 babar%#==tutu
416 babar%#==tutu
415 - simple
417 - simple
416 bundle2-input: start extraction of bundle2 parts
418 bundle2-input: start extraction of bundle2 parts
417 bundle2-input: part header size: 0
419 bundle2-input: part header size: 0
418 bundle2-input: end of bundle2 stream
420 bundle2-input: end of bundle2 stream
419 parts count: 0
421 parts count: 0
420
422
421
423
422 Test buggy input
424 Test buggy input
423 ---------------------------------------------------
425 ---------------------------------------------------
424
426
425 empty parameter name
427 empty parameter name
426
428
427 $ hg bundle2 --param '' --quiet
429 $ hg bundle2 --param '' --quiet
428 abort: empty parameter name
430 abort: empty parameter name
429 [255]
431 [255]
430
432
431 bad parameter name
433 bad parameter name
432
434
433 $ hg bundle2 --param 42babar
435 $ hg bundle2 --param 42babar
434 abort: non letter first character: '42babar'
436 abort: non letter first character: '42babar'
435 [255]
437 [255]
436
438
437
439
438 Test part
440 Test part
439 =================
441 =================
440
442
441 $ hg bundle2 --parts ../parts.hg2 --debug --config progress.debug=true --config devel.bundle2.debug=true
443 $ hg bundle2 --parts ../parts.hg2 --debug --config progress.debug=true --config devel.bundle2.debug=true
442 bundle2-output-bundle: "HG20", 7 parts total
444 bundle2-output-bundle: "HG20", 7 parts total
443 bundle2-output: start emission of HG20 stream
445 bundle2-output: start emission of HG20 stream
444 bundle2-output: bundle parameter:
446 bundle2-output: bundle parameter:
445 bundle2-output: start of parts
447 bundle2-output: start of parts
446 bundle2-output: bundle part: "test:empty"
448 bundle2-output: bundle part: "test:empty"
447 bundle2-output-part: "test:empty" (advisory) empty payload
449 bundle2-output-part: "test:empty" (advisory) empty payload
448 bundle2-output: part 0: "test:empty"
450 bundle2-output: part 0: "test:empty"
449 bundle2-output: header chunk size: 17
451 bundle2-output: header chunk size: 17
450 bundle2-output: closing payload chunk
452 bundle2-output: closing payload chunk
451 bundle2-output: bundle part: "test:empty"
453 bundle2-output: bundle part: "test:empty"
452 bundle2-output-part: "test:empty" (advisory) empty payload
454 bundle2-output-part: "test:empty" (advisory) empty payload
453 bundle2-output: part 1: "test:empty"
455 bundle2-output: part 1: "test:empty"
454 bundle2-output: header chunk size: 17
456 bundle2-output: header chunk size: 17
455 bundle2-output: closing payload chunk
457 bundle2-output: closing payload chunk
456 bundle2-output: bundle part: "test:song"
458 bundle2-output: bundle part: "test:song"
457 bundle2-output-part: "test:song" (advisory) 178 bytes payload
459 bundle2-output-part: "test:song" (advisory) 178 bytes payload
458 bundle2-output: part 2: "test:song"
460 bundle2-output: part 2: "test:song"
459 bundle2-output: header chunk size: 16
461 bundle2-output: header chunk size: 16
460 bundle2-output: payload chunk size: 178
462 bundle2-output: payload chunk size: 178
461 bundle2-output: closing payload chunk
463 bundle2-output: closing payload chunk
462 bundle2-output: bundle part: "test:debugreply"
464 bundle2-output: bundle part: "test:debugreply"
463 bundle2-output-part: "test:debugreply" (advisory) empty payload
465 bundle2-output-part: "test:debugreply" (advisory) empty payload
464 bundle2-output: part 3: "test:debugreply"
466 bundle2-output: part 3: "test:debugreply"
465 bundle2-output: header chunk size: 22
467 bundle2-output: header chunk size: 22
466 bundle2-output: closing payload chunk
468 bundle2-output: closing payload chunk
467 bundle2-output: bundle part: "test:math"
469 bundle2-output: bundle part: "test:math"
468 bundle2-output-part: "test:math" (advisory) (params: 2 mandatory 2 advisory) 2 bytes payload
470 bundle2-output-part: "test:math" (advisory) (params: 2 mandatory 2 advisory) 2 bytes payload
469 bundle2-output: part 4: "test:math"
471 bundle2-output: part 4: "test:math"
470 bundle2-output: header chunk size: 43
472 bundle2-output: header chunk size: 43
471 bundle2-output: payload chunk size: 2
473 bundle2-output: payload chunk size: 2
472 bundle2-output: closing payload chunk
474 bundle2-output: closing payload chunk
473 bundle2-output: bundle part: "test:song"
475 bundle2-output: bundle part: "test:song"
474 bundle2-output-part: "test:song" (advisory) (params: 1 mandatory) empty payload
476 bundle2-output-part: "test:song" (advisory) (params: 1 mandatory) empty payload
475 bundle2-output: part 5: "test:song"
477 bundle2-output: part 5: "test:song"
476 bundle2-output: header chunk size: 29
478 bundle2-output: header chunk size: 29
477 bundle2-output: closing payload chunk
479 bundle2-output: closing payload chunk
478 bundle2-output: bundle part: "test:ping"
480 bundle2-output: bundle part: "test:ping"
479 bundle2-output-part: "test:ping" (advisory) empty payload
481 bundle2-output-part: "test:ping" (advisory) empty payload
480 bundle2-output: part 6: "test:ping"
482 bundle2-output: part 6: "test:ping"
481 bundle2-output: header chunk size: 16
483 bundle2-output: header chunk size: 16
482 bundle2-output: closing payload chunk
484 bundle2-output: closing payload chunk
483 bundle2-output: end of bundle
485 bundle2-output: end of bundle
484
486
485 $ f --hexdump ../parts.hg2
487 $ f --hexdump ../parts.hg2
486 ../parts.hg2:
488 ../parts.hg2:
487 0000: 48 47 32 30 00 00 00 00 00 00 00 11 0a 74 65 73 |HG20.........tes|
489 0000: 48 47 32 30 00 00 00 00 00 00 00 11 0a 74 65 73 |HG20.........tes|
488 0010: 74 3a 65 6d 70 74 79 00 00 00 00 00 00 00 00 00 |t:empty.........|
490 0010: 74 3a 65 6d 70 74 79 00 00 00 00 00 00 00 00 00 |t:empty.........|
489 0020: 00 00 00 00 11 0a 74 65 73 74 3a 65 6d 70 74 79 |......test:empty|
491 0020: 00 00 00 00 11 0a 74 65 73 74 3a 65 6d 70 74 79 |......test:empty|
490 0030: 00 00 00 01 00 00 00 00 00 00 00 00 00 10 09 74 |...............t|
492 0030: 00 00 00 01 00 00 00 00 00 00 00 00 00 10 09 74 |...............t|
491 0040: 65 73 74 3a 73 6f 6e 67 00 00 00 02 00 00 00 00 |est:song........|
493 0040: 65 73 74 3a 73 6f 6e 67 00 00 00 02 00 00 00 00 |est:song........|
492 0050: 00 b2 50 61 74 61 6c 69 20 44 69 72 61 70 61 74 |..Patali Dirapat|
494 0050: 00 b2 50 61 74 61 6c 69 20 44 69 72 61 70 61 74 |..Patali Dirapat|
493 0060: 61 2c 20 43 72 6f 6d 64 61 20 43 72 6f 6d 64 61 |a, Cromda Cromda|
495 0060: 61 2c 20 43 72 6f 6d 64 61 20 43 72 6f 6d 64 61 |a, Cromda Cromda|
494 0070: 20 52 69 70 61 6c 6f 2c 20 50 61 74 61 20 50 61 | Ripalo, Pata Pa|
496 0070: 20 52 69 70 61 6c 6f 2c 20 50 61 74 61 20 50 61 | Ripalo, Pata Pa|
495 0080: 74 61 2c 20 4b 6f 20 4b 6f 20 4b 6f 0a 42 6f 6b |ta, Ko Ko Ko.Bok|
497 0080: 74 61 2c 20 4b 6f 20 4b 6f 20 4b 6f 0a 42 6f 6b |ta, Ko Ko Ko.Bok|
496 0090: 6f 72 6f 20 44 69 70 6f 75 6c 69 74 6f 2c 20 52 |oro Dipoulito, R|
498 0090: 6f 72 6f 20 44 69 70 6f 75 6c 69 74 6f 2c 20 52 |oro Dipoulito, R|
497 00a0: 6f 6e 64 69 20 52 6f 6e 64 69 20 50 65 70 69 6e |ondi Rondi Pepin|
499 00a0: 6f 6e 64 69 20 52 6f 6e 64 69 20 50 65 70 69 6e |ondi Rondi Pepin|
498 00b0: 6f 2c 20 50 61 74 61 20 50 61 74 61 2c 20 4b 6f |o, Pata Pata, Ko|
500 00b0: 6f 2c 20 50 61 74 61 20 50 61 74 61 2c 20 4b 6f |o, Pata Pata, Ko|
499 00c0: 20 4b 6f 20 4b 6f 0a 45 6d 61 6e 61 20 4b 61 72 | Ko Ko.Emana Kar|
501 00c0: 20 4b 6f 20 4b 6f 0a 45 6d 61 6e 61 20 4b 61 72 | Ko Ko.Emana Kar|
500 00d0: 61 73 73 6f 6c 69 2c 20 4c 6f 75 63 72 61 20 4c |assoli, Loucra L|
502 00d0: 61 73 73 6f 6c 69 2c 20 4c 6f 75 63 72 61 20 4c |assoli, Loucra L|
501 00e0: 6f 75 63 72 61 20 50 6f 6e 70 6f 6e 74 6f 2c 20 |oucra Ponponto, |
503 00e0: 6f 75 63 72 61 20 50 6f 6e 70 6f 6e 74 6f 2c 20 |oucra Ponponto, |
502 00f0: 50 61 74 61 20 50 61 74 61 2c 20 4b 6f 20 4b 6f |Pata Pata, Ko Ko|
504 00f0: 50 61 74 61 20 50 61 74 61 2c 20 4b 6f 20 4b 6f |Pata Pata, Ko Ko|
503 0100: 20 4b 6f 2e 00 00 00 00 00 00 00 16 0f 74 65 73 | Ko..........tes|
505 0100: 20 4b 6f 2e 00 00 00 00 00 00 00 16 0f 74 65 73 | Ko..........tes|
504 0110: 74 3a 64 65 62 75 67 72 65 70 6c 79 00 00 00 03 |t:debugreply....|
506 0110: 74 3a 64 65 62 75 67 72 65 70 6c 79 00 00 00 03 |t:debugreply....|
505 0120: 00 00 00 00 00 00 00 00 00 2b 09 74 65 73 74 3a |.........+.test:|
507 0120: 00 00 00 00 00 00 00 00 00 2b 09 74 65 73 74 3a |.........+.test:|
506 0130: 6d 61 74 68 00 00 00 04 02 01 02 04 01 04 07 03 |math............|
508 0130: 6d 61 74 68 00 00 00 04 02 01 02 04 01 04 07 03 |math............|
507 0140: 70 69 33 2e 31 34 65 32 2e 37 32 63 6f 6f 6b 69 |pi3.14e2.72cooki|
509 0140: 70 69 33 2e 31 34 65 32 2e 37 32 63 6f 6f 6b 69 |pi3.14e2.72cooki|
508 0150: 6e 67 72 61 77 00 00 00 02 34 32 00 00 00 00 00 |ngraw....42.....|
510 0150: 6e 67 72 61 77 00 00 00 02 34 32 00 00 00 00 00 |ngraw....42.....|
509 0160: 00 00 1d 09 74 65 73 74 3a 73 6f 6e 67 00 00 00 |....test:song...|
511 0160: 00 00 1d 09 74 65 73 74 3a 73 6f 6e 67 00 00 00 |....test:song...|
510 0170: 05 01 00 0b 00 72 61 6e 64 6f 6d 70 61 72 61 6d |.....randomparam|
512 0170: 05 01 00 0b 00 72 61 6e 64 6f 6d 70 61 72 61 6d |.....randomparam|
511 0180: 00 00 00 00 00 00 00 10 09 74 65 73 74 3a 70 69 |.........test:pi|
513 0180: 00 00 00 00 00 00 00 10 09 74 65 73 74 3a 70 69 |.........test:pi|
512 0190: 6e 67 00 00 00 06 00 00 00 00 00 00 00 00 00 00 |ng..............|
514 0190: 6e 67 00 00 00 06 00 00 00 00 00 00 00 00 00 00 |ng..............|
513
515
514
516
515 $ hg statbundle2 < ../parts.hg2
517 $ hg statbundle2 < ../parts.hg2
516 options count: 0
518 options count: 0
517 :test:empty:
519 :test:empty:
518 mandatory: 0
520 mandatory: 0
519 advisory: 0
521 advisory: 0
520 payload: 0 bytes
522 payload: 0 bytes
521 :test:empty:
523 :test:empty:
522 mandatory: 0
524 mandatory: 0
523 advisory: 0
525 advisory: 0
524 payload: 0 bytes
526 payload: 0 bytes
525 :test:song:
527 :test:song:
526 mandatory: 0
528 mandatory: 0
527 advisory: 0
529 advisory: 0
528 payload: 178 bytes
530 payload: 178 bytes
529 :test:debugreply:
531 :test:debugreply:
530 mandatory: 0
532 mandatory: 0
531 advisory: 0
533 advisory: 0
532 payload: 0 bytes
534 payload: 0 bytes
533 :test:math:
535 :test:math:
534 mandatory: 2
536 mandatory: 2
535 advisory: 1
537 advisory: 1
536 payload: 2 bytes
538 payload: 2 bytes
537 :test:song:
539 :test:song:
538 mandatory: 1
540 mandatory: 1
539 advisory: 0
541 advisory: 0
540 payload: 0 bytes
542 payload: 0 bytes
541 :test:ping:
543 :test:ping:
542 mandatory: 0
544 mandatory: 0
543 advisory: 0
545 advisory: 0
544 payload: 0 bytes
546 payload: 0 bytes
545 parts count: 7
547 parts count: 7
546
548
547 $ hg statbundle2 --debug --config progress.debug=true --config devel.bundle2.debug=true < ../parts.hg2
549 $ hg statbundle2 --debug --config progress.debug=true --config devel.bundle2.debug=true < ../parts.hg2
548 bundle2-input: start processing of HG20 stream
550 bundle2-input: start processing of HG20 stream
549 bundle2-input: reading bundle2 stream parameters
551 bundle2-input: reading bundle2 stream parameters
550 options count: 0
552 options count: 0
551 bundle2-input: start extraction of bundle2 parts
553 bundle2-input: start extraction of bundle2 parts
552 bundle2-input: part header size: 17
554 bundle2-input: part header size: 17
553 bundle2-input: part type: "test:empty"
555 bundle2-input: part type: "test:empty"
554 bundle2-input: part id: "0"
556 bundle2-input: part id: "0"
555 bundle2-input: part parameters: 0
557 bundle2-input: part parameters: 0
556 :test:empty:
558 :test:empty:
557 mandatory: 0
559 mandatory: 0
558 advisory: 0
560 advisory: 0
559 bundle2-input: payload chunk size: 0
561 bundle2-input: payload chunk size: 0
560 payload: 0 bytes
562 payload: 0 bytes
561 bundle2-input: part header size: 17
563 bundle2-input: part header size: 17
562 bundle2-input: part type: "test:empty"
564 bundle2-input: part type: "test:empty"
563 bundle2-input: part id: "1"
565 bundle2-input: part id: "1"
564 bundle2-input: part parameters: 0
566 bundle2-input: part parameters: 0
565 :test:empty:
567 :test:empty:
566 mandatory: 0
568 mandatory: 0
567 advisory: 0
569 advisory: 0
568 bundle2-input: payload chunk size: 0
570 bundle2-input: payload chunk size: 0
569 payload: 0 bytes
571 payload: 0 bytes
570 bundle2-input: part header size: 16
572 bundle2-input: part header size: 16
571 bundle2-input: part type: "test:song"
573 bundle2-input: part type: "test:song"
572 bundle2-input: part id: "2"
574 bundle2-input: part id: "2"
573 bundle2-input: part parameters: 0
575 bundle2-input: part parameters: 0
574 :test:song:
576 :test:song:
575 mandatory: 0
577 mandatory: 0
576 advisory: 0
578 advisory: 0
577 bundle2-input: payload chunk size: 178
579 bundle2-input: payload chunk size: 178
578 bundle2-input: payload chunk size: 0
580 bundle2-input: payload chunk size: 0
579 bundle2-input-part: total payload size 178
581 bundle2-input-part: total payload size 178
580 payload: 178 bytes
582 payload: 178 bytes
581 bundle2-input: part header size: 22
583 bundle2-input: part header size: 22
582 bundle2-input: part type: "test:debugreply"
584 bundle2-input: part type: "test:debugreply"
583 bundle2-input: part id: "3"
585 bundle2-input: part id: "3"
584 bundle2-input: part parameters: 0
586 bundle2-input: part parameters: 0
585 :test:debugreply:
587 :test:debugreply:
586 mandatory: 0
588 mandatory: 0
587 advisory: 0
589 advisory: 0
588 bundle2-input: payload chunk size: 0
590 bundle2-input: payload chunk size: 0
589 payload: 0 bytes
591 payload: 0 bytes
590 bundle2-input: part header size: 43
592 bundle2-input: part header size: 43
591 bundle2-input: part type: "test:math"
593 bundle2-input: part type: "test:math"
592 bundle2-input: part id: "4"
594 bundle2-input: part id: "4"
593 bundle2-input: part parameters: 3
595 bundle2-input: part parameters: 3
594 :test:math:
596 :test:math:
595 mandatory: 2
597 mandatory: 2
596 advisory: 1
598 advisory: 1
597 bundle2-input: payload chunk size: 2
599 bundle2-input: payload chunk size: 2
598 bundle2-input: payload chunk size: 0
600 bundle2-input: payload chunk size: 0
599 bundle2-input-part: total payload size 2
601 bundle2-input-part: total payload size 2
600 payload: 2 bytes
602 payload: 2 bytes
601 bundle2-input: part header size: 29
603 bundle2-input: part header size: 29
602 bundle2-input: part type: "test:song"
604 bundle2-input: part type: "test:song"
603 bundle2-input: part id: "5"
605 bundle2-input: part id: "5"
604 bundle2-input: part parameters: 1
606 bundle2-input: part parameters: 1
605 :test:song:
607 :test:song:
606 mandatory: 1
608 mandatory: 1
607 advisory: 0
609 advisory: 0
608 bundle2-input: payload chunk size: 0
610 bundle2-input: payload chunk size: 0
609 payload: 0 bytes
611 payload: 0 bytes
610 bundle2-input: part header size: 16
612 bundle2-input: part header size: 16
611 bundle2-input: part type: "test:ping"
613 bundle2-input: part type: "test:ping"
612 bundle2-input: part id: "6"
614 bundle2-input: part id: "6"
613 bundle2-input: part parameters: 0
615 bundle2-input: part parameters: 0
614 :test:ping:
616 :test:ping:
615 mandatory: 0
617 mandatory: 0
616 advisory: 0
618 advisory: 0
617 bundle2-input: payload chunk size: 0
619 bundle2-input: payload chunk size: 0
618 payload: 0 bytes
620 payload: 0 bytes
619 bundle2-input: part header size: 0
621 bundle2-input: part header size: 0
620 bundle2-input: end of bundle2 stream
622 bundle2-input: end of bundle2 stream
621 parts count: 7
623 parts count: 7
622
624
623 Test actual unbundling of test part
625 Test actual unbundling of test part
624 =======================================
626 =======================================
625
627
626 Process the bundle
628 Process the bundle
627
629
628 $ hg unbundle2 --debug --config progress.debug=true --config devel.bundle2.debug=true < ../parts.hg2
630 $ hg unbundle2 --debug --config progress.debug=true --config devel.bundle2.debug=true < ../parts.hg2
629 bundle2-input: start processing of HG20 stream
631 bundle2-input: start processing of HG20 stream
630 bundle2-input: reading bundle2 stream parameters
632 bundle2-input: reading bundle2 stream parameters
631 bundle2-input-bundle: with-transaction
633 bundle2-input-bundle: with-transaction
632 bundle2-input: start extraction of bundle2 parts
634 bundle2-input: start extraction of bundle2 parts
633 bundle2-input: part header size: 17
635 bundle2-input: part header size: 17
634 bundle2-input: part type: "test:empty"
636 bundle2-input: part type: "test:empty"
635 bundle2-input: part id: "0"
637 bundle2-input: part id: "0"
636 bundle2-input: part parameters: 0
638 bundle2-input: part parameters: 0
637 bundle2-input: ignoring unsupported advisory part test:empty
639 bundle2-input: ignoring unsupported advisory part test:empty
638 bundle2-input-part: "test:empty" (advisory) unsupported-type
640 bundle2-input-part: "test:empty" (advisory) unsupported-type
639 bundle2-input: payload chunk size: 0
641 bundle2-input: payload chunk size: 0
640 bundle2-input: part header size: 17
642 bundle2-input: part header size: 17
641 bundle2-input: part type: "test:empty"
643 bundle2-input: part type: "test:empty"
642 bundle2-input: part id: "1"
644 bundle2-input: part id: "1"
643 bundle2-input: part parameters: 0
645 bundle2-input: part parameters: 0
644 bundle2-input: ignoring unsupported advisory part test:empty
646 bundle2-input: ignoring unsupported advisory part test:empty
645 bundle2-input-part: "test:empty" (advisory) unsupported-type
647 bundle2-input-part: "test:empty" (advisory) unsupported-type
646 bundle2-input: payload chunk size: 0
648 bundle2-input: payload chunk size: 0
647 bundle2-input: part header size: 16
649 bundle2-input: part header size: 16
648 bundle2-input: part type: "test:song"
650 bundle2-input: part type: "test:song"
649 bundle2-input: part id: "2"
651 bundle2-input: part id: "2"
650 bundle2-input: part parameters: 0
652 bundle2-input: part parameters: 0
651 bundle2-input: found a handler for part 'test:song'
653 bundle2-input: found a handler for part 'test:song'
652 bundle2-input-part: "test:song" (advisory) supported
654 bundle2-input-part: "test:song" (advisory) supported
653 The choir starts singing:
655 The choir starts singing:
654 bundle2-input: payload chunk size: 178
656 bundle2-input: payload chunk size: 178
655 bundle2-input: payload chunk size: 0
657 bundle2-input: payload chunk size: 0
656 bundle2-input-part: total payload size 178
658 bundle2-input-part: total payload size 178
657 Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
659 Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
658 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
660 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
659 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
661 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
660 bundle2-input: part header size: 22
662 bundle2-input: part header size: 22
661 bundle2-input: part type: "test:debugreply"
663 bundle2-input: part type: "test:debugreply"
662 bundle2-input: part id: "3"
664 bundle2-input: part id: "3"
663 bundle2-input: part parameters: 0
665 bundle2-input: part parameters: 0
664 bundle2-input: found a handler for part 'test:debugreply'
666 bundle2-input: found a handler for part 'test:debugreply'
665 bundle2-input-part: "test:debugreply" (advisory) supported
667 bundle2-input-part: "test:debugreply" (advisory) supported
666 debugreply: no reply
668 debugreply: no reply
667 bundle2-input: payload chunk size: 0
669 bundle2-input: payload chunk size: 0
668 bundle2-input: part header size: 43
670 bundle2-input: part header size: 43
669 bundle2-input: part type: "test:math"
671 bundle2-input: part type: "test:math"
670 bundle2-input: part id: "4"
672 bundle2-input: part id: "4"
671 bundle2-input: part parameters: 3
673 bundle2-input: part parameters: 3
672 bundle2-input: ignoring unsupported advisory part test:math
674 bundle2-input: ignoring unsupported advisory part test:math
673 bundle2-input-part: "test:math" (advisory) (params: 2 mandatory 2 advisory) unsupported-type
675 bundle2-input-part: "test:math" (advisory) (params: 2 mandatory 2 advisory) unsupported-type
674 bundle2-input: payload chunk size: 2
676 bundle2-input: payload chunk size: 2
675 bundle2-input: payload chunk size: 0
677 bundle2-input: payload chunk size: 0
676 bundle2-input-part: total payload size 2
678 bundle2-input-part: total payload size 2
677 bundle2-input: part header size: 29
679 bundle2-input: part header size: 29
678 bundle2-input: part type: "test:song"
680 bundle2-input: part type: "test:song"
679 bundle2-input: part id: "5"
681 bundle2-input: part id: "5"
680 bundle2-input: part parameters: 1
682 bundle2-input: part parameters: 1
681 bundle2-input: found a handler for part 'test:song'
683 bundle2-input: found a handler for part 'test:song'
682 bundle2-input: ignoring unsupported advisory part test:song - randomparam
684 bundle2-input: ignoring unsupported advisory part test:song - randomparam
683 bundle2-input-part: "test:song" (advisory) (params: 1 mandatory) unsupported-params (['randomparam'])
685 bundle2-input-part: "test:song" (advisory) (params: 1 mandatory) unsupported-params (['randomparam'])
684 bundle2-input: payload chunk size: 0
686 bundle2-input: payload chunk size: 0
685 bundle2-input: part header size: 16
687 bundle2-input: part header size: 16
686 bundle2-input: part type: "test:ping"
688 bundle2-input: part type: "test:ping"
687 bundle2-input: part id: "6"
689 bundle2-input: part id: "6"
688 bundle2-input: part parameters: 0
690 bundle2-input: part parameters: 0
689 bundle2-input: found a handler for part 'test:ping'
691 bundle2-input: found a handler for part 'test:ping'
690 bundle2-input-part: "test:ping" (advisory) supported
692 bundle2-input-part: "test:ping" (advisory) supported
691 received ping request (id 6)
693 received ping request (id 6)
692 bundle2-input: payload chunk size: 0
694 bundle2-input: payload chunk size: 0
693 bundle2-input: part header size: 0
695 bundle2-input: part header size: 0
694 bundle2-input: end of bundle2 stream
696 bundle2-input: end of bundle2 stream
695 bundle2-input-bundle: 6 parts total
697 bundle2-input-bundle: 6 parts total
696 0 unread bytes
698 0 unread bytes
697 3 total verses sung
699 3 total verses sung
698
700
699 Unbundle with an unknown mandatory part
701 Unbundle with an unknown mandatory part
700 (should abort)
702 (should abort)
701
703
702 $ hg bundle2 --parts --unknown ../unknown.hg2
704 $ hg bundle2 --parts --unknown ../unknown.hg2
703
705
704 $ hg unbundle2 < ../unknown.hg2
706 $ hg unbundle2 < ../unknown.hg2
705 The choir starts singing:
707 The choir starts singing:
706 Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
708 Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
707 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
709 Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
708 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
710 Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
709 debugreply: no reply
711 debugreply: no reply
710 0 unread bytes
712 0 unread bytes
711 abort: missing support for test:unknown
713 abort: missing support for test:unknown
712 [255]
714 [255]
713
715
714 Unbundle with an unknown mandatory part parameters
716 Unbundle with an unknown mandatory part parameters
715 (should abort)
717 (should abort)
716
718
717 $ hg bundle2 --unknownparams ../unknown.hg2
719 $ hg bundle2 --unknownparams ../unknown.hg2
718
720
719 $ hg unbundle2 < ../unknown.hg2
721 $ hg unbundle2 < ../unknown.hg2
720 0 unread bytes
722 0 unread bytes
721 abort: missing support for test:song - randomparams
723 abort: missing support for test:song - randomparams
722 [255]
724 [255]
723
725
724 unbundle with a reply
726 unbundle with a reply
725
727
726 $ hg bundle2 --parts --reply ../parts-reply.hg2
728 $ hg bundle2 --parts --reply ../parts-reply.hg2
727 $ hg unbundle2 ../reply.hg2 < ../parts-reply.hg2
729 $ hg unbundle2 ../reply.hg2 < ../parts-reply.hg2
728 0 unread bytes
730 0 unread bytes
729 3 total verses sung
731 3 total verses sung
730
732
731 The reply is a bundle
733 The reply is a bundle
732
734
733 $ f --hexdump ../reply.hg2
735 $ f --hexdump ../reply.hg2
734 ../reply.hg2:
736 ../reply.hg2:
735 0000: 48 47 32 30 00 00 00 00 00 00 00 1b 06 6f 75 74 |HG20.........out|
737 0000: 48 47 32 30 00 00 00 00 00 00 00 1b 06 6f 75 74 |HG20.........out|
736 0010: 70 75 74 00 00 00 00 00 01 0b 01 69 6e 2d 72 65 |put........in-re|
738 0010: 70 75 74 00 00 00 00 00 01 0b 01 69 6e 2d 72 65 |put........in-re|
737 0020: 70 6c 79 2d 74 6f 33 00 00 00 d9 54 68 65 20 63 |ply-to3....The c|
739 0020: 70 6c 79 2d 74 6f 33 00 00 00 d9 54 68 65 20 63 |ply-to3....The c|
738 0030: 68 6f 69 72 20 73 74 61 72 74 73 20 73 69 6e 67 |hoir starts sing|
740 0030: 68 6f 69 72 20 73 74 61 72 74 73 20 73 69 6e 67 |hoir starts sing|
739 0040: 69 6e 67 3a 0a 20 20 20 20 50 61 74 61 6c 69 20 |ing:. Patali |
741 0040: 69 6e 67 3a 0a 20 20 20 20 50 61 74 61 6c 69 20 |ing:. Patali |
740 0050: 44 69 72 61 70 61 74 61 2c 20 43 72 6f 6d 64 61 |Dirapata, Cromda|
742 0050: 44 69 72 61 70 61 74 61 2c 20 43 72 6f 6d 64 61 |Dirapata, Cromda|
741 0060: 20 43 72 6f 6d 64 61 20 52 69 70 61 6c 6f 2c 20 | Cromda Ripalo, |
743 0060: 20 43 72 6f 6d 64 61 20 52 69 70 61 6c 6f 2c 20 | Cromda Ripalo, |
742 0070: 50 61 74 61 20 50 61 74 61 2c 20 4b 6f 20 4b 6f |Pata Pata, Ko Ko|
744 0070: 50 61 74 61 20 50 61 74 61 2c 20 4b 6f 20 4b 6f |Pata Pata, Ko Ko|
743 0080: 20 4b 6f 0a 20 20 20 20 42 6f 6b 6f 72 6f 20 44 | Ko. Bokoro D|
745 0080: 20 4b 6f 0a 20 20 20 20 42 6f 6b 6f 72 6f 20 44 | Ko. Bokoro D|
744 0090: 69 70 6f 75 6c 69 74 6f 2c 20 52 6f 6e 64 69 20 |ipoulito, Rondi |
746 0090: 69 70 6f 75 6c 69 74 6f 2c 20 52 6f 6e 64 69 20 |ipoulito, Rondi |
745 00a0: 52 6f 6e 64 69 20 50 65 70 69 6e 6f 2c 20 50 61 |Rondi Pepino, Pa|
747 00a0: 52 6f 6e 64 69 20 50 65 70 69 6e 6f 2c 20 50 61 |Rondi Pepino, Pa|
746 00b0: 74 61 20 50 61 74 61 2c 20 4b 6f 20 4b 6f 20 4b |ta Pata, Ko Ko K|
748 00b0: 74 61 20 50 61 74 61 2c 20 4b 6f 20 4b 6f 20 4b |ta Pata, Ko Ko K|
747 00c0: 6f 0a 20 20 20 20 45 6d 61 6e 61 20 4b 61 72 61 |o. Emana Kara|
749 00c0: 6f 0a 20 20 20 20 45 6d 61 6e 61 20 4b 61 72 61 |o. Emana Kara|
748 00d0: 73 73 6f 6c 69 2c 20 4c 6f 75 63 72 61 20 4c 6f |ssoli, Loucra Lo|
750 00d0: 73 73 6f 6c 69 2c 20 4c 6f 75 63 72 61 20 4c 6f |ssoli, Loucra Lo|
749 00e0: 75 63 72 61 20 50 6f 6e 70 6f 6e 74 6f 2c 20 50 |ucra Ponponto, P|
751 00e0: 75 63 72 61 20 50 6f 6e 70 6f 6e 74 6f 2c 20 50 |ucra Ponponto, P|
750 00f0: 61 74 61 20 50 61 74 61 2c 20 4b 6f 20 4b 6f 20 |ata Pata, Ko Ko |
752 00f0: 61 74 61 20 50 61 74 61 2c 20 4b 6f 20 4b 6f 20 |ata Pata, Ko Ko |
751 0100: 4b 6f 2e 0a 00 00 00 00 00 00 00 1b 06 6f 75 74 |Ko...........out|
753 0100: 4b 6f 2e 0a 00 00 00 00 00 00 00 1b 06 6f 75 74 |Ko...........out|
752 0110: 70 75 74 00 00 00 01 00 01 0b 01 69 6e 2d 72 65 |put........in-re|
754 0110: 70 75 74 00 00 00 01 00 01 0b 01 69 6e 2d 72 65 |put........in-re|
753 0120: 70 6c 79 2d 74 6f 34 00 00 00 c9 64 65 62 75 67 |ply-to4....debug|
755 0120: 70 6c 79 2d 74 6f 34 00 00 00 c9 64 65 62 75 67 |ply-to4....debug|
754 0130: 72 65 70 6c 79 3a 20 63 61 70 61 62 69 6c 69 74 |reply: capabilit|
756 0130: 72 65 70 6c 79 3a 20 63 61 70 61 62 69 6c 69 74 |reply: capabilit|
755 0140: 69 65 73 3a 0a 64 65 62 75 67 72 65 70 6c 79 3a |ies:.debugreply:|
757 0140: 69 65 73 3a 0a 64 65 62 75 67 72 65 70 6c 79 3a |ies:.debugreply:|
756 0150: 20 20 20 20 20 27 63 69 74 79 3d 21 27 0a 64 65 | 'city=!'.de|
758 0150: 20 20 20 20 20 27 63 69 74 79 3d 21 27 0a 64 65 | 'city=!'.de|
757 0160: 62 75 67 72 65 70 6c 79 3a 20 20 20 20 20 20 20 |bugreply: |
759 0160: 62 75 67 72 65 70 6c 79 3a 20 20 20 20 20 20 20 |bugreply: |
758 0170: 20 20 27 63 65 6c 65 73 74 65 2c 76 69 6c 6c 65 | 'celeste,ville|
760 0170: 20 20 27 63 65 6c 65 73 74 65 2c 76 69 6c 6c 65 | 'celeste,ville|
759 0180: 27 0a 64 65 62 75 67 72 65 70 6c 79 3a 20 20 20 |'.debugreply: |
761 0180: 27 0a 64 65 62 75 67 72 65 70 6c 79 3a 20 20 20 |'.debugreply: |
760 0190: 20 20 27 65 6c 65 70 68 61 6e 74 73 27 0a 64 65 | 'elephants'.de|
762 0190: 20 20 27 65 6c 65 70 68 61 6e 74 73 27 0a 64 65 | 'elephants'.de|
761 01a0: 62 75 67 72 65 70 6c 79 3a 20 20 20 20 20 20 20 |bugreply: |
763 01a0: 62 75 67 72 65 70 6c 79 3a 20 20 20 20 20 20 20 |bugreply: |
762 01b0: 20 20 27 62 61 62 61 72 27 0a 64 65 62 75 67 72 | 'babar'.debugr|
764 01b0: 20 20 27 62 61 62 61 72 27 0a 64 65 62 75 67 72 | 'babar'.debugr|
763 01c0: 65 70 6c 79 3a 20 20 20 20 20 20 20 20 20 27 63 |eply: 'c|
765 01c0: 65 70 6c 79 3a 20 20 20 20 20 20 20 20 20 27 63 |eply: 'c|
764 01d0: 65 6c 65 73 74 65 27 0a 64 65 62 75 67 72 65 70 |eleste'.debugrep|
766 01d0: 65 6c 65 73 74 65 27 0a 64 65 62 75 67 72 65 70 |eleste'.debugrep|
765 01e0: 6c 79 3a 20 20 20 20 20 27 70 69 6e 67 2d 70 6f |ly: 'ping-po|
767 01e0: 6c 79 3a 20 20 20 20 20 27 70 69 6e 67 2d 70 6f |ly: 'ping-po|
766 01f0: 6e 67 27 0a 00 00 00 00 00 00 00 1e 09 74 65 73 |ng'..........tes|
768 01f0: 6e 67 27 0a 00 00 00 00 00 00 00 1e 09 74 65 73 |ng'..........tes|
767 0200: 74 3a 70 6f 6e 67 00 00 00 02 01 00 0b 01 69 6e |t:pong........in|
769 0200: 74 3a 70 6f 6e 67 00 00 00 02 01 00 0b 01 69 6e |t:pong........in|
768 0210: 2d 72 65 70 6c 79 2d 74 6f 37 00 00 00 00 00 00 |-reply-to7......|
770 0210: 2d 72 65 70 6c 79 2d 74 6f 37 00 00 00 00 00 00 |-reply-to7......|
769 0220: 00 1b 06 6f 75 74 70 75 74 00 00 00 03 00 01 0b |...output.......|
771 0220: 00 1b 06 6f 75 74 70 75 74 00 00 00 03 00 01 0b |...output.......|
770 0230: 01 69 6e 2d 72 65 70 6c 79 2d 74 6f 37 00 00 00 |.in-reply-to7...|
772 0230: 01 69 6e 2d 72 65 70 6c 79 2d 74 6f 37 00 00 00 |.in-reply-to7...|
771 0240: 3d 72 65 63 65 69 76 65 64 20 70 69 6e 67 20 72 |=received ping r|
773 0240: 3d 72 65 63 65 69 76 65 64 20 70 69 6e 67 20 72 |=received ping r|
772 0250: 65 71 75 65 73 74 20 28 69 64 20 37 29 0a 72 65 |equest (id 7).re|
774 0250: 65 71 75 65 73 74 20 28 69 64 20 37 29 0a 72 65 |equest (id 7).re|
773 0260: 70 6c 79 69 6e 67 20 74 6f 20 70 69 6e 67 20 72 |plying to ping r|
775 0260: 70 6c 79 69 6e 67 20 74 6f 20 70 69 6e 67 20 72 |plying to ping r|
774 0270: 65 71 75 65 73 74 20 28 69 64 20 37 29 0a 00 00 |equest (id 7)...|
776 0270: 65 71 75 65 73 74 20 28 69 64 20 37 29 0a 00 00 |equest (id 7)...|
775 0280: 00 00 00 00 00 00 |......|
777 0280: 00 00 00 00 00 00 |......|
776
778
777 The reply is valid
779 The reply is valid
778
780
779 $ hg statbundle2 < ../reply.hg2
781 $ hg statbundle2 < ../reply.hg2
780 options count: 0
782 options count: 0
781 :output:
783 :output:
782 mandatory: 0
784 mandatory: 0
783 advisory: 1
785 advisory: 1
784 payload: 217 bytes
786 payload: 217 bytes
785 :output:
787 :output:
786 mandatory: 0
788 mandatory: 0
787 advisory: 1
789 advisory: 1
788 payload: 201 bytes
790 payload: 201 bytes
789 :test:pong:
791 :test:pong:
790 mandatory: 1
792 mandatory: 1
791 advisory: 0
793 advisory: 0
792 payload: 0 bytes
794 payload: 0 bytes
793 :output:
795 :output:
794 mandatory: 0
796 mandatory: 0
795 advisory: 1
797 advisory: 1
796 payload: 61 bytes
798 payload: 61 bytes
797 parts count: 4
799 parts count: 4
798
800
799 Unbundle the reply to get the output:
801 Unbundle the reply to get the output:
800
802
801 $ hg unbundle2 < ../reply.hg2
803 $ hg unbundle2 < ../reply.hg2
802 remote: The choir starts singing:
804 remote: The choir starts singing:
803 remote: Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
805 remote: Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
804 remote: Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
806 remote: Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
805 remote: Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
807 remote: Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
806 remote: debugreply: capabilities:
808 remote: debugreply: capabilities:
807 remote: debugreply: 'city=!'
809 remote: debugreply: 'city=!'
808 remote: debugreply: 'celeste,ville'
810 remote: debugreply: 'celeste,ville'
809 remote: debugreply: 'elephants'
811 remote: debugreply: 'elephants'
810 remote: debugreply: 'babar'
812 remote: debugreply: 'babar'
811 remote: debugreply: 'celeste'
813 remote: debugreply: 'celeste'
812 remote: debugreply: 'ping-pong'
814 remote: debugreply: 'ping-pong'
813 remote: received ping request (id 7)
815 remote: received ping request (id 7)
814 remote: replying to ping request (id 7)
816 remote: replying to ping request (id 7)
815 0 unread bytes
817 0 unread bytes
816
818
817 Test push race detection
819 Test push race detection
818
820
819 $ hg bundle2 --pushrace ../part-race.hg2
821 $ hg bundle2 --pushrace ../part-race.hg2
820
822
821 $ hg unbundle2 < ../part-race.hg2
823 $ hg unbundle2 < ../part-race.hg2
822 0 unread bytes
824 0 unread bytes
823 abort: push race: repository changed while pushing - please try again
825 abort: push race: repository changed while pushing - please try again
824 [255]
826 [255]
825
827
826 Support for changegroup
828 Support for changegroup
827 ===================================
829 ===================================
828
830
829 $ hg unbundle $TESTDIR/bundles/rebase.hg
831 $ hg unbundle $TESTDIR/bundles/rebase.hg
830 adding changesets
832 adding changesets
831 adding manifests
833 adding manifests
832 adding file changes
834 adding file changes
833 added 8 changesets with 7 changes to 7 files (+3 heads)
835 added 8 changesets with 7 changes to 7 files (+3 heads)
834 (run 'hg heads' to see heads, 'hg merge' to merge)
836 (run 'hg heads' to see heads, 'hg merge' to merge)
835
837
836 $ hg log -G
838 $ hg log -G
837 o 8:02de42196ebe draft Nicolas Dumazet <nicdumz.commits@gmail.com> H
839 o 8:02de42196ebe draft Nicolas Dumazet <nicdumz.commits@gmail.com> H
838 |
840 |
839 | o 7:eea13746799a draft Nicolas Dumazet <nicdumz.commits@gmail.com> G
841 | o 7:eea13746799a draft Nicolas Dumazet <nicdumz.commits@gmail.com> G
840 |/|
842 |/|
841 o | 6:24b6387c8c8c draft Nicolas Dumazet <nicdumz.commits@gmail.com> F
843 o | 6:24b6387c8c8c draft Nicolas Dumazet <nicdumz.commits@gmail.com> F
842 | |
844 | |
843 | o 5:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com> E
845 | o 5:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com> E
844 |/
846 |/
845 | o 4:32af7686d403 draft Nicolas Dumazet <nicdumz.commits@gmail.com> D
847 | o 4:32af7686d403 draft Nicolas Dumazet <nicdumz.commits@gmail.com> D
846 | |
848 | |
847 | o 3:5fddd98957c8 draft Nicolas Dumazet <nicdumz.commits@gmail.com> C
849 | o 3:5fddd98957c8 draft Nicolas Dumazet <nicdumz.commits@gmail.com> C
848 | |
850 | |
849 | o 2:42ccdea3bb16 draft Nicolas Dumazet <nicdumz.commits@gmail.com> B
851 | o 2:42ccdea3bb16 draft Nicolas Dumazet <nicdumz.commits@gmail.com> B
850 |/
852 |/
851 o 1:cd010b8cd998 draft Nicolas Dumazet <nicdumz.commits@gmail.com> A
853 o 1:cd010b8cd998 draft Nicolas Dumazet <nicdumz.commits@gmail.com> A
852
854
853 @ 0:3903775176ed draft test a
855 @ 0:3903775176ed draft test a
854
856
855
857
856 $ hg bundle2 --debug --config progress.debug=true --config devel.bundle2.debug=true --rev '8+7+5+4' ../rev.hg2
858 $ hg bundle2 --debug --config progress.debug=true --config devel.bundle2.debug=true --rev '8+7+5+4' ../rev.hg2
857 4 changesets found
859 4 changesets found
858 list of changesets:
860 list of changesets:
859 32af7686d403cf45b5d95f2d70cebea587ac806a
861 32af7686d403cf45b5d95f2d70cebea587ac806a
860 9520eea781bcca16c1e15acc0ba14335a0e8e5ba
862 9520eea781bcca16c1e15acc0ba14335a0e8e5ba
861 eea13746799a9e0bfd88f29d3c2e9dc9389f524f
863 eea13746799a9e0bfd88f29d3c2e9dc9389f524f
862 02de42196ebee42ef284b6780a87cdc96e8eaab6
864 02de42196ebee42ef284b6780a87cdc96e8eaab6
863 bundle2-output-bundle: "HG20", 1 parts total
865 bundle2-output-bundle: "HG20", 1 parts total
864 bundle2-output: start emission of HG20 stream
866 bundle2-output: start emission of HG20 stream
865 bundle2-output: bundle parameter:
867 bundle2-output: bundle parameter:
866 bundle2-output: start of parts
868 bundle2-output: start of parts
867 bundle2-output: bundle part: "changegroup"
869 bundle2-output: bundle part: "changegroup"
868 bundle2-output-part: "changegroup" (advisory) streamed payload
870 bundle2-output-part: "changegroup" (advisory) streamed payload
869 bundle2-output: part 0: "changegroup"
871 bundle2-output: part 0: "changegroup"
870 bundle2-output: header chunk size: 18
872 bundle2-output: header chunk size: 18
871 bundling: 1/4 changesets (25.00%)
873 bundling: 1/4 changesets (25.00%)
872 bundling: 2/4 changesets (50.00%)
874 bundling: 2/4 changesets (50.00%)
873 bundling: 3/4 changesets (75.00%)
875 bundling: 3/4 changesets (75.00%)
874 bundling: 4/4 changesets (100.00%)
876 bundling: 4/4 changesets (100.00%)
875 bundling: 1/4 manifests (25.00%)
877 bundling: 1/4 manifests (25.00%)
876 bundling: 2/4 manifests (50.00%)
878 bundling: 2/4 manifests (50.00%)
877 bundling: 3/4 manifests (75.00%)
879 bundling: 3/4 manifests (75.00%)
878 bundling: 4/4 manifests (100.00%)
880 bundling: 4/4 manifests (100.00%)
879 bundling: D 1/3 files (33.33%)
881 bundling: D 1/3 files (33.33%)
880 bundling: E 2/3 files (66.67%)
882 bundling: E 2/3 files (66.67%)
881 bundling: H 3/3 files (100.00%)
883 bundling: H 3/3 files (100.00%)
882 bundle2-output: payload chunk size: 1555
884 bundle2-output: payload chunk size: 1555
883 bundle2-output: closing payload chunk
885 bundle2-output: closing payload chunk
884 bundle2-output: end of bundle
886 bundle2-output: end of bundle
885
887
886 $ f --hexdump ../rev.hg2
888 $ f --hexdump ../rev.hg2
887 ../rev.hg2:
889 ../rev.hg2:
888 0000: 48 47 32 30 00 00 00 00 00 00 00 12 0b 63 68 61 |HG20.........cha|
890 0000: 48 47 32 30 00 00 00 00 00 00 00 12 0b 63 68 61 |HG20.........cha|
889 0010: 6e 67 65 67 72 6f 75 70 00 00 00 00 00 00 00 00 |ngegroup........|
891 0010: 6e 67 65 67 72 6f 75 70 00 00 00 00 00 00 00 00 |ngegroup........|
890 0020: 06 13 00 00 00 a4 32 af 76 86 d4 03 cf 45 b5 d9 |......2.v....E..|
892 0020: 06 13 00 00 00 a4 32 af 76 86 d4 03 cf 45 b5 d9 |......2.v....E..|
891 0030: 5f 2d 70 ce be a5 87 ac 80 6a 5f dd d9 89 57 c8 |_-p......j_...W.|
893 0030: 5f 2d 70 ce be a5 87 ac 80 6a 5f dd d9 89 57 c8 |_-p......j_...W.|
892 0040: a5 4a 4d 43 6d fe 1d a9 d8 7f 21 a1 b9 7b 00 00 |.JMCm.....!..{..|
894 0040: a5 4a 4d 43 6d fe 1d a9 d8 7f 21 a1 b9 7b 00 00 |.JMCm.....!..{..|
893 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
895 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
894 0060: 00 00 32 af 76 86 d4 03 cf 45 b5 d9 5f 2d 70 ce |..2.v....E.._-p.|
896 0060: 00 00 32 af 76 86 d4 03 cf 45 b5 d9 5f 2d 70 ce |..2.v....E.._-p.|
895 0070: be a5 87 ac 80 6a 00 00 00 00 00 00 00 29 00 00 |.....j.......)..|
897 0070: be a5 87 ac 80 6a 00 00 00 00 00 00 00 29 00 00 |.....j.......)..|
896 0080: 00 29 36 65 31 66 34 63 34 37 65 63 62 35 33 33 |.)6e1f4c47ecb533|
898 0080: 00 29 36 65 31 66 34 63 34 37 65 63 62 35 33 33 |.)6e1f4c47ecb533|
897 0090: 66 66 64 30 63 38 65 35 32 63 64 63 38 38 61 66 |ffd0c8e52cdc88af|
899 0090: 66 66 64 30 63 38 65 35 32 63 64 63 38 38 61 66 |ffd0c8e52cdc88af|
898 00a0: 62 36 63 64 33 39 65 32 30 63 0a 00 00 00 66 00 |b6cd39e20c....f.|
900 00a0: 62 36 63 64 33 39 65 32 30 63 0a 00 00 00 66 00 |b6cd39e20c....f.|
899 00b0: 00 00 68 00 00 00 02 44 0a 00 00 00 69 00 00 00 |..h....D....i...|
901 00b0: 00 00 68 00 00 00 02 44 0a 00 00 00 69 00 00 00 |..h....D....i...|
900 00c0: 6a 00 00 00 01 44 00 00 00 a4 95 20 ee a7 81 bc |j....D..... ....|
902 00c0: 6a 00 00 00 01 44 00 00 00 a4 95 20 ee a7 81 bc |j....D..... ....|
901 00d0: ca 16 c1 e1 5a cc 0b a1 43 35 a0 e8 e5 ba cd 01 |....Z...C5......|
903 00d0: ca 16 c1 e1 5a cc 0b a1 43 35 a0 e8 e5 ba cd 01 |....Z...C5......|
902 00e0: 0b 8c d9 98 f3 98 1a 5a 81 15 f9 4f 8d a4 ab 50 |.......Z...O...P|
904 00e0: 0b 8c d9 98 f3 98 1a 5a 81 15 f9 4f 8d a4 ab 50 |.......Z...O...P|
903 00f0: 60 89 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |`...............|
905 00f0: 60 89 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |`...............|
904 0100: 00 00 00 00 00 00 95 20 ee a7 81 bc ca 16 c1 e1 |....... ........|
906 0100: 00 00 00 00 00 00 95 20 ee a7 81 bc ca 16 c1 e1 |....... ........|
905 0110: 5a cc 0b a1 43 35 a0 e8 e5 ba 00 00 00 00 00 00 |Z...C5..........|
907 0110: 5a cc 0b a1 43 35 a0 e8 e5 ba 00 00 00 00 00 00 |Z...C5..........|
906 0120: 00 29 00 00 00 29 34 64 65 63 65 39 63 38 32 36 |.)...)4dece9c826|
908 0120: 00 29 00 00 00 29 34 64 65 63 65 39 63 38 32 36 |.)...)4dece9c826|
907 0130: 66 36 39 34 39 30 35 30 37 62 39 38 63 36 33 38 |f69490507b98c638|
909 0130: 66 36 39 34 39 30 35 30 37 62 39 38 63 36 33 38 |f69490507b98c638|
908 0140: 33 61 33 30 30 39 62 32 39 35 38 33 37 64 0a 00 |3a3009b295837d..|
910 0140: 33 61 33 30 30 39 62 32 39 35 38 33 37 64 0a 00 |3a3009b295837d..|
909 0150: 00 00 66 00 00 00 68 00 00 00 02 45 0a 00 00 00 |..f...h....E....|
911 0150: 00 00 66 00 00 00 68 00 00 00 02 45 0a 00 00 00 |..f...h....E....|
910 0160: 69 00 00 00 6a 00 00 00 01 45 00 00 00 a2 ee a1 |i...j....E......|
912 0160: 69 00 00 00 6a 00 00 00 01 45 00 00 00 a2 ee a1 |i...j....E......|
911 0170: 37 46 79 9a 9e 0b fd 88 f2 9d 3c 2e 9d c9 38 9f |7Fy.......<...8.|
913 0170: 37 46 79 9a 9e 0b fd 88 f2 9d 3c 2e 9d c9 38 9f |7Fy.......<...8.|
912 0180: 52 4f 24 b6 38 7c 8c 8c ae 37 17 88 80 f3 fa 95 |RO$.8|...7......|
914 0180: 52 4f 24 b6 38 7c 8c 8c ae 37 17 88 80 f3 fa 95 |RO$.8|...7......|
913 0190: de d3 cb 1c f7 85 95 20 ee a7 81 bc ca 16 c1 e1 |....... ........|
915 0190: de d3 cb 1c f7 85 95 20 ee a7 81 bc ca 16 c1 e1 |....... ........|
914 01a0: 5a cc 0b a1 43 35 a0 e8 e5 ba ee a1 37 46 79 9a |Z...C5......7Fy.|
916 01a0: 5a cc 0b a1 43 35 a0 e8 e5 ba ee a1 37 46 79 9a |Z...C5......7Fy.|
915 01b0: 9e 0b fd 88 f2 9d 3c 2e 9d c9 38 9f 52 4f 00 00 |......<...8.RO..|
917 01b0: 9e 0b fd 88 f2 9d 3c 2e 9d c9 38 9f 52 4f 00 00 |......<...8.RO..|
916 01c0: 00 00 00 00 00 29 00 00 00 29 33 36 35 62 39 33 |.....)...)365b93|
918 01c0: 00 00 00 00 00 29 00 00 00 29 33 36 35 62 39 33 |.....)...)365b93|
917 01d0: 64 35 37 66 64 66 34 38 31 34 65 32 62 35 39 31 |d57fdf4814e2b591|
919 01d0: 64 35 37 66 64 66 34 38 31 34 65 32 62 35 39 31 |d57fdf4814e2b591|
918 01e0: 31 64 36 62 61 63 66 66 32 62 31 32 30 31 34 34 |1d6bacff2b120144|
920 01e0: 31 64 36 62 61 63 66 66 32 62 31 32 30 31 34 34 |1d6bacff2b120144|
919 01f0: 34 31 0a 00 00 00 66 00 00 00 68 00 00 00 00 00 |41....f...h.....|
921 01f0: 34 31 0a 00 00 00 66 00 00 00 68 00 00 00 00 00 |41....f...h.....|
920 0200: 00 00 69 00 00 00 6a 00 00 00 01 47 00 00 00 a4 |..i...j....G....|
922 0200: 00 00 69 00 00 00 6a 00 00 00 01 47 00 00 00 a4 |..i...j....G....|
921 0210: 02 de 42 19 6e be e4 2e f2 84 b6 78 0a 87 cd c9 |..B.n......x....|
923 0210: 02 de 42 19 6e be e4 2e f2 84 b6 78 0a 87 cd c9 |..B.n......x....|
922 0220: 6e 8e aa b6 24 b6 38 7c 8c 8c ae 37 17 88 80 f3 |n...$.8|...7....|
924 0220: 6e 8e aa b6 24 b6 38 7c 8c 8c ae 37 17 88 80 f3 |n...$.8|...7....|
923 0230: fa 95 de d3 cb 1c f7 85 00 00 00 00 00 00 00 00 |................|
925 0230: fa 95 de d3 cb 1c f7 85 00 00 00 00 00 00 00 00 |................|
924 0240: 00 00 00 00 00 00 00 00 00 00 00 00 02 de 42 19 |..............B.|
926 0240: 00 00 00 00 00 00 00 00 00 00 00 00 02 de 42 19 |..............B.|
925 0250: 6e be e4 2e f2 84 b6 78 0a 87 cd c9 6e 8e aa b6 |n......x....n...|
927 0250: 6e be e4 2e f2 84 b6 78 0a 87 cd c9 6e 8e aa b6 |n......x....n...|
926 0260: 00 00 00 00 00 00 00 29 00 00 00 29 38 62 65 65 |.......)...)8bee|
928 0260: 00 00 00 00 00 00 00 29 00 00 00 29 38 62 65 65 |.......)...)8bee|
927 0270: 34 38 65 64 63 37 33 31 38 35 34 31 66 63 30 30 |48edc7318541fc00|
929 0270: 34 38 65 64 63 37 33 31 38 35 34 31 66 63 30 30 |48edc7318541fc00|
928 0280: 31 33 65 65 34 31 62 30 38 39 32 37 36 61 38 63 |13ee41b089276a8c|
930 0280: 31 33 65 65 34 31 62 30 38 39 32 37 36 61 38 63 |13ee41b089276a8c|
929 0290: 32 34 62 66 0a 00 00 00 66 00 00 00 66 00 00 00 |24bf....f...f...|
931 0290: 32 34 62 66 0a 00 00 00 66 00 00 00 66 00 00 00 |24bf....f...f...|
930 02a0: 02 48 0a 00 00 00 67 00 00 00 68 00 00 00 01 48 |.H....g...h....H|
932 02a0: 02 48 0a 00 00 00 67 00 00 00 68 00 00 00 01 48 |.H....g...h....H|
931 02b0: 00 00 00 00 00 00 00 8b 6e 1f 4c 47 ec b5 33 ff |........n.LG..3.|
933 02b0: 00 00 00 00 00 00 00 8b 6e 1f 4c 47 ec b5 33 ff |........n.LG..3.|
932 02c0: d0 c8 e5 2c dc 88 af b6 cd 39 e2 0c 66 a5 a0 18 |...,.....9..f...|
934 02c0: d0 c8 e5 2c dc 88 af b6 cd 39 e2 0c 66 a5 a0 18 |...,.....9..f...|
933 02d0: 17 fd f5 23 9c 27 38 02 b5 b7 61 8d 05 1c 89 e4 |...#.'8...a.....|
935 02d0: 17 fd f5 23 9c 27 38 02 b5 b7 61 8d 05 1c 89 e4 |...#.'8...a.....|
934 02e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
936 02e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
935 02f0: 00 00 00 00 32 af 76 86 d4 03 cf 45 b5 d9 5f 2d |....2.v....E.._-|
937 02f0: 00 00 00 00 32 af 76 86 d4 03 cf 45 b5 d9 5f 2d |....2.v....E.._-|
936 0300: 70 ce be a5 87 ac 80 6a 00 00 00 81 00 00 00 81 |p......j........|
938 0300: 70 ce be a5 87 ac 80 6a 00 00 00 81 00 00 00 81 |p......j........|
937 0310: 00 00 00 2b 44 00 63 33 66 31 63 61 32 39 32 34 |...+D.c3f1ca2924|
939 0310: 00 00 00 2b 44 00 63 33 66 31 63 61 32 39 32 34 |...+D.c3f1ca2924|
938 0320: 63 31 36 61 31 39 62 30 36 35 36 61 38 34 39 30 |c16a19b0656a8490|
940 0320: 63 31 36 61 31 39 62 30 36 35 36 61 38 34 39 30 |c16a19b0656a8490|
939 0330: 30 65 35 30 34 65 35 62 30 61 65 63 32 64 0a 00 |0e504e5b0aec2d..|
941 0330: 30 65 35 30 34 65 35 62 30 61 65 63 32 64 0a 00 |0e504e5b0aec2d..|
940 0340: 00 00 8b 4d ec e9 c8 26 f6 94 90 50 7b 98 c6 38 |...M...&...P{..8|
942 0340: 00 00 8b 4d ec e9 c8 26 f6 94 90 50 7b 98 c6 38 |...M...&...P{..8|
941 0350: 3a 30 09 b2 95 83 7d 00 7d 8c 9d 88 84 13 25 f5 |:0....}.}.....%.|
943 0350: 3a 30 09 b2 95 83 7d 00 7d 8c 9d 88 84 13 25 f5 |:0....}.}.....%.|
942 0360: c6 b0 63 71 b3 5b 4e 8a 2b 1a 83 00 00 00 00 00 |..cq.[N.+.......|
944 0360: c6 b0 63 71 b3 5b 4e 8a 2b 1a 83 00 00 00 00 00 |..cq.[N.+.......|
943 0370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 95 |................|
945 0370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 95 |................|
944 0380: 20 ee a7 81 bc ca 16 c1 e1 5a cc 0b a1 43 35 a0 | ........Z...C5.|
946 0380: 20 ee a7 81 bc ca 16 c1 e1 5a cc 0b a1 43 35 a0 | ........Z...C5.|
945 0390: e8 e5 ba 00 00 00 2b 00 00 00 ac 00 00 00 2b 45 |......+.......+E|
947 0390: e8 e5 ba 00 00 00 2b 00 00 00 ac 00 00 00 2b 45 |......+.......+E|
946 03a0: 00 39 63 36 66 64 30 33 35 30 61 36 63 30 64 30 |.9c6fd0350a6c0d0|
948 03a0: 00 39 63 36 66 64 30 33 35 30 61 36 63 30 64 30 |.9c6fd0350a6c0d0|
947 03b0: 63 34 39 64 34 61 39 63 35 30 31 37 63 66 30 37 |c49d4a9c5017cf07|
949 03b0: 63 34 39 64 34 61 39 63 35 30 31 37 63 66 30 37 |c49d4a9c5017cf07|
948 03c0: 30 34 33 66 35 34 65 35 38 0a 00 00 00 8b 36 5b |043f54e58.....6[|
950 03c0: 30 34 33 66 35 34 65 35 38 0a 00 00 00 8b 36 5b |043f54e58.....6[|
949 03d0: 93 d5 7f df 48 14 e2 b5 91 1d 6b ac ff 2b 12 01 |....H.....k..+..|
951 03d0: 93 d5 7f df 48 14 e2 b5 91 1d 6b ac ff 2b 12 01 |....H.....k..+..|
950 03e0: 44 41 28 a5 84 c6 5e f1 21 f8 9e b6 6a b7 d0 bc |DA(...^.!...j...|
952 03e0: 44 41 28 a5 84 c6 5e f1 21 f8 9e b6 6a b7 d0 bc |DA(...^.!...j...|
951 03f0: 15 3d 80 99 e7 ce 4d ec e9 c8 26 f6 94 90 50 7b |.=....M...&...P{|
953 03f0: 15 3d 80 99 e7 ce 4d ec e9 c8 26 f6 94 90 50 7b |.=....M...&...P{|
952 0400: 98 c6 38 3a 30 09 b2 95 83 7d ee a1 37 46 79 9a |..8:0....}..7Fy.|
954 0400: 98 c6 38 3a 30 09 b2 95 83 7d ee a1 37 46 79 9a |..8:0....}..7Fy.|
953 0410: 9e 0b fd 88 f2 9d 3c 2e 9d c9 38 9f 52 4f 00 00 |......<...8.RO..|
955 0410: 9e 0b fd 88 f2 9d 3c 2e 9d c9 38 9f 52 4f 00 00 |......<...8.RO..|
954 0420: 00 56 00 00 00 56 00 00 00 2b 46 00 32 32 62 66 |.V...V...+F.22bf|
956 0420: 00 56 00 00 00 56 00 00 00 2b 46 00 32 32 62 66 |.V...V...+F.22bf|
955 0430: 63 66 64 36 32 61 32 31 61 33 32 38 37 65 64 62 |cfd62a21a3287edb|
957 0430: 63 66 64 36 32 61 32 31 61 33 32 38 37 65 64 62 |cfd62a21a3287edb|
956 0440: 64 34 64 36 35 36 32 31 38 64 30 66 35 32 35 65 |d4d656218d0f525e|
958 0440: 64 34 64 36 35 36 32 31 38 64 30 66 35 32 35 65 |d4d656218d0f525e|
957 0450: 64 37 36 61 0a 00 00 00 97 8b ee 48 ed c7 31 85 |d76a.......H..1.|
959 0450: 64 37 36 61 0a 00 00 00 97 8b ee 48 ed c7 31 85 |d76a.......H..1.|
958 0460: 41 fc 00 13 ee 41 b0 89 27 6a 8c 24 bf 28 a5 84 |A....A..'j.$.(..|
960 0460: 41 fc 00 13 ee 41 b0 89 27 6a 8c 24 bf 28 a5 84 |A....A..'j.$.(..|
959 0470: c6 5e f1 21 f8 9e b6 6a b7 d0 bc 15 3d 80 99 e7 |.^.!...j....=...|
961 0470: c6 5e f1 21 f8 9e b6 6a b7 d0 bc 15 3d 80 99 e7 |.^.!...j....=...|
960 0480: ce 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
962 0480: ce 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
961 0490: 00 00 00 00 00 02 de 42 19 6e be e4 2e f2 84 b6 |.......B.n......|
963 0490: 00 00 00 00 00 02 de 42 19 6e be e4 2e f2 84 b6 |.......B.n......|
962 04a0: 78 0a 87 cd c9 6e 8e aa b6 00 00 00 2b 00 00 00 |x....n......+...|
964 04a0: 78 0a 87 cd c9 6e 8e aa b6 00 00 00 2b 00 00 00 |x....n......+...|
963 04b0: 56 00 00 00 00 00 00 00 81 00 00 00 81 00 00 00 |V...............|
965 04b0: 56 00 00 00 00 00 00 00 81 00 00 00 81 00 00 00 |V...............|
964 04c0: 2b 48 00 38 35 30 30 31 38 39 65 37 34 61 39 65 |+H.8500189e74a9e|
966 04c0: 2b 48 00 38 35 30 30 31 38 39 65 37 34 61 39 65 |+H.8500189e74a9e|
965 04d0: 30 34 37 35 65 38 32 32 30 39 33 62 63 37 64 62 |0475e822093bc7db|
967 04d0: 30 34 37 35 65 38 32 32 30 39 33 62 63 37 64 62 |0475e822093bc7db|
966 04e0: 30 64 36 33 31 61 65 62 30 62 34 0a 00 00 00 00 |0d631aeb0b4.....|
968 04e0: 30 64 36 33 31 61 65 62 30 62 34 0a 00 00 00 00 |0d631aeb0b4.....|
967 04f0: 00 00 00 05 44 00 00 00 62 c3 f1 ca 29 24 c1 6a |....D...b...)$.j|
969 04f0: 00 00 00 05 44 00 00 00 62 c3 f1 ca 29 24 c1 6a |....D...b...)$.j|
968 0500: 19 b0 65 6a 84 90 0e 50 4e 5b 0a ec 2d 00 00 00 |..ej...PN[..-...|
970 0500: 19 b0 65 6a 84 90 0e 50 4e 5b 0a ec 2d 00 00 00 |..ej...PN[..-...|
969 0510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
971 0510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
970 0520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
972 0520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
971 0530: 00 00 00 00 00 32 af 76 86 d4 03 cf 45 b5 d9 5f |.....2.v....E.._|
973 0530: 00 00 00 00 00 32 af 76 86 d4 03 cf 45 b5 d9 5f |.....2.v....E.._|
972 0540: 2d 70 ce be a5 87 ac 80 6a 00 00 00 00 00 00 00 |-p......j.......|
974 0540: 2d 70 ce be a5 87 ac 80 6a 00 00 00 00 00 00 00 |-p......j.......|
973 0550: 00 00 00 00 02 44 0a 00 00 00 00 00 00 00 05 45 |.....D.........E|
975 0550: 00 00 00 00 02 44 0a 00 00 00 00 00 00 00 05 45 |.....D.........E|
974 0560: 00 00 00 62 9c 6f d0 35 0a 6c 0d 0c 49 d4 a9 c5 |...b.o.5.l..I...|
976 0560: 00 00 00 62 9c 6f d0 35 0a 6c 0d 0c 49 d4 a9 c5 |...b.o.5.l..I...|
975 0570: 01 7c f0 70 43 f5 4e 58 00 00 00 00 00 00 00 00 |.|.pC.NX........|
977 0570: 01 7c f0 70 43 f5 4e 58 00 00 00 00 00 00 00 00 |.|.pC.NX........|
976 0580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
978 0580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
977 0590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
979 0590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
978 05a0: 95 20 ee a7 81 bc ca 16 c1 e1 5a cc 0b a1 43 35 |. ........Z...C5|
980 05a0: 95 20 ee a7 81 bc ca 16 c1 e1 5a cc 0b a1 43 35 |. ........Z...C5|
979 05b0: a0 e8 e5 ba 00 00 00 00 00 00 00 00 00 00 00 02 |................|
981 05b0: a0 e8 e5 ba 00 00 00 00 00 00 00 00 00 00 00 02 |................|
980 05c0: 45 0a 00 00 00 00 00 00 00 05 48 00 00 00 62 85 |E.........H...b.|
982 05c0: 45 0a 00 00 00 00 00 00 00 05 48 00 00 00 62 85 |E.........H...b.|
981 05d0: 00 18 9e 74 a9 e0 47 5e 82 20 93 bc 7d b0 d6 31 |...t..G^. ..}..1|
983 05d0: 00 18 9e 74 a9 e0 47 5e 82 20 93 bc 7d b0 d6 31 |...t..G^. ..}..1|
982 05e0: ae b0 b4 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
984 05e0: ae b0 b4 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
983 05f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
985 05f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
984 0600: 00 00 00 00 00 00 00 00 00 00 00 02 de 42 19 6e |.............B.n|
986 0600: 00 00 00 00 00 00 00 00 00 00 00 02 de 42 19 6e |.............B.n|
985 0610: be e4 2e f2 84 b6 78 0a 87 cd c9 6e 8e aa b6 00 |......x....n....|
987 0610: be e4 2e f2 84 b6 78 0a 87 cd c9 6e 8e aa b6 00 |......x....n....|
986 0620: 00 00 00 00 00 00 00 00 00 00 02 48 0a 00 00 00 |...........H....|
988 0620: 00 00 00 00 00 00 00 00 00 00 02 48 0a 00 00 00 |...........H....|
987 0630: 00 00 00 00 00 00 00 00 00 00 00 00 00 |.............|
989 0630: 00 00 00 00 00 00 00 00 00 00 00 00 00 |.............|
988
990
989 $ hg debugbundle ../rev.hg2
991 $ hg debugbundle ../rev.hg2
990 Stream params: {}
992 Stream params: {}
991 changegroup -- '{}'
993 changegroup -- '{}'
992 32af7686d403cf45b5d95f2d70cebea587ac806a
994 32af7686d403cf45b5d95f2d70cebea587ac806a
993 9520eea781bcca16c1e15acc0ba14335a0e8e5ba
995 9520eea781bcca16c1e15acc0ba14335a0e8e5ba
994 eea13746799a9e0bfd88f29d3c2e9dc9389f524f
996 eea13746799a9e0bfd88f29d3c2e9dc9389f524f
995 02de42196ebee42ef284b6780a87cdc96e8eaab6
997 02de42196ebee42ef284b6780a87cdc96e8eaab6
996 $ hg unbundle ../rev.hg2
998 $ hg unbundle ../rev.hg2
997 adding changesets
999 adding changesets
998 adding manifests
1000 adding manifests
999 adding file changes
1001 adding file changes
1000 added 0 changesets with 0 changes to 3 files
1002 added 0 changesets with 0 changes to 3 files
1001 (run 'hg update' to get a working copy)
1003 (run 'hg update' to get a working copy)
1002
1004
1003 with reply
1005 with reply
1004
1006
1005 $ hg bundle2 --rev '8+7+5+4' --reply ../rev-rr.hg2
1007 $ hg bundle2 --rev '8+7+5+4' --reply ../rev-rr.hg2
1006 $ hg unbundle2 ../rev-reply.hg2 < ../rev-rr.hg2
1008 $ hg unbundle2 ../rev-reply.hg2 < ../rev-rr.hg2
1007 0 unread bytes
1009 0 unread bytes
1008 addchangegroup return: 1
1010 addchangegroup return: 1
1009
1011
1010 $ f --hexdump ../rev-reply.hg2
1012 $ f --hexdump ../rev-reply.hg2
1011 ../rev-reply.hg2:
1013 ../rev-reply.hg2:
1012 0000: 48 47 32 30 00 00 00 00 00 00 00 2f 11 72 65 70 |HG20......./.rep|
1014 0000: 48 47 32 30 00 00 00 00 00 00 00 2f 11 72 65 70 |HG20......./.rep|
1013 0010: 6c 79 3a 63 68 61 6e 67 65 67 72 6f 75 70 00 00 |ly:changegroup..|
1015 0010: 6c 79 3a 63 68 61 6e 67 65 67 72 6f 75 70 00 00 |ly:changegroup..|
1014 0020: 00 00 00 02 0b 01 06 01 69 6e 2d 72 65 70 6c 79 |........in-reply|
1016 0020: 00 00 00 02 0b 01 06 01 69 6e 2d 72 65 70 6c 79 |........in-reply|
1015 0030: 2d 74 6f 31 72 65 74 75 72 6e 31 00 00 00 00 00 |-to1return1.....|
1017 0030: 2d 74 6f 31 72 65 74 75 72 6e 31 00 00 00 00 00 |-to1return1.....|
1016 0040: 00 00 1b 06 6f 75 74 70 75 74 00 00 00 01 00 01 |....output......|
1018 0040: 00 00 1b 06 6f 75 74 70 75 74 00 00 00 01 00 01 |....output......|
1017 0050: 0b 01 69 6e 2d 72 65 70 6c 79 2d 74 6f 31 00 00 |..in-reply-to1..|
1019 0050: 0b 01 69 6e 2d 72 65 70 6c 79 2d 74 6f 31 00 00 |..in-reply-to1..|
1018 0060: 00 64 61 64 64 69 6e 67 20 63 68 61 6e 67 65 73 |.dadding changes|
1020 0060: 00 64 61 64 64 69 6e 67 20 63 68 61 6e 67 65 73 |.dadding changes|
1019 0070: 65 74 73 0a 61 64 64 69 6e 67 20 6d 61 6e 69 66 |ets.adding manif|
1021 0070: 65 74 73 0a 61 64 64 69 6e 67 20 6d 61 6e 69 66 |ets.adding manif|
1020 0080: 65 73 74 73 0a 61 64 64 69 6e 67 20 66 69 6c 65 |ests.adding file|
1022 0080: 65 73 74 73 0a 61 64 64 69 6e 67 20 66 69 6c 65 |ests.adding file|
1021 0090: 20 63 68 61 6e 67 65 73 0a 61 64 64 65 64 20 30 | changes.added 0|
1023 0090: 20 63 68 61 6e 67 65 73 0a 61 64 64 65 64 20 30 | changes.added 0|
1022 00a0: 20 63 68 61 6e 67 65 73 65 74 73 20 77 69 74 68 | changesets with|
1024 00a0: 20 63 68 61 6e 67 65 73 65 74 73 20 77 69 74 68 | changesets with|
1023 00b0: 20 30 20 63 68 61 6e 67 65 73 20 74 6f 20 33 20 | 0 changes to 3 |
1025 00b0: 20 30 20 63 68 61 6e 67 65 73 20 74 6f 20 33 20 | 0 changes to 3 |
1024 00c0: 66 69 6c 65 73 0a 00 00 00 00 00 00 00 00 |files.........|
1026 00c0: 66 69 6c 65 73 0a 00 00 00 00 00 00 00 00 |files.........|
1025
1027
1026 Check handling of exception during generation.
1028 Check handling of exception during generation.
1027 ----------------------------------------------
1029 ----------------------------------------------
1028
1030
1029 $ hg bundle2 --genraise > ../genfailed.hg2
1031 $ hg bundle2 --genraise > ../genfailed.hg2
1030 abort: Someone set up us the bomb!
1032 abort: Someone set up us the bomb!
1031 [255]
1033 [255]
1032
1034
1033 Should still be a valid bundle
1035 Should still be a valid bundle
1034
1036
1035 $ f --hexdump ../genfailed.hg2
1037 $ f --hexdump ../genfailed.hg2
1036 ../genfailed.hg2:
1038 ../genfailed.hg2:
1037 0000: 48 47 32 30 00 00 00 00 00 00 00 0d 06 6f 75 74 |HG20.........out|
1039 0000: 48 47 32 30 00 00 00 00 00 00 00 0d 06 6f 75 74 |HG20.........out|
1038 0010: 70 75 74 00 00 00 00 00 00 ff ff ff ff 00 00 00 |put.............|
1040 0010: 70 75 74 00 00 00 00 00 00 ff ff ff ff 00 00 00 |put.............|
1039 0020: 48 0b 65 72 72 6f 72 3a 61 62 6f 72 74 00 00 00 |H.error:abort...|
1041 0020: 48 0b 65 72 72 6f 72 3a 61 62 6f 72 74 00 00 00 |H.error:abort...|
1040 0030: 00 01 00 07 2d 6d 65 73 73 61 67 65 75 6e 65 78 |....-messageunex|
1042 0030: 00 01 00 07 2d 6d 65 73 73 61 67 65 75 6e 65 78 |....-messageunex|
1041 0040: 70 65 63 74 65 64 20 65 72 72 6f 72 3a 20 53 6f |pected error: So|
1043 0040: 70 65 63 74 65 64 20 65 72 72 6f 72 3a 20 53 6f |pected error: So|
1042 0050: 6d 65 6f 6e 65 20 73 65 74 20 75 70 20 75 73 20 |meone set up us |
1044 0050: 6d 65 6f 6e 65 20 73 65 74 20 75 70 20 75 73 20 |meone set up us |
1043 0060: 74 68 65 20 62 6f 6d 62 21 00 00 00 00 00 00 00 |the bomb!.......|
1045 0060: 74 68 65 20 62 6f 6d 62 21 00 00 00 00 00 00 00 |the bomb!.......|
1044 0070: 00 |.|
1046 0070: 00 |.|
1045
1047
1046 And its handling on the other size raise a clean exception
1048 And its handling on the other size raise a clean exception
1047
1049
1048 $ cat ../genfailed.hg2 | hg unbundle2
1050 $ cat ../genfailed.hg2 | hg unbundle2
1049 0 unread bytes
1051 0 unread bytes
1050 abort: unexpected error: Someone set up us the bomb!
1052 abort: unexpected error: Someone set up us the bomb!
1051 [255]
1053 [255]
1052
1054
1053 Test compression
1055 Test compression
1054 ================
1056 ================
1055
1057
1056 Simple case where it just work: GZ
1058 Simple case where it just work: GZ
1057 ----------------------------------
1059 ----------------------------------
1058
1060
1059 $ hg bundle2 --compress GZ --rev '8+7+5+4' ../rev.hg2.bz
1061 $ hg bundle2 --compress GZ --rev '8+7+5+4' ../rev.hg2.bz
1060 $ f --hexdump ../rev.hg2.bz
1062 $ f --hexdump ../rev.hg2.bz
1061 ../rev.hg2.bz:
1063 ../rev.hg2.bz:
1062 0000: 48 47 32 30 00 00 00 0e 43 6f 6d 70 72 65 73 73 |HG20....Compress|
1064 0000: 48 47 32 30 00 00 00 0e 43 6f 6d 70 72 65 73 73 |HG20....Compress|
1063 0010: 69 6f 6e 3d 47 5a 78 9c 95 94 7d 68 95 55 1c c7 |ion=GZx...}h.U..|
1065 0010: 69 6f 6e 3d 47 5a 78 9c 95 94 7d 68 95 55 1c c7 |ion=GZx...}h.U..|
1064 0020: 9f 3b 31 e8 ce fa c3 65 be a0 a4 b4 52 b9 29 e7 |.;1....e....R.).|
1066 0020: 9f 3b 31 e8 ce fa c3 65 be a0 a4 b4 52 b9 29 e7 |.;1....e....R.).|
1065 0030: f5 79 ce 89 fa 63 ed 5e 77 8b 9c c3 3f 2a 1c 68 |.y...c.^w...?*.h|
1067 0030: f5 79 ce 89 fa 63 ed 5e 77 8b 9c c3 3f 2a 1c 68 |.y...c.^w...?*.h|
1066 0040: cf 79 9b dd 6a ae b0 28 74 b8 e5 96 5b bb 86 61 |.y..j..(t...[..a|
1068 0040: cf 79 9b dd 6a ae b0 28 74 b8 e5 96 5b bb 86 61 |.y..j..(t...[..a|
1067 0050: a3 15 6e 3a 71 c8 6a e8 a5 da 95 64 28 22 ce 69 |..n:q.j....d(".i|
1069 0050: a3 15 6e 3a 71 c8 6a e8 a5 da 95 64 28 22 ce 69 |..n:q.j....d(".i|
1068 0060: cd 06 59 34 28 2b 51 2a 58 c3 17 56 2a 9a 9d 67 |..Y4(+Q*X..V*..g|
1070 0060: cd 06 59 34 28 2b 51 2a 58 c3 17 56 2a 9a 9d 67 |..Y4(+Q*X..V*..g|
1069 0070: dc c6 35 9e c4 1d f8 9e 87 f3 9c f3 3b bf 0f bf |..5.........;...|
1071 0070: dc c6 35 9e c4 1d f8 9e 87 f3 9c f3 3b bf 0f bf |..5.........;...|
1070 0080: 97 e3 38 ce f4 42 b9 d6 af ae d2 55 af ae 7b ad |..8..B.....U..{.|
1072 0080: 97 e3 38 ce f4 42 b9 d6 af ae d2 55 af ae 7b ad |..8..B.....U..{.|
1071 0090: c6 c9 8d bb 8a ec b4 07 ed 7f fd ed d3 53 be 4e |.............S.N|
1073 0090: c6 c9 8d bb 8a ec b4 07 ed 7f fd ed d3 53 be 4e |.............S.N|
1072 00a0: f4 0e af 59 52 73 ea 50 d7 96 9e ba d4 9a 1f 87 |...YRs.P........|
1074 00a0: f4 0e af 59 52 73 ea 50 d7 96 9e ba d4 9a 1f 87 |...YRs.P........|
1073 00b0: 9b 9f 1d e8 7a 6a 79 e9 cb 7f cf eb fe 7e d3 82 |....zjy......~..|
1075 00b0: 9b 9f 1d e8 7a 6a 79 e9 cb 7f cf eb fe 7e d3 82 |....zjy......~..|
1074 00c0: ce 2f 36 38 21 23 cc 36 b7 b5 38 90 ab a1 21 92 |./68!#.6..8...!.|
1076 00c0: ce 2f 36 38 21 23 cc 36 b7 b5 38 90 ab a1 21 92 |./68!#.6..8...!.|
1075 00d0: 78 5a 0a 8a b1 31 0a 48 a6 29 92 4a 32 e6 1b e1 |xZ...1.H.).J2...|
1077 00d0: 78 5a 0a 8a b1 31 0a 48 a6 29 92 4a 32 e6 1b e1 |xZ...1.H.).J2...|
1076 00e0: 4a 85 b9 46 40 46 ed 61 63 b5 d6 aa 20 1e ac 5e |J..F@F.ac... ..^|
1078 00e0: 4a 85 b9 46 40 46 ed 61 63 b5 d6 aa 20 1e ac 5e |J..F@F.ac... ..^|
1077 00f0: b0 0a ae 8a c4 03 c6 d6 f9 a3 7b eb fb 4e de 7f |..........{..N..|
1079 00f0: b0 0a ae 8a c4 03 c6 d6 f9 a3 7b eb fb 4e de 7f |..........{..N..|
1078 0100: e4 97 55 5f 15 76 96 d2 5d bf 9d 3f 38 18 29 4c |..U_.v..]..?8.)L|
1080 0100: e4 97 55 5f 15 76 96 d2 5d bf 9d 3f 38 18 29 4c |..U_.v..]..?8.)L|
1079 0110: 0f b7 5d 6e 9b b3 aa 7e c6 d5 15 5b f7 7c 52 f1 |..]n...~...[.|R.|
1081 0110: 0f b7 5d 6e 9b b3 aa 7e c6 d5 15 5b f7 7c 52 f1 |..]n...~...[.|R.|
1080 0120: 7c 73 18 63 98 6d 3e 23 51 5a 6a 2e 19 72 8d cb ||s.c.m>#QZj..r..|
1082 0120: 7c 73 18 63 98 6d 3e 23 51 5a 6a 2e 19 72 8d cb ||s.c.m>#QZj..r..|
1081 0130: 09 07 14 78 82 33 e9 62 86 7d 0c 00 17 88 53 86 |...x.3.b.}....S.|
1083 0130: 09 07 14 78 82 33 e9 62 86 7d 0c 00 17 88 53 86 |...x.3.b.}....S.|
1082 0140: 3d 75 0b 63 e2 16 c6 84 9d 76 8f 76 7a cb de fc |=u.c.....v.vz...|
1084 0140: 3d 75 0b 63 e2 16 c6 84 9d 76 8f 76 7a cb de fc |=u.c.....v.vz...|
1083 0150: a8 a3 f0 46 d3 a5 f6 c7 96 b6 9f 60 3b 57 ae 28 |...F.......`;W.(|
1085 0150: a8 a3 f0 46 d3 a5 f6 c7 96 b6 9f 60 3b 57 ae 28 |...F.......`;W.(|
1084 0160: ce b2 8d e9 f4 3e 6f 66 53 dd e5 6b ad 67 be f9 |.....>ofS..k.g..|
1086 0160: ce b2 8d e9 f4 3e 6f 66 53 dd e5 6b ad 67 be f9 |.....>ofS..k.g..|
1085 0170: 72 ee 5f 8d 61 3c 61 b6 f9 8c d8 a5 82 63 45 3d |r._.a<a......cE=|
1087 0170: 72 ee 5f 8d 61 3c 61 b6 f9 8c d8 a5 82 63 45 3d |r._.a<a......cE=|
1086 0180: a3 0c 61 90 68 24 28 87 50 b9 c2 97 c6 20 01 11 |..a.h$(.P.... ..|
1088 0180: a3 0c 61 90 68 24 28 87 50 b9 c2 97 c6 20 01 11 |..a.h$(.P.... ..|
1087 0190: 80 84 10 98 cf e8 e4 13 96 05 51 2c 38 f3 c4 ec |..........Q,8...|
1089 0190: 80 84 10 98 cf e8 e4 13 96 05 51 2c 38 f3 c4 ec |..........Q,8...|
1088 01a0: ea 43 e7 96 5e 6a c8 be 11 dd 32 78 a2 fa dd 8f |.C..^j....2x....|
1090 01a0: ea 43 e7 96 5e 6a c8 be 11 dd 32 78 a2 fa dd 8f |.C..^j....2x....|
1089 01b0: b3 61 84 61 51 0c b3 cd 27 64 42 6b c2 b4 92 1e |.a.aQ...'dBk....|
1091 01b0: b3 61 84 61 51 0c b3 cd 27 64 42 6b c2 b4 92 1e |.a.aQ...'dBk....|
1090 01c0: 86 8c 12 68 24 00 10 db 7f 50 00 c6 91 e7 fa 4c |...h$....P.....L|
1092 01c0: 86 8c 12 68 24 00 10 db 7f 50 00 c6 91 e7 fa 4c |...h$....P.....L|
1091 01d0: 22 22 cc bf 84 81 0a 92 c1 aa 2a c7 1b 49 e6 ee |""........*..I..|
1093 01d0: 22 22 cc bf 84 81 0a 92 c1 aa 2a c7 1b 49 e6 ee |""........*..I..|
1092 01e0: 6b a9 7e e0 e9 b2 91 5e 7c 73 68 e0 fc 23 3f 34 |k.~....^|sh..#?4|
1094 01e0: 6b a9 7e e0 e9 b2 91 5e 7c 73 68 e0 fc 23 3f 34 |k.~....^|sh..#?4|
1093 01f0: ed cf 0e f2 b3 d3 4c d7 ae 59 33 6f 8c 3d b8 63 |......L..Y3o.=.c|
1095 01f0: ed cf 0e f2 b3 d3 4c d7 ae 59 33 6f 8c 3d b8 63 |......L..Y3o.=.c|
1094 0200: 21 2b e8 3d e0 6f 9d 3a b7 f9 dc 24 2a b2 3e a7 |!+.=.o.:...$*.>.|
1096 0200: 21 2b e8 3d e0 6f 9d 3a b7 f9 dc 24 2a b2 3e a7 |!+.=.o.:...$*.>.|
1095 0210: 58 dc 91 d8 40 e9 23 8e 88 84 ae 0f b9 00 2e b5 |X...@.#.........|
1097 0210: 58 dc 91 d8 40 e9 23 8e 88 84 ae 0f b9 00 2e b5 |X...@.#.........|
1096 0220: 74 36 f3 40 53 40 34 15 c0 d7 12 8d e7 bb 65 f9 |t6.@S@4.......e.|
1098 0220: 74 36 f3 40 53 40 34 15 c0 d7 12 8d e7 bb 65 f9 |t6.@S@4.......e.|
1097 0230: c8 ef 03 0f ff f9 fe b6 8a 0d 6d fd ec 51 70 f7 |..........m..Qp.|
1099 0230: c8 ef 03 0f ff f9 fe b6 8a 0d 6d fd ec 51 70 f7 |..........m..Qp.|
1098 0240: a7 ad 9b 6b 9d da 74 7b 53 43 d1 43 63 fd 19 f9 |...k..t{SC.Cc...|
1100 0240: a7 ad 9b 6b 9d da 74 7b 53 43 d1 43 63 fd 19 f9 |...k..t{SC.Cc...|
1099 0250: ca 67 95 e5 ef c4 e6 6c 9e 44 e1 c5 ac 7a 82 6f |.g.....l.D...z.o|
1101 0250: ca 67 95 e5 ef c4 e6 6c 9e 44 e1 c5 ac 7a 82 6f |.g.....l.D...z.o|
1100 0260: c2 e1 d2 b5 2d 81 29 f0 5d 09 6c 6f 10 ae 88 cf |....-.).].lo....|
1102 0260: c2 e1 d2 b5 2d 81 29 f0 5d 09 6c 6f 10 ae 88 cf |....-.).].lo....|
1101 0270: 25 05 d0 93 06 78 80 60 43 2d 10 1b 47 71 2b b7 |%....x.`C-..Gq+.|
1103 0270: 25 05 d0 93 06 78 80 60 43 2d 10 1b 47 71 2b b7 |%....x.`C-..Gq+.|
1102 0280: 7f bb e9 a7 e4 7d 67 7b df 9b f7 62 cf cd d8 f4 |.....}g{...b....|
1104 0280: 7f bb e9 a7 e4 7d 67 7b df 9b f7 62 cf cd d8 f4 |.....}g{...b....|
1103 0290: 48 bc 64 51 57 43 ff ea 8b 0b ae 74 64 53 07 86 |H.dQWC.....tdS..|
1105 0290: 48 bc 64 51 57 43 ff ea 8b 0b ae 74 64 53 07 86 |H.dQWC.....tdS..|
1104 02a0: fa 66 3c 5e f7 e1 af a7 c2 90 ff a7 be 9e c9 29 |.f<^...........)|
1106 02a0: fa 66 3c 5e f7 e1 af a7 c2 90 ff a7 be 9e c9 29 |.f<^...........)|
1105 02b0: b6 cc 41 48 18 69 94 8b 7c 04 7d 8c 98 a7 95 50 |..AH.i..|.}....P|
1107 02b0: b6 cc 41 48 18 69 94 8b 7c 04 7d 8c 98 a7 95 50 |..AH.i..|.}....P|
1106 02c0: 44 d9 d0 20 c8 14 30 14 51 ad 6c 16 03 94 0f 5a |D.. ..0.Q.l....Z|
1108 02c0: 44 d9 d0 20 c8 14 30 14 51 ad 6c 16 03 94 0f 5a |D.. ..0.Q.l....Z|
1107 02d0: 46 93 7f 1c 87 8d 25 d7 9d a2 d1 92 4c f3 c2 54 |F.....%.....L..T|
1109 02d0: 46 93 7f 1c 87 8d 25 d7 9d a2 d1 92 4c f3 c2 54 |F.....%.....L..T|
1108 02e0: ba f8 70 18 ca 24 0a 29 96 43 71 f2 93 95 74 18 |..p..$.).Cq...t.|
1110 02e0: ba f8 70 18 ca 24 0a 29 96 43 71 f2 93 95 74 18 |..p..$.).Cq...t.|
1109 02f0: b5 65 c4 b8 f6 6c 5c 34 20 1e d5 0c 21 c0 b1 90 |.e...l\4 ...!...|
1111 02f0: b5 65 c4 b8 f6 6c 5c 34 20 1e d5 0c 21 c0 b1 90 |.e...l\4 ...!...|
1110 0300: 9e 12 40 b9 18 fa 5a 00 41 a2 39 d3 a9 c1 73 21 |..@...Z.A.9...s!|
1112 0300: 9e 12 40 b9 18 fa 5a 00 41 a2 39 d3 a9 c1 73 21 |..@...Z.A.9...s!|
1111 0310: 8e 5e 3c b9 b8 f8 48 6a 76 46 a7 1a b6 dd 5b 51 |.^<...HjvF....[Q|
1113 0310: 8e 5e 3c b9 b8 f8 48 6a 76 46 a7 1a b6 dd 5b 51 |.^<...HjvF....[Q|
1112 0320: 5e 19 1d 59 12 c6 32 89 02 9a c0 8f 4f b8 0a ba |^..Y..2.....O...|
1114 0320: 5e 19 1d 59 12 c6 32 89 02 9a c0 8f 4f b8 0a ba |^..Y..2.....O...|
1113 0330: 5e ec 58 37 44 a3 2f dd 33 ed c9 d3 dd c7 22 1b |^.X7D./.3.....".|
1115 0330: 5e ec 58 37 44 a3 2f dd 33 ed c9 d3 dd c7 22 1b |^.X7D./.3.....".|
1114 0340: 2f d4 94 8e 95 3f 77 a7 ae 6e f3 32 8d bb 4a 4c |/....?w..n.2..JL|
1116 0340: 2f d4 94 8e 95 3f 77 a7 ae 6e f3 32 8d bb 4a 4c |/....?w..n.2..JL|
1115 0350: b8 0a 5a 43 34 3a b3 3a d6 77 ff 5c b6 fa ad f9 |..ZC4:.:.w.\....|
1117 0350: b8 0a 5a 43 34 3a b3 3a d6 77 ff 5c b6 fa ad f9 |..ZC4:.:.w.\....|
1116 0360: db fb 6a 33 df c1 7d 99 cf ef d4 d5 6d da 77 7c |..j3..}.....m.w||
1118 0360: db fb 6a 33 df c1 7d 99 cf ef d4 d5 6d da 77 7c |..j3..}.....m.w||
1117 0370: 3b 19 fd af c5 3f f1 60 c3 17 |;....?.`..|
1119 0370: 3b 19 fd af c5 3f f1 60 c3 17 |;....?.`..|
1118 $ hg debugbundle ../rev.hg2.bz
1120 $ hg debugbundle ../rev.hg2.bz
1119 Stream params: {'Compression': 'GZ'}
1121 Stream params: {'Compression': 'GZ'}
1120 changegroup -- '{}'
1122 changegroup -- '{}'
1121 32af7686d403cf45b5d95f2d70cebea587ac806a
1123 32af7686d403cf45b5d95f2d70cebea587ac806a
1122 9520eea781bcca16c1e15acc0ba14335a0e8e5ba
1124 9520eea781bcca16c1e15acc0ba14335a0e8e5ba
1123 eea13746799a9e0bfd88f29d3c2e9dc9389f524f
1125 eea13746799a9e0bfd88f29d3c2e9dc9389f524f
1124 02de42196ebee42ef284b6780a87cdc96e8eaab6
1126 02de42196ebee42ef284b6780a87cdc96e8eaab6
1125 $ hg unbundle ../rev.hg2.bz
1127 $ hg unbundle ../rev.hg2.bz
1126 adding changesets
1128 adding changesets
1127 adding manifests
1129 adding manifests
1128 adding file changes
1130 adding file changes
1129 added 0 changesets with 0 changes to 3 files
1131 added 0 changesets with 0 changes to 3 files
1130 (run 'hg update' to get a working copy)
1132 (run 'hg update' to get a working copy)
1131 Simple case where it just work: BZ
1133 Simple case where it just work: BZ
1132 ----------------------------------
1134 ----------------------------------
1133
1135
1134 $ hg bundle2 --compress BZ --rev '8+7+5+4' ../rev.hg2.bz
1136 $ hg bundle2 --compress BZ --rev '8+7+5+4' ../rev.hg2.bz
1135 $ f --hexdump ../rev.hg2.bz
1137 $ f --hexdump ../rev.hg2.bz
1136 ../rev.hg2.bz:
1138 ../rev.hg2.bz:
1137 0000: 48 47 32 30 00 00 00 0e 43 6f 6d 70 72 65 73 73 |HG20....Compress|
1139 0000: 48 47 32 30 00 00 00 0e 43 6f 6d 70 72 65 73 73 |HG20....Compress|
1138 0010: 69 6f 6e 3d 42 5a 42 5a 68 39 31 41 59 26 53 59 |ion=BZBZh91AY&SY|
1140 0010: 69 6f 6e 3d 42 5a 42 5a 68 39 31 41 59 26 53 59 |ion=BZBZh91AY&SY|
1139 0020: a3 4b 18 3d 00 00 1a 7f ff ff bf 5f f6 ef ef 7f |.K.=......._....|
1141 0020: a3 4b 18 3d 00 00 1a 7f ff ff bf 5f f6 ef ef 7f |.K.=......._....|
1140 0030: f6 3f f7 d1 d9 ff ff f7 6e ff ff 6e f7 f6 bd df |.?......n..n....|
1142 0030: f6 3f f7 d1 d9 ff ff f7 6e ff ff 6e f7 f6 bd df |.?......n..n....|
1141 0040: b5 ab ff cf 67 f6 e7 7b f7 c0 02 d7 33 82 8b 51 |....g..{....3..Q|
1143 0040: b5 ab ff cf 67 f6 e7 7b f7 c0 02 d7 33 82 8b 51 |....g..{....3..Q|
1142 0050: 04 a5 53 d5 3d 27 a0 99 18 4d 0d 34 00 d1 a1 e8 |..S.='...M.4....|
1144 0050: 04 a5 53 d5 3d 27 a0 99 18 4d 0d 34 00 d1 a1 e8 |..S.='...M.4....|
1143 0060: 80 c8 7a 87 a9 a3 43 6a 3d 46 86 26 80 34 3d 40 |..z...Cj=F.&.4=@|
1145 0060: 80 c8 7a 87 a9 a3 43 6a 3d 46 86 26 80 34 3d 40 |..z...Cj=F.&.4=@|
1144 0070: c8 c9 b5 34 f4 8f 48 0f 51 ea 34 34 fd 4d aa 19 |...4..H.Q.44.M..|
1146 0070: c8 c9 b5 34 f4 8f 48 0f 51 ea 34 34 fd 4d aa 19 |...4..H.Q.44.M..|
1145 0080: 03 40 0c 08 da 86 43 d4 f5 0f 42 1e a0 f3 54 33 |.@....C...B...T3|
1147 0080: 03 40 0c 08 da 86 43 d4 f5 0f 42 1e a0 f3 54 33 |.@....C...B...T3|
1146 0090: 54 d3 13 4d 03 40 32 00 00 32 03 26 80 0d 00 0d |T..M.@2..2.&....|
1148 0090: 54 d3 13 4d 03 40 32 00 00 32 03 26 80 0d 00 0d |T..M.@2..2.&....|
1147 00a0: 00 68 c8 c8 03 20 32 30 98 8c 80 00 00 03 4d 00 |.h... 20......M.|
1149 00a0: 00 68 c8 c8 03 20 32 30 98 8c 80 00 00 03 4d 00 |.h... 20......M.|
1148 00b0: c8 00 00 0d 00 00 22 99 a1 34 c2 64 a6 d5 34 1a |......"..4.d..4.|
1150 00b0: c8 00 00 0d 00 00 22 99 a1 34 c2 64 a6 d5 34 1a |......"..4.d..4.|
1149 00c0: 00 00 06 86 83 4d 07 a8 d1 a0 68 01 a0 00 00 00 |.....M....h.....|
1151 00c0: 00 00 06 86 83 4d 07 a8 d1 a0 68 01 a0 00 00 00 |.....M....h.....|
1150 00d0: 00 0d 06 80 00 00 00 0d 00 03 40 00 00 04 a4 a1 |..........@.....|
1152 00d0: 00 0d 06 80 00 00 00 0d 00 03 40 00 00 04 a4 a1 |..........@.....|
1151 00e0: 4d a9 89 89 b4 9a 32 0c 43 46 86 87 a9 8d 41 9a |M.....2.CF....A.|
1153 00e0: 4d a9 89 89 b4 9a 32 0c 43 46 86 87 a9 8d 41 9a |M.....2.CF....A.|
1152 00f0: 98 46 9a 0d 31 32 1a 34 0d 0c 8d a2 0c 98 4d 06 |.F..12.4......M.|
1154 00f0: 98 46 9a 0d 31 32 1a 34 0d 0c 8d a2 0c 98 4d 06 |.F..12.4......M.|
1153 0100: 8c 40 c2 60 8d 0d 0c 20 c9 89 fa a0 d0 d3 21 a1 |.@.`... ......!.|
1155 0100: 8c 40 c2 60 8d 0d 0c 20 c9 89 fa a0 d0 d3 21 a1 |.@.`... ......!.|
1154 0110: ea 34 d3 68 9e a6 d1 74 05 33 cb 66 96 93 28 64 |.4.h...t.3.f..(d|
1156 0110: ea 34 d3 68 9e a6 d1 74 05 33 cb 66 96 93 28 64 |.4.h...t.3.f..(d|
1155 0120: 40 91 22 ac 55 9b ea 40 7b 38 94 e2 f8 06 00 cb |@.".U..@{8......|
1157 0120: 40 91 22 ac 55 9b ea 40 7b 38 94 e2 f8 06 00 cb |@.".U..@{8......|
1156 0130: 28 02 00 4d ab 40 24 10 43 18 cf 64 b4 06 83 0c |(..M.@$.C..d....|
1158 0130: 28 02 00 4d ab 40 24 10 43 18 cf 64 b4 06 83 0c |(..M.@$.C..d....|
1157 0140: 34 6c b4 a3 d4 0a 0a e4 a8 5c 4e 23 c0 c9 7a 31 |4l.......\N#..z1|
1159 0140: 34 6c b4 a3 d4 0a 0a e4 a8 5c 4e 23 c0 c9 7a 31 |4l.......\N#..z1|
1158 0150: 97 87 77 7a 64 88 80 8e 60 97 20 93 0f 8e eb c4 |..wzd...`. .....|
1160 0150: 97 87 77 7a 64 88 80 8e 60 97 20 93 0f 8e eb c4 |..wzd...`. .....|
1159 0160: 62 a4 44 a3 52 20 b2 99 a9 2e e1 d7 29 4a 54 ac |b.D.R ......)JT.|
1161 0160: 62 a4 44 a3 52 20 b2 99 a9 2e e1 d7 29 4a 54 ac |b.D.R ......)JT.|
1160 0170: 44 7a bb cc 04 3d e0 aa bd 6a 33 5e 9b a2 57 36 |Dz...=...j3^..W6|
1162 0170: 44 7a bb cc 04 3d e0 aa bd 6a 33 5e 9b a2 57 36 |Dz...=...j3^..W6|
1161 0180: fa cb 45 bb 6d 3e c1 d9 d9 f5 83 69 8a d0 e0 e2 |..E.m>.....i....|
1163 0180: fa cb 45 bb 6d 3e c1 d9 d9 f5 83 69 8a d0 e0 e2 |..E.m>.....i....|
1162 0190: e7 ae 90 55 24 da 3f ab 78 c0 4c b4 56 a3 9e a4 |...U$.?.x.L.V...|
1164 0190: e7 ae 90 55 24 da 3f ab 78 c0 4c b4 56 a3 9e a4 |...U$.?.x.L.V...|
1163 01a0: af 9c 65 74 86 ec 6d dc 62 dc 33 ca c8 50 dd 9d |..et..m.b.3..P..|
1165 01a0: af 9c 65 74 86 ec 6d dc 62 dc 33 ca c8 50 dd 9d |..et..m.b.3..P..|
1164 01b0: 98 8e 9e 59 20 f3 f0 42 91 4a 09 f5 75 8d 3d a5 |...Y ..B.J..u.=.|
1166 01b0: 98 8e 9e 59 20 f3 f0 42 91 4a 09 f5 75 8d 3d a5 |...Y ..B.J..u.=.|
1165 01c0: a5 15 cb 8d 10 63 b0 c2 2e b2 81 f7 c1 76 0e 53 |.....c.......v.S|
1167 01c0: a5 15 cb 8d 10 63 b0 c2 2e b2 81 f7 c1 76 0e 53 |.....c.......v.S|
1166 01d0: 6c 0e 46 73 b5 ae 67 f9 4c 0b 45 6b a8 32 2a 2f |l.Fs..g.L.Ek.2*/|
1168 01d0: 6c 0e 46 73 b5 ae 67 f9 4c 0b 45 6b a8 32 2a 2f |l.Fs..g.L.Ek.2*/|
1167 01e0: a2 54 a4 44 05 20 a1 38 d1 a4 c6 09 a8 2b 08 99 |.T.D. .8.....+..|
1169 01e0: a2 54 a4 44 05 20 a1 38 d1 a4 c6 09 a8 2b 08 99 |.T.D. .8.....+..|
1168 01f0: a4 14 ae 8d a3 e3 aa 34 27 d8 44 ca c3 5d 21 8b |.......4'.D..]!.|
1170 01f0: a4 14 ae 8d a3 e3 aa 34 27 d8 44 ca c3 5d 21 8b |.......4'.D..]!.|
1169 0200: 1a 1e 97 29 71 2b 09 4a 4a 55 55 94 58 65 b2 bc |...)q+.JJUU.Xe..|
1171 0200: 1a 1e 97 29 71 2b 09 4a 4a 55 55 94 58 65 b2 bc |...)q+.JJUU.Xe..|
1170 0210: f3 a5 90 26 36 76 67 7a 51 98 d6 8a 4a 99 50 b5 |...&6vgzQ...J.P.|
1172 0210: f3 a5 90 26 36 76 67 7a 51 98 d6 8a 4a 99 50 b5 |...&6vgzQ...J.P.|
1171 0220: 99 8f 94 21 17 a9 8b f3 ad 4c 33 d4 2e 40 c8 0c |...!.....L3..@..|
1173 0220: 99 8f 94 21 17 a9 8b f3 ad 4c 33 d4 2e 40 c8 0c |...!.....L3..@..|
1172 0230: 3b 90 53 39 db 48 02 34 83 48 d6 b3 99 13 d2 58 |;.S9.H.4.H.....X|
1174 0230: 3b 90 53 39 db 48 02 34 83 48 d6 b3 99 13 d2 58 |;.S9.H.4.H.....X|
1173 0240: 65 8e 71 ac a9 06 95 f2 c4 8e b4 08 6b d3 0c ae |e.q.........k...|
1175 0240: 65 8e 71 ac a9 06 95 f2 c4 8e b4 08 6b d3 0c ae |e.q.........k...|
1174 0250: d9 90 56 71 43 a7 a2 62 16 3e 50 63 d3 57 3c 2d |..VqC..b.>Pc.W<-|
1176 0250: d9 90 56 71 43 a7 a2 62 16 3e 50 63 d3 57 3c 2d |..VqC..b.>Pc.W<-|
1175 0260: 9f 0f 34 05 08 d8 a6 4b 59 31 54 66 3a 45 0c 8a |..4....KY1Tf:E..|
1177 0260: 9f 0f 34 05 08 d8 a6 4b 59 31 54 66 3a 45 0c 8a |..4....KY1Tf:E..|
1176 0270: c7 90 3a f0 6a 83 1b f5 ca fb 80 2b 50 06 fb 51 |..:.j......+P..Q|
1178 0270: c7 90 3a f0 6a 83 1b f5 ca fb 80 2b 50 06 fb 51 |..:.j......+P..Q|
1177 0280: 7e a6 a4 d4 81 44 82 21 54 00 5b 1a 30 83 62 a3 |~....D.!T.[.0.b.|
1179 0280: 7e a6 a4 d4 81 44 82 21 54 00 5b 1a 30 83 62 a3 |~....D.!T.[.0.b.|
1178 0290: 18 b6 24 19 1e 45 df 4d 5c db a6 af 5b ac 90 fa |..$..E.M\...[...|
1180 0290: 18 b6 24 19 1e 45 df 4d 5c db a6 af 5b ac 90 fa |..$..E.M\...[...|
1179 02a0: 3e ed f9 ec 4c ba 36 ee d8 60 20 a7 c7 3b cb d1 |>...L.6..` ..;..|
1181 02a0: 3e ed f9 ec 4c ba 36 ee d8 60 20 a7 c7 3b cb d1 |>...L.6..` ..;..|
1180 02b0: 90 43 7d 27 16 50 5d ad f4 14 07 0b 90 5c cc 6b |.C}'.P]......\.k|
1182 02b0: 90 43 7d 27 16 50 5d ad f4 14 07 0b 90 5c cc 6b |.C}'.P]......\.k|
1181 02c0: 8d 3f a6 88 f4 34 37 a8 cf 14 63 36 19 f7 3e 28 |.?...47...c6..>(|
1183 02c0: 8d 3f a6 88 f4 34 37 a8 cf 14 63 36 19 f7 3e 28 |.?...47...c6..>(|
1182 02d0: de 99 e8 16 a4 9d 0d 40 a1 a7 24 52 14 a6 72 62 |.......@..$R..rb|
1184 02d0: de 99 e8 16 a4 9d 0d 40 a1 a7 24 52 14 a6 72 62 |.......@..$R..rb|
1183 02e0: 59 5a ca 2d e5 51 90 78 88 d9 c6 c7 21 d0 f7 46 |YZ.-.Q.x....!..F|
1185 02e0: 59 5a ca 2d e5 51 90 78 88 d9 c6 c7 21 d0 f7 46 |YZ.-.Q.x....!..F|
1184 02f0: b2 04 46 44 4e 20 9c 12 b1 03 4e 25 e0 a9 0c 58 |..FDN ....N%...X|
1186 02f0: b2 04 46 44 4e 20 9c 12 b1 03 4e 25 e0 a9 0c 58 |..FDN ....N%...X|
1185 0300: 5b 1d 3c 93 20 01 51 de a9 1c 69 23 32 46 14 b4 |[.<. .Q...i#2F..|
1187 0300: 5b 1d 3c 93 20 01 51 de a9 1c 69 23 32 46 14 b4 |[.<. .Q...i#2F..|
1186 0310: 90 db 17 98 98 50 03 90 29 aa 40 b0 13 d8 43 d2 |.....P..).@...C.|
1188 0310: 90 db 17 98 98 50 03 90 29 aa 40 b0 13 d8 43 d2 |.....P..).@...C.|
1187 0320: 5f c5 9d eb f3 f2 ad 41 e8 7a a9 ed a1 58 84 a6 |_......A.z...X..|
1189 0320: 5f c5 9d eb f3 f2 ad 41 e8 7a a9 ed a1 58 84 a6 |_......A.z...X..|
1188 0330: 42 bf d6 fc 24 82 c1 20 32 26 4a 15 a6 1d 29 7f |B...$.. 2&J...).|
1190 0330: 42 bf d6 fc 24 82 c1 20 32 26 4a 15 a6 1d 29 7f |B...$.. 2&J...).|
1189 0340: 7e f4 3d 07 bc 62 9a 5b ec 44 3d 72 1d 41 8b 5c |~.=..b.[.D=r.A.\|
1191 0340: 7e f4 3d 07 bc 62 9a 5b ec 44 3d 72 1d 41 8b 5c |~.=..b.[.D=r.A.\|
1190 0350: 80 de 0e 62 9a 2e f8 83 00 d5 07 a0 9c c6 74 98 |...b..........t.|
1192 0350: 80 de 0e 62 9a 2e f8 83 00 d5 07 a0 9c c6 74 98 |...b..........t.|
1191 0360: 11 b2 5e a9 38 02 03 ee fd 86 5c f4 86 b3 ae da |..^.8.....\.....|
1193 0360: 11 b2 5e a9 38 02 03 ee fd 86 5c f4 86 b3 ae da |..^.8.....\.....|
1192 0370: 05 94 01 c5 c6 ea 18 e6 ba 2a ba b3 04 5c 96 89 |.........*...\..|
1194 0370: 05 94 01 c5 c6 ea 18 e6 ba 2a ba b3 04 5c 96 89 |.........*...\..|
1193 0380: 72 63 5b 10 11 f6 67 34 98 cb e4 c0 4e fa e6 99 |rc[...g4....N...|
1195 0380: 72 63 5b 10 11 f6 67 34 98 cb e4 c0 4e fa e6 99 |rc[...g4....N...|
1194 0390: 19 6e 50 e8 26 8d 0c 17 e0 be ef e1 8e 02 6f 32 |.nP.&.........o2|
1196 0390: 19 6e 50 e8 26 8d 0c 17 e0 be ef e1 8e 02 6f 32 |.nP.&.........o2|
1195 03a0: 82 dc 26 f8 a1 08 f3 8a 0d f3 c4 75 00 48 73 b8 |..&........u.Hs.|
1197 03a0: 82 dc 26 f8 a1 08 f3 8a 0d f3 c4 75 00 48 73 b8 |..&........u.Hs.|
1196 03b0: be 3b 0d 7f d0 fd c7 78 96 ec e0 03 80 68 4d 8d |.;.....x.....hM.|
1198 03b0: be 3b 0d 7f d0 fd c7 78 96 ec e0 03 80 68 4d 8d |.;.....x.....hM.|
1197 03c0: 43 8c d7 68 58 f9 50 f0 18 cb 21 58 1b 60 cd 1f |C..hX.P...!X.`..|
1199 03c0: 43 8c d7 68 58 f9 50 f0 18 cb 21 58 1b 60 cd 1f |C..hX.P...!X.`..|
1198 03d0: 84 36 2e 16 1f 0a f7 4e 8f eb df 01 2d c2 79 0b |.6.....N....-.y.|
1200 03d0: 84 36 2e 16 1f 0a f7 4e 8f eb df 01 2d c2 79 0b |.6.....N....-.y.|
1199 03e0: f7 24 ea 0d e8 59 86 51 6e 1c 30 a3 ad 2f ee 8c |.$...Y.Qn.0../..|
1201 03e0: f7 24 ea 0d e8 59 86 51 6e 1c 30 a3 ad 2f ee 8c |.$...Y.Qn.0../..|
1200 03f0: 90 c8 84 d5 e8 34 c1 95 b2 c9 f6 4d 87 1c 7d 19 |.....4.....M..}.|
1202 03f0: 90 c8 84 d5 e8 34 c1 95 b2 c9 f6 4d 87 1c 7d 19 |.....4.....M..}.|
1201 0400: d6 41 58 56 7a e0 6c ba 10 c7 e8 33 39 36 96 e7 |.AXVz.l....396..|
1203 0400: d6 41 58 56 7a e0 6c ba 10 c7 e8 33 39 36 96 e7 |.AXVz.l....396..|
1202 0410: d2 f9 59 9a 08 95 48 38 e7 0b b7 0a 24 67 c4 39 |..Y...H8....$g.9|
1204 0410: d2 f9 59 9a 08 95 48 38 e7 0b b7 0a 24 67 c4 39 |..Y...H8....$g.9|
1203 0420: 8b 43 88 57 9c 01 f5 61 b5 e1 27 41 7e af 83 fe |.C.W...a..'A~...|
1205 0420: 8b 43 88 57 9c 01 f5 61 b5 e1 27 41 7e af 83 fe |.C.W...a..'A~...|
1204 0430: 2e e4 8a 70 a1 21 46 96 30 7a |...p.!F.0z|
1206 0430: 2e e4 8a 70 a1 21 46 96 30 7a |...p.!F.0z|
1205 $ hg debugbundle ../rev.hg2.bz
1207 $ hg debugbundle ../rev.hg2.bz
1206 Stream params: {'Compression': 'BZ'}
1208 Stream params: {'Compression': 'BZ'}
1207 changegroup -- '{}'
1209 changegroup -- '{}'
1208 32af7686d403cf45b5d95f2d70cebea587ac806a
1210 32af7686d403cf45b5d95f2d70cebea587ac806a
1209 9520eea781bcca16c1e15acc0ba14335a0e8e5ba
1211 9520eea781bcca16c1e15acc0ba14335a0e8e5ba
1210 eea13746799a9e0bfd88f29d3c2e9dc9389f524f
1212 eea13746799a9e0bfd88f29d3c2e9dc9389f524f
1211 02de42196ebee42ef284b6780a87cdc96e8eaab6
1213 02de42196ebee42ef284b6780a87cdc96e8eaab6
1212 $ hg unbundle ../rev.hg2.bz
1214 $ hg unbundle ../rev.hg2.bz
1213 adding changesets
1215 adding changesets
1214 adding manifests
1216 adding manifests
1215 adding file changes
1217 adding file changes
1216 added 0 changesets with 0 changes to 3 files
1218 added 0 changesets with 0 changes to 3 files
1217 (run 'hg update' to get a working copy)
1219 (run 'hg update' to get a working copy)
1218
1220
1219 unknown compression while unbundling
1221 unknown compression while unbundling
1220 -----------------------------
1222 -----------------------------
1221
1223
1222 $ hg bundle2 --param Compression=FooBarUnknown --rev '8+7+5+4' ../rev.hg2.bz
1224 $ hg bundle2 --param Compression=FooBarUnknown --rev '8+7+5+4' ../rev.hg2.bz
1223 $ cat ../rev.hg2.bz | hg statbundle2
1225 $ cat ../rev.hg2.bz | hg statbundle2
1224 abort: unknown parameters: Stream Parameter - Compression='FooBarUnknown'
1226 abort: unknown parameters: Stream Parameter - Compression='FooBarUnknown'
1225 [255]
1227 [255]
1226 $ hg unbundle ../rev.hg2.bz
1228 $ hg unbundle ../rev.hg2.bz
1227 abort: ../rev.hg2.bz: unknown bundle feature, Stream Parameter - Compression='FooBarUnknown'
1229 abort: ../rev.hg2.bz: unknown bundle feature, Stream Parameter - Compression='FooBarUnknown'
1228 (see https://mercurial-scm.org/wiki/BundleFeature for more information)
1230 (see https://mercurial-scm.org/wiki/BundleFeature for more information)
1229 [255]
1231 [255]
1230
1232
1231 $ cd ..
1233 $ cd ..
@@ -1,1224 +1,1228 b''
1 Test basic extension support
1 Test basic extension support
2
2
3 $ cat > foobar.py <<EOF
3 $ cat > foobar.py <<EOF
4 > import os
4 > import os
5 > from mercurial import cmdutil, commands
5 > from mercurial import cmdutil, commands
6 > cmdtable = {}
6 > cmdtable = {}
7 > command = cmdutil.command(cmdtable)
7 > command = cmdutil.command(cmdtable)
8 > def uisetup(ui):
8 > def uisetup(ui):
9 > ui.write("uisetup called\\n")
9 > ui.write("uisetup called\\n")
10 > ui.flush()
10 > def reposetup(ui, repo):
11 > def reposetup(ui, repo):
11 > ui.write("reposetup called for %s\\n" % os.path.basename(repo.root))
12 > ui.write("reposetup called for %s\\n" % os.path.basename(repo.root))
12 > ui.write("ui %s= repo.ui\\n" % (ui == repo.ui and "=" or "!"))
13 > ui.write("ui %s= repo.ui\\n" % (ui == repo.ui and "=" or "!"))
14 > ui.flush()
13 > @command('foo', [], 'hg foo')
15 > @command('foo', [], 'hg foo')
14 > def foo(ui, *args, **kwargs):
16 > def foo(ui, *args, **kwargs):
15 > ui.write("Foo\\n")
17 > ui.write("Foo\\n")
16 > @command('bar', [], 'hg bar', norepo=True)
18 > @command('bar', [], 'hg bar', norepo=True)
17 > def bar(ui, *args, **kwargs):
19 > def bar(ui, *args, **kwargs):
18 > ui.write("Bar\\n")
20 > ui.write("Bar\\n")
19 > EOF
21 > EOF
20 $ abspath=`pwd`/foobar.py
22 $ abspath=`pwd`/foobar.py
21
23
22 $ mkdir barfoo
24 $ mkdir barfoo
23 $ cp foobar.py barfoo/__init__.py
25 $ cp foobar.py barfoo/__init__.py
24 $ barfoopath=`pwd`/barfoo
26 $ barfoopath=`pwd`/barfoo
25
27
26 $ hg init a
28 $ hg init a
27 $ cd a
29 $ cd a
28 $ echo foo > file
30 $ echo foo > file
29 $ hg add file
31 $ hg add file
30 $ hg commit -m 'add file'
32 $ hg commit -m 'add file'
31
33
32 $ echo '[extensions]' >> $HGRCPATH
34 $ echo '[extensions]' >> $HGRCPATH
33 $ echo "foobar = $abspath" >> $HGRCPATH
35 $ echo "foobar = $abspath" >> $HGRCPATH
34 $ hg foo
36 $ hg foo
35 uisetup called
37 uisetup called
36 reposetup called for a
38 reposetup called for a
37 ui == repo.ui
39 ui == repo.ui
38 Foo
40 Foo
39
41
40 $ cd ..
42 $ cd ..
41 $ hg clone a b
43 $ hg clone a b
42 uisetup called
44 uisetup called
43 reposetup called for a
45 reposetup called for a
44 ui == repo.ui
46 ui == repo.ui
45 reposetup called for b
47 reposetup called for b
46 ui == repo.ui
48 ui == repo.ui
47 updating to branch default
49 updating to branch default
48 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
50 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
49
51
50 $ hg bar
52 $ hg bar
51 uisetup called
53 uisetup called
52 Bar
54 Bar
53 $ echo 'foobar = !' >> $HGRCPATH
55 $ echo 'foobar = !' >> $HGRCPATH
54
56
55 module/__init__.py-style
57 module/__init__.py-style
56
58
57 $ echo "barfoo = $barfoopath" >> $HGRCPATH
59 $ echo "barfoo = $barfoopath" >> $HGRCPATH
58 $ cd a
60 $ cd a
59 $ hg foo
61 $ hg foo
60 uisetup called
62 uisetup called
61 reposetup called for a
63 reposetup called for a
62 ui == repo.ui
64 ui == repo.ui
63 Foo
65 Foo
64 $ echo 'barfoo = !' >> $HGRCPATH
66 $ echo 'barfoo = !' >> $HGRCPATH
65
67
66 Check that extensions are loaded in phases:
68 Check that extensions are loaded in phases:
67
69
68 $ cat > foo.py <<EOF
70 $ cat > foo.py <<EOF
69 > import os
71 > import os
70 > name = os.path.basename(__file__).rsplit('.', 1)[0]
72 > name = os.path.basename(__file__).rsplit('.', 1)[0]
71 > print "1) %s imported" % name
73 > print "1) %s imported" % name
72 > def uisetup(ui):
74 > def uisetup(ui):
73 > print "2) %s uisetup" % name
75 > print "2) %s uisetup" % name
74 > def extsetup():
76 > def extsetup():
75 > print "3) %s extsetup" % name
77 > print "3) %s extsetup" % name
76 > def reposetup(ui, repo):
78 > def reposetup(ui, repo):
77 > print "4) %s reposetup" % name
79 > print "4) %s reposetup" % name
78 > EOF
80 > EOF
79
81
80 $ cp foo.py bar.py
82 $ cp foo.py bar.py
81 $ echo 'foo = foo.py' >> $HGRCPATH
83 $ echo 'foo = foo.py' >> $HGRCPATH
82 $ echo 'bar = bar.py' >> $HGRCPATH
84 $ echo 'bar = bar.py' >> $HGRCPATH
83
85
84 Command with no output, we just want to see the extensions loaded:
86 Command with no output, we just want to see the extensions loaded:
85
87
86 $ hg paths
88 $ hg paths
87 1) foo imported
89 1) foo imported
88 1) bar imported
90 1) bar imported
89 2) foo uisetup
91 2) foo uisetup
90 2) bar uisetup
92 2) bar uisetup
91 3) foo extsetup
93 3) foo extsetup
92 3) bar extsetup
94 3) bar extsetup
93 4) foo reposetup
95 4) foo reposetup
94 4) bar reposetup
96 4) bar reposetup
95
97
96 Check hgweb's load order:
98 Check hgweb's load order:
97
99
98 $ cat > hgweb.cgi <<EOF
100 $ cat > hgweb.cgi <<EOF
99 > #!/usr/bin/env python
101 > #!/usr/bin/env python
100 > from mercurial import demandimport; demandimport.enable()
102 > from mercurial import demandimport; demandimport.enable()
101 > from mercurial.hgweb import hgweb
103 > from mercurial.hgweb import hgweb
102 > from mercurial.hgweb import wsgicgi
104 > from mercurial.hgweb import wsgicgi
103 > application = hgweb('.', 'test repo')
105 > application = hgweb('.', 'test repo')
104 > wsgicgi.launch(application)
106 > wsgicgi.launch(application)
105 > EOF
107 > EOF
106
108
107 $ REQUEST_METHOD='GET' PATH_INFO='/' SCRIPT_NAME='' QUERY_STRING='' \
109 $ REQUEST_METHOD='GET' PATH_INFO='/' SCRIPT_NAME='' QUERY_STRING='' \
108 > SERVER_PORT='80' SERVER_NAME='localhost' python hgweb.cgi \
110 > SERVER_PORT='80' SERVER_NAME='localhost' python hgweb.cgi \
109 > | grep '^[0-9]) ' # ignores HTML output
111 > | grep '^[0-9]) ' # ignores HTML output
110 1) foo imported
112 1) foo imported
111 1) bar imported
113 1) bar imported
112 2) foo uisetup
114 2) foo uisetup
113 2) bar uisetup
115 2) bar uisetup
114 3) foo extsetup
116 3) foo extsetup
115 3) bar extsetup
117 3) bar extsetup
116 4) foo reposetup
118 4) foo reposetup
117 4) bar reposetup
119 4) bar reposetup
118
120
119 $ echo 'foo = !' >> $HGRCPATH
121 $ echo 'foo = !' >> $HGRCPATH
120 $ echo 'bar = !' >> $HGRCPATH
122 $ echo 'bar = !' >> $HGRCPATH
121
123
122 Check "from __future__ import absolute_import" support for external libraries
124 Check "from __future__ import absolute_import" support for external libraries
123
125
124 #if windows
126 #if windows
125 $ PATHSEP=";"
127 $ PATHSEP=";"
126 #else
128 #else
127 $ PATHSEP=":"
129 $ PATHSEP=":"
128 #endif
130 #endif
129 $ export PATHSEP
131 $ export PATHSEP
130
132
131 $ mkdir $TESTTMP/libroot
133 $ mkdir $TESTTMP/libroot
132 $ echo "s = 'libroot/ambig.py'" > $TESTTMP/libroot/ambig.py
134 $ echo "s = 'libroot/ambig.py'" > $TESTTMP/libroot/ambig.py
133 $ mkdir $TESTTMP/libroot/mod
135 $ mkdir $TESTTMP/libroot/mod
134 $ touch $TESTTMP/libroot/mod/__init__.py
136 $ touch $TESTTMP/libroot/mod/__init__.py
135 $ echo "s = 'libroot/mod/ambig.py'" > $TESTTMP/libroot/mod/ambig.py
137 $ echo "s = 'libroot/mod/ambig.py'" > $TESTTMP/libroot/mod/ambig.py
136
138
137 #if absimport
139 #if absimport
138 $ cat > $TESTTMP/libroot/mod/ambigabs.py <<EOF
140 $ cat > $TESTTMP/libroot/mod/ambigabs.py <<EOF
139 > from __future__ import absolute_import
141 > from __future__ import absolute_import
140 > import ambig # should load "libroot/ambig.py"
142 > import ambig # should load "libroot/ambig.py"
141 > s = ambig.s
143 > s = ambig.s
142 > EOF
144 > EOF
143 $ cat > loadabs.py <<EOF
145 $ cat > loadabs.py <<EOF
144 > import mod.ambigabs as ambigabs
146 > import mod.ambigabs as ambigabs
145 > def extsetup():
147 > def extsetup():
146 > print 'ambigabs.s=%s' % ambigabs.s
148 > print 'ambigabs.s=%s' % ambigabs.s
147 > EOF
149 > EOF
148 $ (PYTHONPATH=${PYTHONPATH}${PATHSEP}${TESTTMP}/libroot; hg --config extensions.loadabs=loadabs.py root)
150 $ (PYTHONPATH=${PYTHONPATH}${PATHSEP}${TESTTMP}/libroot; hg --config extensions.loadabs=loadabs.py root)
149 ambigabs.s=libroot/ambig.py
151 ambigabs.s=libroot/ambig.py
150 $TESTTMP/a (glob)
152 $TESTTMP/a (glob)
151 #endif
153 #endif
152
154
153 #if no-py3k
155 #if no-py3k
154 $ cat > $TESTTMP/libroot/mod/ambigrel.py <<EOF
156 $ cat > $TESTTMP/libroot/mod/ambigrel.py <<EOF
155 > import ambig # should load "libroot/mod/ambig.py"
157 > import ambig # should load "libroot/mod/ambig.py"
156 > s = ambig.s
158 > s = ambig.s
157 > EOF
159 > EOF
158 $ cat > loadrel.py <<EOF
160 $ cat > loadrel.py <<EOF
159 > import mod.ambigrel as ambigrel
161 > import mod.ambigrel as ambigrel
160 > def extsetup():
162 > def extsetup():
161 > print 'ambigrel.s=%s' % ambigrel.s
163 > print 'ambigrel.s=%s' % ambigrel.s
162 > EOF
164 > EOF
163 $ (PYTHONPATH=${PYTHONPATH}${PATHSEP}${TESTTMP}/libroot; hg --config extensions.loadrel=loadrel.py root)
165 $ (PYTHONPATH=${PYTHONPATH}${PATHSEP}${TESTTMP}/libroot; hg --config extensions.loadrel=loadrel.py root)
164 ambigrel.s=libroot/mod/ambig.py
166 ambigrel.s=libroot/mod/ambig.py
165 $TESTTMP/a (glob)
167 $TESTTMP/a (glob)
166 #endif
168 #endif
167
169
168 Check absolute/relative import of extension specific modules
170 Check absolute/relative import of extension specific modules
169
171
170 $ mkdir $TESTTMP/extroot
172 $ mkdir $TESTTMP/extroot
171 $ cat > $TESTTMP/extroot/bar.py <<EOF
173 $ cat > $TESTTMP/extroot/bar.py <<EOF
172 > s = 'this is extroot.bar'
174 > s = 'this is extroot.bar'
173 > EOF
175 > EOF
174 $ mkdir $TESTTMP/extroot/sub1
176 $ mkdir $TESTTMP/extroot/sub1
175 $ cat > $TESTTMP/extroot/sub1/__init__.py <<EOF
177 $ cat > $TESTTMP/extroot/sub1/__init__.py <<EOF
176 > s = 'this is extroot.sub1.__init__'
178 > s = 'this is extroot.sub1.__init__'
177 > EOF
179 > EOF
178 $ cat > $TESTTMP/extroot/sub1/baz.py <<EOF
180 $ cat > $TESTTMP/extroot/sub1/baz.py <<EOF
179 > s = 'this is extroot.sub1.baz'
181 > s = 'this is extroot.sub1.baz'
180 > EOF
182 > EOF
181 $ cat > $TESTTMP/extroot/__init__.py <<EOF
183 $ cat > $TESTTMP/extroot/__init__.py <<EOF
182 > s = 'this is extroot.__init__'
184 > s = 'this is extroot.__init__'
183 > import foo
185 > import foo
184 > def extsetup(ui):
186 > def extsetup(ui):
185 > ui.write('(extroot) ', foo.func(), '\n')
187 > ui.write('(extroot) ', foo.func(), '\n')
188 > ui.flush()
186 > EOF
189 > EOF
187
190
188 $ cat > $TESTTMP/extroot/foo.py <<EOF
191 $ cat > $TESTTMP/extroot/foo.py <<EOF
189 > # test absolute import
192 > # test absolute import
190 > buf = []
193 > buf = []
191 > def func():
194 > def func():
192 > # "not locals" case
195 > # "not locals" case
193 > import extroot.bar
196 > import extroot.bar
194 > buf.append('import extroot.bar in func(): %s' % extroot.bar.s)
197 > buf.append('import extroot.bar in func(): %s' % extroot.bar.s)
195 > return '\n(extroot) '.join(buf)
198 > return '\n(extroot) '.join(buf)
196 > # "fromlist == ('*',)" case
199 > # "fromlist == ('*',)" case
197 > from extroot.bar import *
200 > from extroot.bar import *
198 > buf.append('from extroot.bar import *: %s' % s)
201 > buf.append('from extroot.bar import *: %s' % s)
199 > # "not fromlist" and "if '.' in name" case
202 > # "not fromlist" and "if '.' in name" case
200 > import extroot.sub1.baz
203 > import extroot.sub1.baz
201 > buf.append('import extroot.sub1.baz: %s' % extroot.sub1.baz.s)
204 > buf.append('import extroot.sub1.baz: %s' % extroot.sub1.baz.s)
202 > # "not fromlist" and NOT "if '.' in name" case
205 > # "not fromlist" and NOT "if '.' in name" case
203 > import extroot
206 > import extroot
204 > buf.append('import extroot: %s' % extroot.s)
207 > buf.append('import extroot: %s' % extroot.s)
205 > # NOT "not fromlist" and NOT "level != -1" case
208 > # NOT "not fromlist" and NOT "level != -1" case
206 > from extroot.bar import s
209 > from extroot.bar import s
207 > buf.append('from extroot.bar import s: %s' % s)
210 > buf.append('from extroot.bar import s: %s' % s)
208 > EOF
211 > EOF
209 $ (PYTHONPATH=${PYTHONPATH}${PATHSEP}${TESTTMP}; hg --config extensions.extroot=$TESTTMP/extroot root)
212 $ (PYTHONPATH=${PYTHONPATH}${PATHSEP}${TESTTMP}; hg --config extensions.extroot=$TESTTMP/extroot root)
210 (extroot) from extroot.bar import *: this is extroot.bar
213 (extroot) from extroot.bar import *: this is extroot.bar
211 (extroot) import extroot.sub1.baz: this is extroot.sub1.baz
214 (extroot) import extroot.sub1.baz: this is extroot.sub1.baz
212 (extroot) import extroot: this is extroot.__init__
215 (extroot) import extroot: this is extroot.__init__
213 (extroot) from extroot.bar import s: this is extroot.bar
216 (extroot) from extroot.bar import s: this is extroot.bar
214 (extroot) import extroot.bar in func(): this is extroot.bar
217 (extroot) import extroot.bar in func(): this is extroot.bar
215 $TESTTMP/a (glob)
218 $TESTTMP/a (glob)
216
219
217 #if no-py3k
220 #if no-py3k
218 $ rm "$TESTTMP"/extroot/foo.*
221 $ rm "$TESTTMP"/extroot/foo.*
219 $ cat > $TESTTMP/extroot/foo.py <<EOF
222 $ cat > $TESTTMP/extroot/foo.py <<EOF
220 > # test relative import
223 > # test relative import
221 > buf = []
224 > buf = []
222 > def func():
225 > def func():
223 > # "not locals" case
226 > # "not locals" case
224 > import bar
227 > import bar
225 > buf.append('import bar in func(): %s' % bar.s)
228 > buf.append('import bar in func(): %s' % bar.s)
226 > return '\n(extroot) '.join(buf)
229 > return '\n(extroot) '.join(buf)
227 > # "fromlist == ('*',)" case
230 > # "fromlist == ('*',)" case
228 > from bar import *
231 > from bar import *
229 > buf.append('from bar import *: %s' % s)
232 > buf.append('from bar import *: %s' % s)
230 > # "not fromlist" and "if '.' in name" case
233 > # "not fromlist" and "if '.' in name" case
231 > import sub1.baz
234 > import sub1.baz
232 > buf.append('import sub1.baz: %s' % sub1.baz.s)
235 > buf.append('import sub1.baz: %s' % sub1.baz.s)
233 > # "not fromlist" and NOT "if '.' in name" case
236 > # "not fromlist" and NOT "if '.' in name" case
234 > import sub1
237 > import sub1
235 > buf.append('import sub1: %s' % sub1.s)
238 > buf.append('import sub1: %s' % sub1.s)
236 > # NOT "not fromlist" and NOT "level != -1" case
239 > # NOT "not fromlist" and NOT "level != -1" case
237 > from bar import s
240 > from bar import s
238 > buf.append('from bar import s: %s' % s)
241 > buf.append('from bar import s: %s' % s)
239 > EOF
242 > EOF
240 $ hg --config extensions.extroot=$TESTTMP/extroot root
243 $ hg --config extensions.extroot=$TESTTMP/extroot root
241 (extroot) from bar import *: this is extroot.bar
244 (extroot) from bar import *: this is extroot.bar
242 (extroot) import sub1.baz: this is extroot.sub1.baz
245 (extroot) import sub1.baz: this is extroot.sub1.baz
243 (extroot) import sub1: this is extroot.sub1.__init__
246 (extroot) import sub1: this is extroot.sub1.__init__
244 (extroot) from bar import s: this is extroot.bar
247 (extroot) from bar import s: this is extroot.bar
245 (extroot) import bar in func(): this is extroot.bar
248 (extroot) import bar in func(): this is extroot.bar
246 $TESTTMP/a (glob)
249 $TESTTMP/a (glob)
247 #endif
250 #endif
248
251
249 $ cd ..
252 $ cd ..
250
253
251 hide outer repo
254 hide outer repo
252 $ hg init
255 $ hg init
253
256
254 $ cat > empty.py <<EOF
257 $ cat > empty.py <<EOF
255 > '''empty cmdtable
258 > '''empty cmdtable
256 > '''
259 > '''
257 > cmdtable = {}
260 > cmdtable = {}
258 > EOF
261 > EOF
259 $ emptypath=`pwd`/empty.py
262 $ emptypath=`pwd`/empty.py
260 $ echo "empty = $emptypath" >> $HGRCPATH
263 $ echo "empty = $emptypath" >> $HGRCPATH
261 $ hg help empty
264 $ hg help empty
262 empty extension - empty cmdtable
265 empty extension - empty cmdtable
263
266
264 no commands defined
267 no commands defined
265
268
266
269
267 $ echo 'empty = !' >> $HGRCPATH
270 $ echo 'empty = !' >> $HGRCPATH
268
271
269 $ cat > debugextension.py <<EOF
272 $ cat > debugextension.py <<EOF
270 > '''only debugcommands
273 > '''only debugcommands
271 > '''
274 > '''
272 > from mercurial import cmdutil
275 > from mercurial import cmdutil
273 > cmdtable = {}
276 > cmdtable = {}
274 > command = cmdutil.command(cmdtable)
277 > command = cmdutil.command(cmdtable)
275 > @command('debugfoobar', [], 'hg debugfoobar')
278 > @command('debugfoobar', [], 'hg debugfoobar')
276 > def debugfoobar(ui, repo, *args, **opts):
279 > def debugfoobar(ui, repo, *args, **opts):
277 > "yet another debug command"
280 > "yet another debug command"
278 > pass
281 > pass
279 > @command('foo', [], 'hg foo')
282 > @command('foo', [], 'hg foo')
280 > def foo(ui, repo, *args, **opts):
283 > def foo(ui, repo, *args, **opts):
281 > """yet another foo command
284 > """yet another foo command
282 > This command has been DEPRECATED since forever.
285 > This command has been DEPRECATED since forever.
283 > """
286 > """
284 > pass
287 > pass
285 > EOF
288 > EOF
286 $ debugpath=`pwd`/debugextension.py
289 $ debugpath=`pwd`/debugextension.py
287 $ echo "debugextension = $debugpath" >> $HGRCPATH
290 $ echo "debugextension = $debugpath" >> $HGRCPATH
288
291
289 $ hg help debugextension
292 $ hg help debugextension
290 hg debugextensions
293 hg debugextensions
291
294
292 show information about active extensions
295 show information about active extensions
293
296
294 options:
297 options:
295
298
296 (some details hidden, use --verbose to show complete help)
299 (some details hidden, use --verbose to show complete help)
297
300
298
301
299 $ hg --verbose help debugextension
302 $ hg --verbose help debugextension
300 hg debugextensions
303 hg debugextensions
301
304
302 show information about active extensions
305 show information about active extensions
303
306
304 options:
307 options:
305
308
306 -T --template TEMPLATE display with template (EXPERIMENTAL)
309 -T --template TEMPLATE display with template (EXPERIMENTAL)
307
310
308 global options ([+] can be repeated):
311 global options ([+] can be repeated):
309
312
310 -R --repository REPO repository root directory or name of overlay bundle
313 -R --repository REPO repository root directory or name of overlay bundle
311 file
314 file
312 --cwd DIR change working directory
315 --cwd DIR change working directory
313 -y --noninteractive do not prompt, automatically pick the first choice for
316 -y --noninteractive do not prompt, automatically pick the first choice for
314 all prompts
317 all prompts
315 -q --quiet suppress output
318 -q --quiet suppress output
316 -v --verbose enable additional output
319 -v --verbose enable additional output
317 --config CONFIG [+] set/override config option (use 'section.name=value')
320 --config CONFIG [+] set/override config option (use 'section.name=value')
318 --debug enable debugging output
321 --debug enable debugging output
319 --debugger start debugger
322 --debugger start debugger
320 --encoding ENCODE set the charset encoding (default: ascii)
323 --encoding ENCODE set the charset encoding (default: ascii)
321 --encodingmode MODE set the charset encoding mode (default: strict)
324 --encodingmode MODE set the charset encoding mode (default: strict)
322 --traceback always print a traceback on exception
325 --traceback always print a traceback on exception
323 --time time how long the command takes
326 --time time how long the command takes
324 --profile print command execution profile
327 --profile print command execution profile
325 --version output version information and exit
328 --version output version information and exit
326 -h --help display help and exit
329 -h --help display help and exit
327 --hidden consider hidden changesets
330 --hidden consider hidden changesets
328
331
329
332
330
333
331
334
332
335
333
336
334 $ hg --debug help debugextension
337 $ hg --debug help debugextension
335 hg debugextensions
338 hg debugextensions
336
339
337 show information about active extensions
340 show information about active extensions
338
341
339 options:
342 options:
340
343
341 -T --template TEMPLATE display with template (EXPERIMENTAL)
344 -T --template TEMPLATE display with template (EXPERIMENTAL)
342
345
343 global options ([+] can be repeated):
346 global options ([+] can be repeated):
344
347
345 -R --repository REPO repository root directory or name of overlay bundle
348 -R --repository REPO repository root directory or name of overlay bundle
346 file
349 file
347 --cwd DIR change working directory
350 --cwd DIR change working directory
348 -y --noninteractive do not prompt, automatically pick the first choice for
351 -y --noninteractive do not prompt, automatically pick the first choice for
349 all prompts
352 all prompts
350 -q --quiet suppress output
353 -q --quiet suppress output
351 -v --verbose enable additional output
354 -v --verbose enable additional output
352 --config CONFIG [+] set/override config option (use 'section.name=value')
355 --config CONFIG [+] set/override config option (use 'section.name=value')
353 --debug enable debugging output
356 --debug enable debugging output
354 --debugger start debugger
357 --debugger start debugger
355 --encoding ENCODE set the charset encoding (default: ascii)
358 --encoding ENCODE set the charset encoding (default: ascii)
356 --encodingmode MODE set the charset encoding mode (default: strict)
359 --encodingmode MODE set the charset encoding mode (default: strict)
357 --traceback always print a traceback on exception
360 --traceback always print a traceback on exception
358 --time time how long the command takes
361 --time time how long the command takes
359 --profile print command execution profile
362 --profile print command execution profile
360 --version output version information and exit
363 --version output version information and exit
361 -h --help display help and exit
364 -h --help display help and exit
362 --hidden consider hidden changesets
365 --hidden consider hidden changesets
363
366
364
367
365
368
366
369
367
370
368 $ echo 'debugextension = !' >> $HGRCPATH
371 $ echo 'debugextension = !' >> $HGRCPATH
369
372
370 Asking for help about a deprecated extension should do something useful:
373 Asking for help about a deprecated extension should do something useful:
371
374
372 $ hg help glog
375 $ hg help glog
373 'glog' is provided by the following extension:
376 'glog' is provided by the following extension:
374
377
375 graphlog command to view revision graphs from a shell (DEPRECATED)
378 graphlog command to view revision graphs from a shell (DEPRECATED)
376
379
377 (use "hg help extensions" for information on enabling extensions)
380 (use "hg help extensions" for information on enabling extensions)
378
381
379 Extension module help vs command help:
382 Extension module help vs command help:
380
383
381 $ echo 'extdiff =' >> $HGRCPATH
384 $ echo 'extdiff =' >> $HGRCPATH
382 $ hg help extdiff
385 $ hg help extdiff
383 hg extdiff [OPT]... [FILE]...
386 hg extdiff [OPT]... [FILE]...
384
387
385 use external program to diff repository (or selected files)
388 use external program to diff repository (or selected files)
386
389
387 Show differences between revisions for the specified files, using an
390 Show differences between revisions for the specified files, using an
388 external program. The default program used is diff, with default options
391 external program. The default program used is diff, with default options
389 "-Npru".
392 "-Npru".
390
393
391 To select a different program, use the -p/--program option. The program
394 To select a different program, use the -p/--program option. The program
392 will be passed the names of two directories to compare. To pass additional
395 will be passed the names of two directories to compare. To pass additional
393 options to the program, use -o/--option. These will be passed before the
396 options to the program, use -o/--option. These will be passed before the
394 names of the directories to compare.
397 names of the directories to compare.
395
398
396 When two revision arguments are given, then changes are shown between
399 When two revision arguments are given, then changes are shown between
397 those revisions. If only one revision is specified then that revision is
400 those revisions. If only one revision is specified then that revision is
398 compared to the working directory, and, when no revisions are specified,
401 compared to the working directory, and, when no revisions are specified,
399 the working directory files are compared to its parent.
402 the working directory files are compared to its parent.
400
403
401 (use "hg help -e extdiff" to show help for the extdiff extension)
404 (use "hg help -e extdiff" to show help for the extdiff extension)
402
405
403 options ([+] can be repeated):
406 options ([+] can be repeated):
404
407
405 -p --program CMD comparison program to run
408 -p --program CMD comparison program to run
406 -o --option OPT [+] pass option to comparison program
409 -o --option OPT [+] pass option to comparison program
407 -r --rev REV [+] revision
410 -r --rev REV [+] revision
408 -c --change REV change made by revision
411 -c --change REV change made by revision
409 --patch compare patches for two revisions
412 --patch compare patches for two revisions
410 -I --include PATTERN [+] include names matching the given patterns
413 -I --include PATTERN [+] include names matching the given patterns
411 -X --exclude PATTERN [+] exclude names matching the given patterns
414 -X --exclude PATTERN [+] exclude names matching the given patterns
412 -S --subrepos recurse into subrepositories
415 -S --subrepos recurse into subrepositories
413
416
414 (some details hidden, use --verbose to show complete help)
417 (some details hidden, use --verbose to show complete help)
415
418
416
419
417
420
418
421
419
422
420
423
421
424
422
425
423
426
424
427
425 $ hg help --extension extdiff
428 $ hg help --extension extdiff
426 extdiff extension - command to allow external programs to compare revisions
429 extdiff extension - command to allow external programs to compare revisions
427
430
428 The extdiff Mercurial extension allows you to use external programs to compare
431 The extdiff Mercurial extension allows you to use external programs to compare
429 revisions, or revision with working directory. The external diff programs are
432 revisions, or revision with working directory. The external diff programs are
430 called with a configurable set of options and two non-option arguments: paths
433 called with a configurable set of options and two non-option arguments: paths
431 to directories containing snapshots of files to compare.
434 to directories containing snapshots of files to compare.
432
435
433 The extdiff extension also allows you to configure new diff commands, so you
436 The extdiff extension also allows you to configure new diff commands, so you
434 do not need to type 'hg extdiff -p kdiff3' always.
437 do not need to type 'hg extdiff -p kdiff3' always.
435
438
436 [extdiff]
439 [extdiff]
437 # add new command that runs GNU diff(1) in 'context diff' mode
440 # add new command that runs GNU diff(1) in 'context diff' mode
438 cdiff = gdiff -Nprc5
441 cdiff = gdiff -Nprc5
439 ## or the old way:
442 ## or the old way:
440 #cmd.cdiff = gdiff
443 #cmd.cdiff = gdiff
441 #opts.cdiff = -Nprc5
444 #opts.cdiff = -Nprc5
442
445
443 # add new command called meld, runs meld (no need to name twice). If
446 # add new command called meld, runs meld (no need to name twice). If
444 # the meld executable is not available, the meld tool in [merge-tools]
447 # the meld executable is not available, the meld tool in [merge-tools]
445 # will be used, if available
448 # will be used, if available
446 meld =
449 meld =
447
450
448 # add new command called vimdiff, runs gvimdiff with DirDiff plugin
451 # add new command called vimdiff, runs gvimdiff with DirDiff plugin
449 # (see http://www.vim.org/scripts/script.php?script_id=102) Non
452 # (see http://www.vim.org/scripts/script.php?script_id=102) Non
450 # English user, be sure to put "let g:DirDiffDynamicDiffText = 1" in
453 # English user, be sure to put "let g:DirDiffDynamicDiffText = 1" in
451 # your .vimrc
454 # your .vimrc
452 vimdiff = gvim -f "+next" \
455 vimdiff = gvim -f "+next" \
453 "+execute 'DirDiff' fnameescape(argv(0)) fnameescape(argv(1))"
456 "+execute 'DirDiff' fnameescape(argv(0)) fnameescape(argv(1))"
454
457
455 Tool arguments can include variables that are expanded at runtime:
458 Tool arguments can include variables that are expanded at runtime:
456
459
457 $parent1, $plabel1 - filename, descriptive label of first parent
460 $parent1, $plabel1 - filename, descriptive label of first parent
458 $child, $clabel - filename, descriptive label of child revision
461 $child, $clabel - filename, descriptive label of child revision
459 $parent2, $plabel2 - filename, descriptive label of second parent
462 $parent2, $plabel2 - filename, descriptive label of second parent
460 $root - repository root
463 $root - repository root
461 $parent is an alias for $parent1.
464 $parent is an alias for $parent1.
462
465
463 The extdiff extension will look in your [diff-tools] and [merge-tools]
466 The extdiff extension will look in your [diff-tools] and [merge-tools]
464 sections for diff tool arguments, when none are specified in [extdiff].
467 sections for diff tool arguments, when none are specified in [extdiff].
465
468
466 [extdiff]
469 [extdiff]
467 kdiff3 =
470 kdiff3 =
468
471
469 [diff-tools]
472 [diff-tools]
470 kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child
473 kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child
471
474
472 You can use -I/-X and list of file or directory names like normal 'hg diff'
475 You can use -I/-X and list of file or directory names like normal 'hg diff'
473 command. The extdiff extension makes snapshots of only needed files, so
476 command. The extdiff extension makes snapshots of only needed files, so
474 running the external diff program will actually be pretty fast (at least
477 running the external diff program will actually be pretty fast (at least
475 faster than having to compare the entire tree).
478 faster than having to compare the entire tree).
476
479
477 list of commands:
480 list of commands:
478
481
479 extdiff use external program to diff repository (or selected files)
482 extdiff use external program to diff repository (or selected files)
480
483
481 (use "hg help -v -e extdiff" to show built-in aliases and global options)
484 (use "hg help -v -e extdiff" to show built-in aliases and global options)
482
485
483
486
484
487
485
488
486
489
487
490
488
491
489
492
490
493
491
494
492
495
493
496
494
497
495
498
496
499
497
500
498 $ echo 'extdiff = !' >> $HGRCPATH
501 $ echo 'extdiff = !' >> $HGRCPATH
499
502
500 Test help topic with same name as extension
503 Test help topic with same name as extension
501
504
502 $ cat > multirevs.py <<EOF
505 $ cat > multirevs.py <<EOF
503 > from mercurial import cmdutil, commands
506 > from mercurial import cmdutil, commands
504 > cmdtable = {}
507 > cmdtable = {}
505 > command = cmdutil.command(cmdtable)
508 > command = cmdutil.command(cmdtable)
506 > """multirevs extension
509 > """multirevs extension
507 > Big multi-line module docstring."""
510 > Big multi-line module docstring."""
508 > @command('multirevs', [], 'ARG', norepo=True)
511 > @command('multirevs', [], 'ARG', norepo=True)
509 > def multirevs(ui, repo, arg, *args, **opts):
512 > def multirevs(ui, repo, arg, *args, **opts):
510 > """multirevs command"""
513 > """multirevs command"""
511 > pass
514 > pass
512 > EOF
515 > EOF
513 $ echo "multirevs = multirevs.py" >> $HGRCPATH
516 $ echo "multirevs = multirevs.py" >> $HGRCPATH
514
517
515 $ hg help multirevs
518 $ hg help multirevs
516 Specifying Multiple Revisions
519 Specifying Multiple Revisions
517 """""""""""""""""""""""""""""
520 """""""""""""""""""""""""""""
518
521
519 When Mercurial accepts more than one revision, they may be specified
522 When Mercurial accepts more than one revision, they may be specified
520 individually, or provided as a topologically continuous range, separated
523 individually, or provided as a topologically continuous range, separated
521 by the ":" character.
524 by the ":" character.
522
525
523 The syntax of range notation is [BEGIN]:[END], where BEGIN and END are
526 The syntax of range notation is [BEGIN]:[END], where BEGIN and END are
524 revision identifiers. Both BEGIN and END are optional. If BEGIN is not
527 revision identifiers. Both BEGIN and END are optional. If BEGIN is not
525 specified, it defaults to revision number 0. If END is not specified, it
528 specified, it defaults to revision number 0. If END is not specified, it
526 defaults to the tip. The range ":" thus means "all revisions".
529 defaults to the tip. The range ":" thus means "all revisions".
527
530
528 If BEGIN is greater than END, revisions are treated in reverse order.
531 If BEGIN is greater than END, revisions are treated in reverse order.
529
532
530 A range acts as a closed interval. This means that a range of 3:5 gives 3,
533 A range acts as a closed interval. This means that a range of 3:5 gives 3,
531 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.
534 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.
532
535
533 use "hg help -c multirevs" to see help for the multirevs command
536 use "hg help -c multirevs" to see help for the multirevs command
534
537
535
538
536
539
537
540
538
541
539
542
540 $ hg help -c multirevs
543 $ hg help -c multirevs
541 hg multirevs ARG
544 hg multirevs ARG
542
545
543 multirevs command
546 multirevs command
544
547
545 (some details hidden, use --verbose to show complete help)
548 (some details hidden, use --verbose to show complete help)
546
549
547
550
548
551
549 $ hg multirevs
552 $ hg multirevs
550 hg multirevs: invalid arguments
553 hg multirevs: invalid arguments
551 hg multirevs ARG
554 hg multirevs ARG
552
555
553 multirevs command
556 multirevs command
554
557
555 (use "hg multirevs -h" to show more help)
558 (use "hg multirevs -h" to show more help)
556 [255]
559 [255]
557
560
558
561
559
562
560 $ echo "multirevs = !" >> $HGRCPATH
563 $ echo "multirevs = !" >> $HGRCPATH
561
564
562 Issue811: Problem loading extensions twice (by site and by user)
565 Issue811: Problem loading extensions twice (by site and by user)
563
566
564 $ cat <<EOF >> $HGRCPATH
567 $ cat <<EOF >> $HGRCPATH
565 > mq =
568 > mq =
566 > strip =
569 > strip =
567 > hgext.mq =
570 > hgext.mq =
568 > hgext/mq =
571 > hgext/mq =
569 > EOF
572 > EOF
570
573
571 Show extensions:
574 Show extensions:
572 (note that mq force load strip, also checking it's not loaded twice)
575 (note that mq force load strip, also checking it's not loaded twice)
573
576
574 $ hg debugextensions
577 $ hg debugextensions
575 mq
578 mq
576 strip
579 strip
577
580
578 For extensions, which name matches one of its commands, help
581 For extensions, which name matches one of its commands, help
579 message should ask '-v -e' to get list of built-in aliases
582 message should ask '-v -e' to get list of built-in aliases
580 along with extension help itself
583 along with extension help itself
581
584
582 $ mkdir $TESTTMP/d
585 $ mkdir $TESTTMP/d
583 $ cat > $TESTTMP/d/dodo.py <<EOF
586 $ cat > $TESTTMP/d/dodo.py <<EOF
584 > """
587 > """
585 > This is an awesome 'dodo' extension. It does nothing and
588 > This is an awesome 'dodo' extension. It does nothing and
586 > writes 'Foo foo'
589 > writes 'Foo foo'
587 > """
590 > """
588 > from mercurial import cmdutil, commands
591 > from mercurial import cmdutil, commands
589 > cmdtable = {}
592 > cmdtable = {}
590 > command = cmdutil.command(cmdtable)
593 > command = cmdutil.command(cmdtable)
591 > @command('dodo', [], 'hg dodo')
594 > @command('dodo', [], 'hg dodo')
592 > def dodo(ui, *args, **kwargs):
595 > def dodo(ui, *args, **kwargs):
593 > """Does nothing"""
596 > """Does nothing"""
594 > ui.write("I do nothing. Yay\\n")
597 > ui.write("I do nothing. Yay\\n")
595 > @command('foofoo', [], 'hg foofoo')
598 > @command('foofoo', [], 'hg foofoo')
596 > def foofoo(ui, *args, **kwargs):
599 > def foofoo(ui, *args, **kwargs):
597 > """Writes 'Foo foo'"""
600 > """Writes 'Foo foo'"""
598 > ui.write("Foo foo\\n")
601 > ui.write("Foo foo\\n")
599 > EOF
602 > EOF
600 $ dodopath=$TESTTMP/d/dodo.py
603 $ dodopath=$TESTTMP/d/dodo.py
601
604
602 $ echo "dodo = $dodopath" >> $HGRCPATH
605 $ echo "dodo = $dodopath" >> $HGRCPATH
603
606
604 Make sure that user is asked to enter '-v -e' to get list of built-in aliases
607 Make sure that user is asked to enter '-v -e' to get list of built-in aliases
605 $ hg help -e dodo
608 $ hg help -e dodo
606 dodo extension -
609 dodo extension -
607
610
608 This is an awesome 'dodo' extension. It does nothing and writes 'Foo foo'
611 This is an awesome 'dodo' extension. It does nothing and writes 'Foo foo'
609
612
610 list of commands:
613 list of commands:
611
614
612 dodo Does nothing
615 dodo Does nothing
613 foofoo Writes 'Foo foo'
616 foofoo Writes 'Foo foo'
614
617
615 (use "hg help -v -e dodo" to show built-in aliases and global options)
618 (use "hg help -v -e dodo" to show built-in aliases and global options)
616
619
617 Make sure that '-v -e' prints list of built-in aliases along with
620 Make sure that '-v -e' prints list of built-in aliases along with
618 extension help itself
621 extension help itself
619 $ hg help -v -e dodo
622 $ hg help -v -e dodo
620 dodo extension -
623 dodo extension -
621
624
622 This is an awesome 'dodo' extension. It does nothing and writes 'Foo foo'
625 This is an awesome 'dodo' extension. It does nothing and writes 'Foo foo'
623
626
624 list of commands:
627 list of commands:
625
628
626 dodo Does nothing
629 dodo Does nothing
627 foofoo Writes 'Foo foo'
630 foofoo Writes 'Foo foo'
628
631
629 global options ([+] can be repeated):
632 global options ([+] can be repeated):
630
633
631 -R --repository REPO repository root directory or name of overlay bundle
634 -R --repository REPO repository root directory or name of overlay bundle
632 file
635 file
633 --cwd DIR change working directory
636 --cwd DIR change working directory
634 -y --noninteractive do not prompt, automatically pick the first choice for
637 -y --noninteractive do not prompt, automatically pick the first choice for
635 all prompts
638 all prompts
636 -q --quiet suppress output
639 -q --quiet suppress output
637 -v --verbose enable additional output
640 -v --verbose enable additional output
638 --config CONFIG [+] set/override config option (use 'section.name=value')
641 --config CONFIG [+] set/override config option (use 'section.name=value')
639 --debug enable debugging output
642 --debug enable debugging output
640 --debugger start debugger
643 --debugger start debugger
641 --encoding ENCODE set the charset encoding (default: ascii)
644 --encoding ENCODE set the charset encoding (default: ascii)
642 --encodingmode MODE set the charset encoding mode (default: strict)
645 --encodingmode MODE set the charset encoding mode (default: strict)
643 --traceback always print a traceback on exception
646 --traceback always print a traceback on exception
644 --time time how long the command takes
647 --time time how long the command takes
645 --profile print command execution profile
648 --profile print command execution profile
646 --version output version information and exit
649 --version output version information and exit
647 -h --help display help and exit
650 -h --help display help and exit
648 --hidden consider hidden changesets
651 --hidden consider hidden changesets
649
652
650 Make sure that single '-v' option shows help and built-ins only for 'dodo' command
653 Make sure that single '-v' option shows help and built-ins only for 'dodo' command
651 $ hg help -v dodo
654 $ hg help -v dodo
652 hg dodo
655 hg dodo
653
656
654 Does nothing
657 Does nothing
655
658
656 (use "hg help -e dodo" to show help for the dodo extension)
659 (use "hg help -e dodo" to show help for the dodo extension)
657
660
658 options:
661 options:
659
662
660 --mq operate on patch repository
663 --mq operate on patch repository
661
664
662 global options ([+] can be repeated):
665 global options ([+] can be repeated):
663
666
664 -R --repository REPO repository root directory or name of overlay bundle
667 -R --repository REPO repository root directory or name of overlay bundle
665 file
668 file
666 --cwd DIR change working directory
669 --cwd DIR change working directory
667 -y --noninteractive do not prompt, automatically pick the first choice for
670 -y --noninteractive do not prompt, automatically pick the first choice for
668 all prompts
671 all prompts
669 -q --quiet suppress output
672 -q --quiet suppress output
670 -v --verbose enable additional output
673 -v --verbose enable additional output
671 --config CONFIG [+] set/override config option (use 'section.name=value')
674 --config CONFIG [+] set/override config option (use 'section.name=value')
672 --debug enable debugging output
675 --debug enable debugging output
673 --debugger start debugger
676 --debugger start debugger
674 --encoding ENCODE set the charset encoding (default: ascii)
677 --encoding ENCODE set the charset encoding (default: ascii)
675 --encodingmode MODE set the charset encoding mode (default: strict)
678 --encodingmode MODE set the charset encoding mode (default: strict)
676 --traceback always print a traceback on exception
679 --traceback always print a traceback on exception
677 --time time how long the command takes
680 --time time how long the command takes
678 --profile print command execution profile
681 --profile print command execution profile
679 --version output version information and exit
682 --version output version information and exit
680 -h --help display help and exit
683 -h --help display help and exit
681 --hidden consider hidden changesets
684 --hidden consider hidden changesets
682
685
683 In case when extension name doesn't match any of its commands,
686 In case when extension name doesn't match any of its commands,
684 help message should ask for '-v' to get list of built-in aliases
687 help message should ask for '-v' to get list of built-in aliases
685 along with extension help
688 along with extension help
686 $ cat > $TESTTMP/d/dudu.py <<EOF
689 $ cat > $TESTTMP/d/dudu.py <<EOF
687 > """
690 > """
688 > This is an awesome 'dudu' extension. It does something and
691 > This is an awesome 'dudu' extension. It does something and
689 > also writes 'Beep beep'
692 > also writes 'Beep beep'
690 > """
693 > """
691 > from mercurial import cmdutil, commands
694 > from mercurial import cmdutil, commands
692 > cmdtable = {}
695 > cmdtable = {}
693 > command = cmdutil.command(cmdtable)
696 > command = cmdutil.command(cmdtable)
694 > @command('something', [], 'hg something')
697 > @command('something', [], 'hg something')
695 > def something(ui, *args, **kwargs):
698 > def something(ui, *args, **kwargs):
696 > """Does something"""
699 > """Does something"""
697 > ui.write("I do something. Yaaay\\n")
700 > ui.write("I do something. Yaaay\\n")
698 > @command('beep', [], 'hg beep')
701 > @command('beep', [], 'hg beep')
699 > def beep(ui, *args, **kwargs):
702 > def beep(ui, *args, **kwargs):
700 > """Writes 'Beep beep'"""
703 > """Writes 'Beep beep'"""
701 > ui.write("Beep beep\\n")
704 > ui.write("Beep beep\\n")
702 > EOF
705 > EOF
703 $ dudupath=$TESTTMP/d/dudu.py
706 $ dudupath=$TESTTMP/d/dudu.py
704
707
705 $ echo "dudu = $dudupath" >> $HGRCPATH
708 $ echo "dudu = $dudupath" >> $HGRCPATH
706
709
707 $ hg help -e dudu
710 $ hg help -e dudu
708 dudu extension -
711 dudu extension -
709
712
710 This is an awesome 'dudu' extension. It does something and also writes 'Beep
713 This is an awesome 'dudu' extension. It does something and also writes 'Beep
711 beep'
714 beep'
712
715
713 list of commands:
716 list of commands:
714
717
715 beep Writes 'Beep beep'
718 beep Writes 'Beep beep'
716 something Does something
719 something Does something
717
720
718 (use "hg help -v dudu" to show built-in aliases and global options)
721 (use "hg help -v dudu" to show built-in aliases and global options)
719
722
720 In case when extension name doesn't match any of its commands,
723 In case when extension name doesn't match any of its commands,
721 help options '-v' and '-v -e' should be equivalent
724 help options '-v' and '-v -e' should be equivalent
722 $ hg help -v dudu
725 $ hg help -v dudu
723 dudu extension -
726 dudu extension -
724
727
725 This is an awesome 'dudu' extension. It does something and also writes 'Beep
728 This is an awesome 'dudu' extension. It does something and also writes 'Beep
726 beep'
729 beep'
727
730
728 list of commands:
731 list of commands:
729
732
730 beep Writes 'Beep beep'
733 beep Writes 'Beep beep'
731 something Does something
734 something Does something
732
735
733 global options ([+] can be repeated):
736 global options ([+] can be repeated):
734
737
735 -R --repository REPO repository root directory or name of overlay bundle
738 -R --repository REPO repository root directory or name of overlay bundle
736 file
739 file
737 --cwd DIR change working directory
740 --cwd DIR change working directory
738 -y --noninteractive do not prompt, automatically pick the first choice for
741 -y --noninteractive do not prompt, automatically pick the first choice for
739 all prompts
742 all prompts
740 -q --quiet suppress output
743 -q --quiet suppress output
741 -v --verbose enable additional output
744 -v --verbose enable additional output
742 --config CONFIG [+] set/override config option (use 'section.name=value')
745 --config CONFIG [+] set/override config option (use 'section.name=value')
743 --debug enable debugging output
746 --debug enable debugging output
744 --debugger start debugger
747 --debugger start debugger
745 --encoding ENCODE set the charset encoding (default: ascii)
748 --encoding ENCODE set the charset encoding (default: ascii)
746 --encodingmode MODE set the charset encoding mode (default: strict)
749 --encodingmode MODE set the charset encoding mode (default: strict)
747 --traceback always print a traceback on exception
750 --traceback always print a traceback on exception
748 --time time how long the command takes
751 --time time how long the command takes
749 --profile print command execution profile
752 --profile print command execution profile
750 --version output version information and exit
753 --version output version information and exit
751 -h --help display help and exit
754 -h --help display help and exit
752 --hidden consider hidden changesets
755 --hidden consider hidden changesets
753
756
754 $ hg help -v -e dudu
757 $ hg help -v -e dudu
755 dudu extension -
758 dudu extension -
756
759
757 This is an awesome 'dudu' extension. It does something and also writes 'Beep
760 This is an awesome 'dudu' extension. It does something and also writes 'Beep
758 beep'
761 beep'
759
762
760 list of commands:
763 list of commands:
761
764
762 beep Writes 'Beep beep'
765 beep Writes 'Beep beep'
763 something Does something
766 something Does something
764
767
765 global options ([+] can be repeated):
768 global options ([+] can be repeated):
766
769
767 -R --repository REPO repository root directory or name of overlay bundle
770 -R --repository REPO repository root directory or name of overlay bundle
768 file
771 file
769 --cwd DIR change working directory
772 --cwd DIR change working directory
770 -y --noninteractive do not prompt, automatically pick the first choice for
773 -y --noninteractive do not prompt, automatically pick the first choice for
771 all prompts
774 all prompts
772 -q --quiet suppress output
775 -q --quiet suppress output
773 -v --verbose enable additional output
776 -v --verbose enable additional output
774 --config CONFIG [+] set/override config option (use 'section.name=value')
777 --config CONFIG [+] set/override config option (use 'section.name=value')
775 --debug enable debugging output
778 --debug enable debugging output
776 --debugger start debugger
779 --debugger start debugger
777 --encoding ENCODE set the charset encoding (default: ascii)
780 --encoding ENCODE set the charset encoding (default: ascii)
778 --encodingmode MODE set the charset encoding mode (default: strict)
781 --encodingmode MODE set the charset encoding mode (default: strict)
779 --traceback always print a traceback on exception
782 --traceback always print a traceback on exception
780 --time time how long the command takes
783 --time time how long the command takes
781 --profile print command execution profile
784 --profile print command execution profile
782 --version output version information and exit
785 --version output version information and exit
783 -h --help display help and exit
786 -h --help display help and exit
784 --hidden consider hidden changesets
787 --hidden consider hidden changesets
785
788
786 Disabled extension commands:
789 Disabled extension commands:
787
790
788 $ ORGHGRCPATH=$HGRCPATH
791 $ ORGHGRCPATH=$HGRCPATH
789 $ HGRCPATH=
792 $ HGRCPATH=
790 $ export HGRCPATH
793 $ export HGRCPATH
791 $ hg help email
794 $ hg help email
792 'email' is provided by the following extension:
795 'email' is provided by the following extension:
793
796
794 patchbomb command to send changesets as (a series of) patch emails
797 patchbomb command to send changesets as (a series of) patch emails
795
798
796 (use "hg help extensions" for information on enabling extensions)
799 (use "hg help extensions" for information on enabling extensions)
797
800
798
801
799 $ hg qdel
802 $ hg qdel
800 hg: unknown command 'qdel'
803 hg: unknown command 'qdel'
801 'qdelete' is provided by the following extension:
804 'qdelete' is provided by the following extension:
802
805
803 mq manage a stack of patches
806 mq manage a stack of patches
804
807
805 (use "hg help extensions" for information on enabling extensions)
808 (use "hg help extensions" for information on enabling extensions)
806 [255]
809 [255]
807
810
808
811
809 $ hg churn
812 $ hg churn
810 hg: unknown command 'churn'
813 hg: unknown command 'churn'
811 'churn' is provided by the following extension:
814 'churn' is provided by the following extension:
812
815
813 churn command to display statistics about repository history
816 churn command to display statistics about repository history
814
817
815 (use "hg help extensions" for information on enabling extensions)
818 (use "hg help extensions" for information on enabling extensions)
816 [255]
819 [255]
817
820
818
821
819
822
820 Disabled extensions:
823 Disabled extensions:
821
824
822 $ hg help churn
825 $ hg help churn
823 churn extension - command to display statistics about repository history
826 churn extension - command to display statistics about repository history
824
827
825 (use "hg help extensions" for information on enabling extensions)
828 (use "hg help extensions" for information on enabling extensions)
826
829
827 $ hg help patchbomb
830 $ hg help patchbomb
828 patchbomb extension - command to send changesets as (a series of) patch emails
831 patchbomb extension - command to send changesets as (a series of) patch emails
829
832
830 (use "hg help extensions" for information on enabling extensions)
833 (use "hg help extensions" for information on enabling extensions)
831
834
832
835
833 Broken disabled extension and command:
836 Broken disabled extension and command:
834
837
835 $ mkdir hgext
838 $ mkdir hgext
836 $ echo > hgext/__init__.py
839 $ echo > hgext/__init__.py
837 $ cat > hgext/broken.py <<EOF
840 $ cat > hgext/broken.py <<EOF
838 > "broken extension'
841 > "broken extension'
839 > EOF
842 > EOF
840 $ cat > path.py <<EOF
843 $ cat > path.py <<EOF
841 > import os, sys
844 > import os, sys
842 > sys.path.insert(0, os.environ['HGEXTPATH'])
845 > sys.path.insert(0, os.environ['HGEXTPATH'])
843 > EOF
846 > EOF
844 $ HGEXTPATH=`pwd`
847 $ HGEXTPATH=`pwd`
845 $ export HGEXTPATH
848 $ export HGEXTPATH
846
849
847 $ hg --config extensions.path=./path.py help broken
850 $ hg --config extensions.path=./path.py help broken
848 broken extension - (no help text available)
851 broken extension - (no help text available)
849
852
850 (use "hg help extensions" for information on enabling extensions)
853 (use "hg help extensions" for information on enabling extensions)
851
854
852
855
853 $ cat > hgext/forest.py <<EOF
856 $ cat > hgext/forest.py <<EOF
854 > cmdtable = None
857 > cmdtable = None
855 > EOF
858 > EOF
856 $ hg --config extensions.path=./path.py help foo > /dev/null
859 $ hg --config extensions.path=./path.py help foo > /dev/null
857 warning: error finding commands in $TESTTMP/hgext/forest.py (glob)
860 warning: error finding commands in $TESTTMP/hgext/forest.py (glob)
858 abort: no such help topic: foo
861 abort: no such help topic: foo
859 (try "hg help --keyword foo")
862 (try "hg help --keyword foo")
860 [255]
863 [255]
861
864
862 $ cat > throw.py <<EOF
865 $ cat > throw.py <<EOF
863 > from mercurial import cmdutil, commands, util
866 > from mercurial import cmdutil, commands, util
864 > cmdtable = {}
867 > cmdtable = {}
865 > command = cmdutil.command(cmdtable)
868 > command = cmdutil.command(cmdtable)
866 > class Bogon(Exception): pass
869 > class Bogon(Exception): pass
867 > @command('throw', [], 'hg throw', norepo=True)
870 > @command('throw', [], 'hg throw', norepo=True)
868 > def throw(ui, **opts):
871 > def throw(ui, **opts):
869 > """throws an exception"""
872 > """throws an exception"""
870 > raise Bogon()
873 > raise Bogon()
871 > EOF
874 > EOF
872
875
873 No declared supported version, extension complains:
876 No declared supported version, extension complains:
874 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
877 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
875 ** Unknown exception encountered with possibly-broken third-party extension throw
878 ** Unknown exception encountered with possibly-broken third-party extension throw
876 ** which supports versions unknown of Mercurial.
879 ** which supports versions unknown of Mercurial.
877 ** Please disable throw and try your action again.
880 ** Please disable throw and try your action again.
878 ** If that fixes the bug please report it to the extension author.
881 ** If that fixes the bug please report it to the extension author.
879 ** Python * (glob)
882 ** Python * (glob)
880 ** Mercurial Distributed SCM * (glob)
883 ** Mercurial Distributed SCM * (glob)
881 ** Extensions loaded: throw
884 ** Extensions loaded: throw
882
885
883 empty declaration of supported version, extension complains:
886 empty declaration of supported version, extension complains:
884 $ echo "testedwith = ''" >> throw.py
887 $ echo "testedwith = ''" >> throw.py
885 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
888 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
886 ** Unknown exception encountered with possibly-broken third-party extension throw
889 ** Unknown exception encountered with possibly-broken third-party extension throw
887 ** which supports versions unknown of Mercurial.
890 ** which supports versions unknown of Mercurial.
888 ** Please disable throw and try your action again.
891 ** Please disable throw and try your action again.
889 ** If that fixes the bug please report it to the extension author.
892 ** If that fixes the bug please report it to the extension author.
890 ** Python * (glob)
893 ** Python * (glob)
891 ** Mercurial Distributed SCM (*) (glob)
894 ** Mercurial Distributed SCM (*) (glob)
892 ** Extensions loaded: throw
895 ** Extensions loaded: throw
893
896
894 If the extension specifies a buglink, show that:
897 If the extension specifies a buglink, show that:
895 $ echo 'buglink = "http://example.com/bts"' >> throw.py
898 $ echo 'buglink = "http://example.com/bts"' >> throw.py
896 $ rm -f throw.pyc throw.pyo
899 $ rm -f throw.pyc throw.pyo
897 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
900 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
898 ** Unknown exception encountered with possibly-broken third-party extension throw
901 ** Unknown exception encountered with possibly-broken third-party extension throw
899 ** which supports versions unknown of Mercurial.
902 ** which supports versions unknown of Mercurial.
900 ** Please disable throw and try your action again.
903 ** Please disable throw and try your action again.
901 ** If that fixes the bug please report it to http://example.com/bts
904 ** If that fixes the bug please report it to http://example.com/bts
902 ** Python * (glob)
905 ** Python * (glob)
903 ** Mercurial Distributed SCM (*) (glob)
906 ** Mercurial Distributed SCM (*) (glob)
904 ** Extensions loaded: throw
907 ** Extensions loaded: throw
905
908
906 If the extensions declare outdated versions, accuse the older extension first:
909 If the extensions declare outdated versions, accuse the older extension first:
907 $ echo "from mercurial import util" >> older.py
910 $ echo "from mercurial import util" >> older.py
908 $ echo "util.version = lambda:'2.2'" >> older.py
911 $ echo "util.version = lambda:'2.2'" >> older.py
909 $ echo "testedwith = '1.9.3'" >> older.py
912 $ echo "testedwith = '1.9.3'" >> older.py
910 $ echo "testedwith = '2.1.1'" >> throw.py
913 $ echo "testedwith = '2.1.1'" >> throw.py
911 $ rm -f throw.pyc throw.pyo
914 $ rm -f throw.pyc throw.pyo
912 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
915 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
913 > throw 2>&1 | egrep '^\*\*'
916 > throw 2>&1 | egrep '^\*\*'
914 ** Unknown exception encountered with possibly-broken third-party extension older
917 ** Unknown exception encountered with possibly-broken third-party extension older
915 ** which supports versions 1.9 of Mercurial.
918 ** which supports versions 1.9 of Mercurial.
916 ** Please disable older and try your action again.
919 ** Please disable older and try your action again.
917 ** If that fixes the bug please report it to the extension author.
920 ** If that fixes the bug please report it to the extension author.
918 ** Python * (glob)
921 ** Python * (glob)
919 ** Mercurial Distributed SCM (version 2.2)
922 ** Mercurial Distributed SCM (version 2.2)
920 ** Extensions loaded: throw, older
923 ** Extensions loaded: throw, older
921
924
922 One extension only tested with older, one only with newer versions:
925 One extension only tested with older, one only with newer versions:
923 $ echo "util.version = lambda:'2.1'" >> older.py
926 $ echo "util.version = lambda:'2.1'" >> older.py
924 $ rm -f older.pyc older.pyo
927 $ rm -f older.pyc older.pyo
925 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
928 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
926 > throw 2>&1 | egrep '^\*\*'
929 > throw 2>&1 | egrep '^\*\*'
927 ** Unknown exception encountered with possibly-broken third-party extension older
930 ** Unknown exception encountered with possibly-broken third-party extension older
928 ** which supports versions 1.9 of Mercurial.
931 ** which supports versions 1.9 of Mercurial.
929 ** Please disable older and try your action again.
932 ** Please disable older and try your action again.
930 ** If that fixes the bug please report it to the extension author.
933 ** If that fixes the bug please report it to the extension author.
931 ** Python * (glob)
934 ** Python * (glob)
932 ** Mercurial Distributed SCM (version 2.1)
935 ** Mercurial Distributed SCM (version 2.1)
933 ** Extensions loaded: throw, older
936 ** Extensions loaded: throw, older
934
937
935 Older extension is tested with current version, the other only with newer:
938 Older extension is tested with current version, the other only with newer:
936 $ echo "util.version = lambda:'1.9.3'" >> older.py
939 $ echo "util.version = lambda:'1.9.3'" >> older.py
937 $ rm -f older.pyc older.pyo
940 $ rm -f older.pyc older.pyo
938 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
941 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
939 > throw 2>&1 | egrep '^\*\*'
942 > throw 2>&1 | egrep '^\*\*'
940 ** Unknown exception encountered with possibly-broken third-party extension throw
943 ** Unknown exception encountered with possibly-broken third-party extension throw
941 ** which supports versions 2.1 of Mercurial.
944 ** which supports versions 2.1 of Mercurial.
942 ** Please disable throw and try your action again.
945 ** Please disable throw and try your action again.
943 ** If that fixes the bug please report it to http://example.com/bts
946 ** If that fixes the bug please report it to http://example.com/bts
944 ** Python * (glob)
947 ** Python * (glob)
945 ** Mercurial Distributed SCM (version 1.9.3)
948 ** Mercurial Distributed SCM (version 1.9.3)
946 ** Extensions loaded: throw, older
949 ** Extensions loaded: throw, older
947
950
948 Ability to point to a different point
951 Ability to point to a different point
949 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
952 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
950 > --config ui.supportcontact='Your Local Goat Lenders' throw 2>&1 | egrep '^\*\*'
953 > --config ui.supportcontact='Your Local Goat Lenders' throw 2>&1 | egrep '^\*\*'
951 ** unknown exception encountered, please report by visiting
954 ** unknown exception encountered, please report by visiting
952 ** Your Local Goat Lenders
955 ** Your Local Goat Lenders
953 ** Python * (glob)
956 ** Python * (glob)
954 ** Mercurial Distributed SCM (*) (glob)
957 ** Mercurial Distributed SCM (*) (glob)
955 ** Extensions loaded: throw, older
958 ** Extensions loaded: throw, older
956
959
957 Declare the version as supporting this hg version, show regular bts link:
960 Declare the version as supporting this hg version, show regular bts link:
958 $ hgver=`$PYTHON -c 'from mercurial import util; print util.version().split("+")[0]'`
961 $ hgver=`$PYTHON -c 'from mercurial import util; print util.version().split("+")[0]'`
959 $ echo 'testedwith = """'"$hgver"'"""' >> throw.py
962 $ echo 'testedwith = """'"$hgver"'"""' >> throw.py
960 $ if [ -z "$hgver" ]; then
963 $ if [ -z "$hgver" ]; then
961 > echo "unable to fetch a mercurial version. Make sure __version__ is correct";
964 > echo "unable to fetch a mercurial version. Make sure __version__ is correct";
962 > fi
965 > fi
963 $ rm -f throw.pyc throw.pyo
966 $ rm -f throw.pyc throw.pyo
964 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
967 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
965 ** unknown exception encountered, please report by visiting
968 ** unknown exception encountered, please report by visiting
966 ** https://mercurial-scm.org/wiki/BugTracker
969 ** https://mercurial-scm.org/wiki/BugTracker
967 ** Python * (glob)
970 ** Python * (glob)
968 ** Mercurial Distributed SCM (*) (glob)
971 ** Mercurial Distributed SCM (*) (glob)
969 ** Extensions loaded: throw
972 ** Extensions loaded: throw
970
973
971 Patch version is ignored during compatibility check
974 Patch version is ignored during compatibility check
972 $ echo "testedwith = '3.2'" >> throw.py
975 $ echo "testedwith = '3.2'" >> throw.py
973 $ echo "util.version = lambda:'3.2.2'" >> throw.py
976 $ echo "util.version = lambda:'3.2.2'" >> throw.py
974 $ rm -f throw.pyc throw.pyo
977 $ rm -f throw.pyc throw.pyo
975 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
978 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
976 ** unknown exception encountered, please report by visiting
979 ** unknown exception encountered, please report by visiting
977 ** https://mercurial-scm.org/wiki/BugTracker
980 ** https://mercurial-scm.org/wiki/BugTracker
978 ** Python * (glob)
981 ** Python * (glob)
979 ** Mercurial Distributed SCM (*) (glob)
982 ** Mercurial Distributed SCM (*) (glob)
980 ** Extensions loaded: throw
983 ** Extensions loaded: throw
981
984
982 Test version number support in 'hg version':
985 Test version number support in 'hg version':
983 $ echo '__version__ = (1, 2, 3)' >> throw.py
986 $ echo '__version__ = (1, 2, 3)' >> throw.py
984 $ rm -f throw.pyc throw.pyo
987 $ rm -f throw.pyc throw.pyo
985 $ hg version -v
988 $ hg version -v
986 Mercurial Distributed SCM (version *) (glob)
989 Mercurial Distributed SCM (version *) (glob)
987 (see https://mercurial-scm.org for more information)
990 (see https://mercurial-scm.org for more information)
988
991
989 Copyright (C) 2005-* Matt Mackall and others (glob)
992 Copyright (C) 2005-* Matt Mackall and others (glob)
990 This is free software; see the source for copying conditions. There is NO
993 This is free software; see the source for copying conditions. There is NO
991 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
994 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
992
995
993 Enabled extensions:
996 Enabled extensions:
994
997
995
998
996 $ hg version -v --config extensions.throw=throw.py
999 $ hg version -v --config extensions.throw=throw.py
997 Mercurial Distributed SCM (version *) (glob)
1000 Mercurial Distributed SCM (version *) (glob)
998 (see https://mercurial-scm.org for more information)
1001 (see https://mercurial-scm.org for more information)
999
1002
1000 Copyright (C) 2005-* Matt Mackall and others (glob)
1003 Copyright (C) 2005-* Matt Mackall and others (glob)
1001 This is free software; see the source for copying conditions. There is NO
1004 This is free software; see the source for copying conditions. There is NO
1002 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1005 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1003
1006
1004 Enabled extensions:
1007 Enabled extensions:
1005
1008
1006 throw external 1.2.3
1009 throw external 1.2.3
1007 $ echo 'getversion = lambda: "1.twentythree"' >> throw.py
1010 $ echo 'getversion = lambda: "1.twentythree"' >> throw.py
1008 $ rm -f throw.pyc throw.pyo
1011 $ rm -f throw.pyc throw.pyo
1009 $ hg version -v --config extensions.throw=throw.py
1012 $ hg version -v --config extensions.throw=throw.py
1010 Mercurial Distributed SCM (version *) (glob)
1013 Mercurial Distributed SCM (version *) (glob)
1011 (see https://mercurial-scm.org for more information)
1014 (see https://mercurial-scm.org for more information)
1012
1015
1013 Copyright (C) 2005-* Matt Mackall and others (glob)
1016 Copyright (C) 2005-* Matt Mackall and others (glob)
1014 This is free software; see the source for copying conditions. There is NO
1017 This is free software; see the source for copying conditions. There is NO
1015 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1018 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1016
1019
1017 Enabled extensions:
1020 Enabled extensions:
1018
1021
1019 throw external 1.twentythree
1022 throw external 1.twentythree
1020
1023
1021 Refuse to load extensions with minimum version requirements
1024 Refuse to load extensions with minimum version requirements
1022
1025
1023 $ cat > minversion1.py << EOF
1026 $ cat > minversion1.py << EOF
1024 > from mercurial import util
1027 > from mercurial import util
1025 > util.version = lambda: '3.5.2'
1028 > util.version = lambda: '3.5.2'
1026 > minimumhgversion = '3.6'
1029 > minimumhgversion = '3.6'
1027 > EOF
1030 > EOF
1028 $ hg --config extensions.minversion=minversion1.py version
1031 $ hg --config extensions.minversion=minversion1.py version
1029 (third party extension minversion requires version 3.6 or newer of Mercurial; disabling)
1032 (third party extension minversion requires version 3.6 or newer of Mercurial; disabling)
1030 Mercurial Distributed SCM (version 3.5.2)
1033 Mercurial Distributed SCM (version 3.5.2)
1031 (see https://mercurial-scm.org for more information)
1034 (see https://mercurial-scm.org for more information)
1032
1035
1033 Copyright (C) 2005-* Matt Mackall and others (glob)
1036 Copyright (C) 2005-* Matt Mackall and others (glob)
1034 This is free software; see the source for copying conditions. There is NO
1037 This is free software; see the source for copying conditions. There is NO
1035 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1038 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1036
1039
1037 $ cat > minversion2.py << EOF
1040 $ cat > minversion2.py << EOF
1038 > from mercurial import util
1041 > from mercurial import util
1039 > util.version = lambda: '3.6'
1042 > util.version = lambda: '3.6'
1040 > minimumhgversion = '3.7'
1043 > minimumhgversion = '3.7'
1041 > EOF
1044 > EOF
1042 $ hg --config extensions.minversion=minversion2.py version 2>&1 | egrep '\(third'
1045 $ hg --config extensions.minversion=minversion2.py version 2>&1 | egrep '\(third'
1043 (third party extension minversion requires version 3.7 or newer of Mercurial; disabling)
1046 (third party extension minversion requires version 3.7 or newer of Mercurial; disabling)
1044
1047
1045 Can load version that is only off by point release
1048 Can load version that is only off by point release
1046
1049
1047 $ cat > minversion2.py << EOF
1050 $ cat > minversion2.py << EOF
1048 > from mercurial import util
1051 > from mercurial import util
1049 > util.version = lambda: '3.6.1'
1052 > util.version = lambda: '3.6.1'
1050 > minimumhgversion = '3.6'
1053 > minimumhgversion = '3.6'
1051 > EOF
1054 > EOF
1052 $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
1055 $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
1053 [1]
1056 [1]
1054
1057
1055 Can load minimum version identical to current
1058 Can load minimum version identical to current
1056
1059
1057 $ cat > minversion3.py << EOF
1060 $ cat > minversion3.py << EOF
1058 > from mercurial import util
1061 > from mercurial import util
1059 > util.version = lambda: '3.5'
1062 > util.version = lambda: '3.5'
1060 > minimumhgversion = '3.5'
1063 > minimumhgversion = '3.5'
1061 > EOF
1064 > EOF
1062 $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
1065 $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
1063 [1]
1066 [1]
1064
1067
1065 Restore HGRCPATH
1068 Restore HGRCPATH
1066
1069
1067 $ HGRCPATH=$ORGHGRCPATH
1070 $ HGRCPATH=$ORGHGRCPATH
1068 $ export HGRCPATH
1071 $ export HGRCPATH
1069
1072
1070 Commands handling multiple repositories at a time should invoke only
1073 Commands handling multiple repositories at a time should invoke only
1071 "reposetup()" of extensions enabling in the target repository.
1074 "reposetup()" of extensions enabling in the target repository.
1072
1075
1073 $ mkdir reposetup-test
1076 $ mkdir reposetup-test
1074 $ cd reposetup-test
1077 $ cd reposetup-test
1075
1078
1076 $ cat > $TESTTMP/reposetuptest.py <<EOF
1079 $ cat > $TESTTMP/reposetuptest.py <<EOF
1077 > from mercurial import extensions
1080 > from mercurial import extensions
1078 > def reposetup(ui, repo):
1081 > def reposetup(ui, repo):
1079 > ui.write('reposetup() for %s\n' % (repo.root))
1082 > ui.write('reposetup() for %s\n' % (repo.root))
1083 > ui.flush()
1080 > EOF
1084 > EOF
1081 $ hg init src
1085 $ hg init src
1082 $ echo a > src/a
1086 $ echo a > src/a
1083 $ hg -R src commit -Am '#0 at src/a'
1087 $ hg -R src commit -Am '#0 at src/a'
1084 adding a
1088 adding a
1085 $ echo '[extensions]' >> src/.hg/hgrc
1089 $ echo '[extensions]' >> src/.hg/hgrc
1086 $ echo '# enable extension locally' >> src/.hg/hgrc
1090 $ echo '# enable extension locally' >> src/.hg/hgrc
1087 $ echo "reposetuptest = $TESTTMP/reposetuptest.py" >> src/.hg/hgrc
1091 $ echo "reposetuptest = $TESTTMP/reposetuptest.py" >> src/.hg/hgrc
1088 $ hg -R src status
1092 $ hg -R src status
1089 reposetup() for $TESTTMP/reposetup-test/src (glob)
1093 reposetup() for $TESTTMP/reposetup-test/src (glob)
1090
1094
1091 $ hg clone -U src clone-dst1
1095 $ hg clone -U src clone-dst1
1092 reposetup() for $TESTTMP/reposetup-test/src (glob)
1096 reposetup() for $TESTTMP/reposetup-test/src (glob)
1093 $ hg init push-dst1
1097 $ hg init push-dst1
1094 $ hg -q -R src push push-dst1
1098 $ hg -q -R src push push-dst1
1095 reposetup() for $TESTTMP/reposetup-test/src (glob)
1099 reposetup() for $TESTTMP/reposetup-test/src (glob)
1096 $ hg init pull-src1
1100 $ hg init pull-src1
1097 $ hg -q -R pull-src1 pull src
1101 $ hg -q -R pull-src1 pull src
1098 reposetup() for $TESTTMP/reposetup-test/src (glob)
1102 reposetup() for $TESTTMP/reposetup-test/src (glob)
1099
1103
1100 $ cat <<EOF >> $HGRCPATH
1104 $ cat <<EOF >> $HGRCPATH
1101 > [extensions]
1105 > [extensions]
1102 > # disable extension globally and explicitly
1106 > # disable extension globally and explicitly
1103 > reposetuptest = !
1107 > reposetuptest = !
1104 > EOF
1108 > EOF
1105 $ hg clone -U src clone-dst2
1109 $ hg clone -U src clone-dst2
1106 reposetup() for $TESTTMP/reposetup-test/src (glob)
1110 reposetup() for $TESTTMP/reposetup-test/src (glob)
1107 $ hg init push-dst2
1111 $ hg init push-dst2
1108 $ hg -q -R src push push-dst2
1112 $ hg -q -R src push push-dst2
1109 reposetup() for $TESTTMP/reposetup-test/src (glob)
1113 reposetup() for $TESTTMP/reposetup-test/src (glob)
1110 $ hg init pull-src2
1114 $ hg init pull-src2
1111 $ hg -q -R pull-src2 pull src
1115 $ hg -q -R pull-src2 pull src
1112 reposetup() for $TESTTMP/reposetup-test/src (glob)
1116 reposetup() for $TESTTMP/reposetup-test/src (glob)
1113
1117
1114 $ cat <<EOF >> $HGRCPATH
1118 $ cat <<EOF >> $HGRCPATH
1115 > [extensions]
1119 > [extensions]
1116 > # enable extension globally
1120 > # enable extension globally
1117 > reposetuptest = $TESTTMP/reposetuptest.py
1121 > reposetuptest = $TESTTMP/reposetuptest.py
1118 > EOF
1122 > EOF
1119 $ hg clone -U src clone-dst3
1123 $ hg clone -U src clone-dst3
1120 reposetup() for $TESTTMP/reposetup-test/src (glob)
1124 reposetup() for $TESTTMP/reposetup-test/src (glob)
1121 reposetup() for $TESTTMP/reposetup-test/clone-dst3 (glob)
1125 reposetup() for $TESTTMP/reposetup-test/clone-dst3 (glob)
1122 $ hg init push-dst3
1126 $ hg init push-dst3
1123 reposetup() for $TESTTMP/reposetup-test/push-dst3 (glob)
1127 reposetup() for $TESTTMP/reposetup-test/push-dst3 (glob)
1124 $ hg -q -R src push push-dst3
1128 $ hg -q -R src push push-dst3
1125 reposetup() for $TESTTMP/reposetup-test/src (glob)
1129 reposetup() for $TESTTMP/reposetup-test/src (glob)
1126 reposetup() for $TESTTMP/reposetup-test/push-dst3 (glob)
1130 reposetup() for $TESTTMP/reposetup-test/push-dst3 (glob)
1127 $ hg init pull-src3
1131 $ hg init pull-src3
1128 reposetup() for $TESTTMP/reposetup-test/pull-src3 (glob)
1132 reposetup() for $TESTTMP/reposetup-test/pull-src3 (glob)
1129 $ hg -q -R pull-src3 pull src
1133 $ hg -q -R pull-src3 pull src
1130 reposetup() for $TESTTMP/reposetup-test/pull-src3 (glob)
1134 reposetup() for $TESTTMP/reposetup-test/pull-src3 (glob)
1131 reposetup() for $TESTTMP/reposetup-test/src (glob)
1135 reposetup() for $TESTTMP/reposetup-test/src (glob)
1132
1136
1133 $ echo '[extensions]' >> src/.hg/hgrc
1137 $ echo '[extensions]' >> src/.hg/hgrc
1134 $ echo '# disable extension locally' >> src/.hg/hgrc
1138 $ echo '# disable extension locally' >> src/.hg/hgrc
1135 $ echo 'reposetuptest = !' >> src/.hg/hgrc
1139 $ echo 'reposetuptest = !' >> src/.hg/hgrc
1136 $ hg clone -U src clone-dst4
1140 $ hg clone -U src clone-dst4
1137 reposetup() for $TESTTMP/reposetup-test/clone-dst4 (glob)
1141 reposetup() for $TESTTMP/reposetup-test/clone-dst4 (glob)
1138 $ hg init push-dst4
1142 $ hg init push-dst4
1139 reposetup() for $TESTTMP/reposetup-test/push-dst4 (glob)
1143 reposetup() for $TESTTMP/reposetup-test/push-dst4 (glob)
1140 $ hg -q -R src push push-dst4
1144 $ hg -q -R src push push-dst4
1141 reposetup() for $TESTTMP/reposetup-test/push-dst4 (glob)
1145 reposetup() for $TESTTMP/reposetup-test/push-dst4 (glob)
1142 $ hg init pull-src4
1146 $ hg init pull-src4
1143 reposetup() for $TESTTMP/reposetup-test/pull-src4 (glob)
1147 reposetup() for $TESTTMP/reposetup-test/pull-src4 (glob)
1144 $ hg -q -R pull-src4 pull src
1148 $ hg -q -R pull-src4 pull src
1145 reposetup() for $TESTTMP/reposetup-test/pull-src4 (glob)
1149 reposetup() for $TESTTMP/reposetup-test/pull-src4 (glob)
1146
1150
1147 disabling in command line overlays with all configuration
1151 disabling in command line overlays with all configuration
1148 $ hg --config extensions.reposetuptest=! clone -U src clone-dst5
1152 $ hg --config extensions.reposetuptest=! clone -U src clone-dst5
1149 $ hg --config extensions.reposetuptest=! init push-dst5
1153 $ hg --config extensions.reposetuptest=! init push-dst5
1150 $ hg --config extensions.reposetuptest=! -q -R src push push-dst5
1154 $ hg --config extensions.reposetuptest=! -q -R src push push-dst5
1151 $ hg --config extensions.reposetuptest=! init pull-src5
1155 $ hg --config extensions.reposetuptest=! init pull-src5
1152 $ hg --config extensions.reposetuptest=! -q -R pull-src5 pull src
1156 $ hg --config extensions.reposetuptest=! -q -R pull-src5 pull src
1153
1157
1154 $ cat <<EOF >> $HGRCPATH
1158 $ cat <<EOF >> $HGRCPATH
1155 > [extensions]
1159 > [extensions]
1156 > # disable extension globally and explicitly
1160 > # disable extension globally and explicitly
1157 > reposetuptest = !
1161 > reposetuptest = !
1158 > EOF
1162 > EOF
1159 $ hg init parent
1163 $ hg init parent
1160 $ hg init parent/sub1
1164 $ hg init parent/sub1
1161 $ echo 1 > parent/sub1/1
1165 $ echo 1 > parent/sub1/1
1162 $ hg -R parent/sub1 commit -Am '#0 at parent/sub1'
1166 $ hg -R parent/sub1 commit -Am '#0 at parent/sub1'
1163 adding 1
1167 adding 1
1164 $ hg init parent/sub2
1168 $ hg init parent/sub2
1165 $ hg init parent/sub2/sub21
1169 $ hg init parent/sub2/sub21
1166 $ echo 21 > parent/sub2/sub21/21
1170 $ echo 21 > parent/sub2/sub21/21
1167 $ hg -R parent/sub2/sub21 commit -Am '#0 at parent/sub2/sub21'
1171 $ hg -R parent/sub2/sub21 commit -Am '#0 at parent/sub2/sub21'
1168 adding 21
1172 adding 21
1169 $ cat > parent/sub2/.hgsub <<EOF
1173 $ cat > parent/sub2/.hgsub <<EOF
1170 > sub21 = sub21
1174 > sub21 = sub21
1171 > EOF
1175 > EOF
1172 $ hg -R parent/sub2 commit -Am '#0 at parent/sub2'
1176 $ hg -R parent/sub2 commit -Am '#0 at parent/sub2'
1173 adding .hgsub
1177 adding .hgsub
1174 $ hg init parent/sub3
1178 $ hg init parent/sub3
1175 $ echo 3 > parent/sub3/3
1179 $ echo 3 > parent/sub3/3
1176 $ hg -R parent/sub3 commit -Am '#0 at parent/sub3'
1180 $ hg -R parent/sub3 commit -Am '#0 at parent/sub3'
1177 adding 3
1181 adding 3
1178 $ cat > parent/.hgsub <<EOF
1182 $ cat > parent/.hgsub <<EOF
1179 > sub1 = sub1
1183 > sub1 = sub1
1180 > sub2 = sub2
1184 > sub2 = sub2
1181 > sub3 = sub3
1185 > sub3 = sub3
1182 > EOF
1186 > EOF
1183 $ hg -R parent commit -Am '#0 at parent'
1187 $ hg -R parent commit -Am '#0 at parent'
1184 adding .hgsub
1188 adding .hgsub
1185 $ echo '[extensions]' >> parent/.hg/hgrc
1189 $ echo '[extensions]' >> parent/.hg/hgrc
1186 $ echo '# enable extension locally' >> parent/.hg/hgrc
1190 $ echo '# enable extension locally' >> parent/.hg/hgrc
1187 $ echo "reposetuptest = $TESTTMP/reposetuptest.py" >> parent/.hg/hgrc
1191 $ echo "reposetuptest = $TESTTMP/reposetuptest.py" >> parent/.hg/hgrc
1188 $ cp parent/.hg/hgrc parent/sub2/.hg/hgrc
1192 $ cp parent/.hg/hgrc parent/sub2/.hg/hgrc
1189 $ hg -R parent status -S -A
1193 $ hg -R parent status -S -A
1190 reposetup() for $TESTTMP/reposetup-test/parent (glob)
1194 reposetup() for $TESTTMP/reposetup-test/parent (glob)
1191 reposetup() for $TESTTMP/reposetup-test/parent/sub2 (glob)
1195 reposetup() for $TESTTMP/reposetup-test/parent/sub2 (glob)
1192 C .hgsub
1196 C .hgsub
1193 C .hgsubstate
1197 C .hgsubstate
1194 C sub1/1
1198 C sub1/1
1195 C sub2/.hgsub
1199 C sub2/.hgsub
1196 C sub2/.hgsubstate
1200 C sub2/.hgsubstate
1197 C sub2/sub21/21
1201 C sub2/sub21/21
1198 C sub3/3
1202 C sub3/3
1199
1203
1200 $ cd ..
1204 $ cd ..
1201
1205
1202 Test synopsis and docstring extending
1206 Test synopsis and docstring extending
1203
1207
1204 $ hg init exthelp
1208 $ hg init exthelp
1205 $ cat > exthelp.py <<EOF
1209 $ cat > exthelp.py <<EOF
1206 > from mercurial import commands, extensions
1210 > from mercurial import commands, extensions
1207 > def exbookmarks(orig, *args, **opts):
1211 > def exbookmarks(orig, *args, **opts):
1208 > return orig(*args, **opts)
1212 > return orig(*args, **opts)
1209 > def uisetup(ui):
1213 > def uisetup(ui):
1210 > synopsis = ' GREPME [--foo] [-x]'
1214 > synopsis = ' GREPME [--foo] [-x]'
1211 > docstring = '''
1215 > docstring = '''
1212 > GREPME make sure that this is in the help!
1216 > GREPME make sure that this is in the help!
1213 > '''
1217 > '''
1214 > extensions.wrapcommand(commands.table, 'bookmarks', exbookmarks,
1218 > extensions.wrapcommand(commands.table, 'bookmarks', exbookmarks,
1215 > synopsis, docstring)
1219 > synopsis, docstring)
1216 > EOF
1220 > EOF
1217 $ abspath=`pwd`/exthelp.py
1221 $ abspath=`pwd`/exthelp.py
1218 $ echo '[extensions]' >> $HGRCPATH
1222 $ echo '[extensions]' >> $HGRCPATH
1219 $ echo "exthelp = $abspath" >> $HGRCPATH
1223 $ echo "exthelp = $abspath" >> $HGRCPATH
1220 $ cd exthelp
1224 $ cd exthelp
1221 $ hg help bookmarks | grep GREPME
1225 $ hg help bookmarks | grep GREPME
1222 hg bookmarks [OPTIONS]... [NAME]... GREPME [--foo] [-x]
1226 hg bookmarks [OPTIONS]... [NAME]... GREPME [--foo] [-x]
1223 GREPME make sure that this is in the help!
1227 GREPME make sure that this is in the help!
1224
1228
@@ -1,1079 +1,1079 b''
1 $ cat >> $HGRCPATH << EOF
1 $ cat >> $HGRCPATH << EOF
2 > [phases]
2 > [phases]
3 > # public changeset are not obsolete
3 > # public changeset are not obsolete
4 > publish=false
4 > publish=false
5 > [ui]
5 > [ui]
6 > logtemplate="{rev}:{node|short} ({phase}) [{tags} {bookmarks}] {desc|firstline}\n"
6 > logtemplate="{rev}:{node|short} ({phase}) [{tags} {bookmarks}] {desc|firstline}\n"
7 > [experimental]
7 > [experimental]
8 > # drop me once bundle2 is the default,
8 > # drop me once bundle2 is the default,
9 > # added to get test change early.
9 > # added to get test change early.
10 > bundle2-exp = True
10 > bundle2-exp = True
11 > EOF
11 > EOF
12 $ mkcommit() {
12 $ mkcommit() {
13 > echo "$1" > "$1"
13 > echo "$1" > "$1"
14 > hg add "$1"
14 > hg add "$1"
15 > hg ci -m "add $1"
15 > hg ci -m "add $1"
16 > }
16 > }
17 $ getid() {
17 $ getid() {
18 > hg log -T "{node}\n" --hidden -r "desc('$1')"
18 > hg log -T "{node}\n" --hidden -r "desc('$1')"
19 > }
19 > }
20
20
21 $ cat > debugkeys.py <<EOF
21 $ cat > debugkeys.py <<EOF
22 > def reposetup(ui, repo):
22 > def reposetup(ui, repo):
23 > class debugkeysrepo(repo.__class__):
23 > class debugkeysrepo(repo.__class__):
24 > def listkeys(self, namespace):
24 > def listkeys(self, namespace):
25 > ui.write('listkeys %s\n' % (namespace,))
25 > ui.write('listkeys %s\n' % (namespace,))
26 > return super(debugkeysrepo, self).listkeys(namespace)
26 > return super(debugkeysrepo, self).listkeys(namespace)
27 >
27 >
28 > if repo.local():
28 > if repo.local():
29 > repo.__class__ = debugkeysrepo
29 > repo.__class__ = debugkeysrepo
30 > EOF
30 > EOF
31
31
32 $ hg init tmpa
32 $ hg init tmpa
33 $ cd tmpa
33 $ cd tmpa
34 $ mkcommit kill_me
34 $ mkcommit kill_me
35
35
36 Checking that the feature is properly disabled
36 Checking that the feature is properly disabled
37
37
38 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
38 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
39 abort: creating obsolete markers is not enabled on this repo
39 abort: creating obsolete markers is not enabled on this repo
40 [255]
40 [255]
41
41
42 Enabling it
42 Enabling it
43
43
44 $ cat >> $HGRCPATH << EOF
44 $ cat >> $HGRCPATH << EOF
45 > [experimental]
45 > [experimental]
46 > evolution=createmarkers,exchange
46 > evolution=createmarkers,exchange
47 > EOF
47 > EOF
48
48
49 Killing a single changeset without replacement
49 Killing a single changeset without replacement
50
50
51 $ hg debugobsolete 0
51 $ hg debugobsolete 0
52 abort: changeset references must be full hexadecimal node identifiers
52 abort: changeset references must be full hexadecimal node identifiers
53 [255]
53 [255]
54 $ hg debugobsolete '00'
54 $ hg debugobsolete '00'
55 abort: changeset references must be full hexadecimal node identifiers
55 abort: changeset references must be full hexadecimal node identifiers
56 [255]
56 [255]
57 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
57 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
58 $ hg debugobsolete
58 $ hg debugobsolete
59 97b7c2d76b1845ed3eb988cd612611e72406cef0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'babar'}
59 97b7c2d76b1845ed3eb988cd612611e72406cef0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'babar'}
60
60
61 (test that mercurial is not confused)
61 (test that mercurial is not confused)
62
62
63 $ hg up null --quiet # having 0 as parent prevents it to be hidden
63 $ hg up null --quiet # having 0 as parent prevents it to be hidden
64 $ hg tip
64 $ hg tip
65 -1:000000000000 (public) [tip ]
65 -1:000000000000 (public) [tip ]
66 $ hg up --hidden tip --quiet
66 $ hg up --hidden tip --quiet
67
67
68 Killing a single changeset with itself should fail
68 Killing a single changeset with itself should fail
69 (simple local safeguard)
69 (simple local safeguard)
70
70
71 $ hg debugobsolete `getid kill_me` `getid kill_me`
71 $ hg debugobsolete `getid kill_me` `getid kill_me`
72 abort: bad obsmarker input: in-marker cycle with 97b7c2d76b1845ed3eb988cd612611e72406cef0
72 abort: bad obsmarker input: in-marker cycle with 97b7c2d76b1845ed3eb988cd612611e72406cef0
73 [255]
73 [255]
74
74
75 $ cd ..
75 $ cd ..
76
76
77 Killing a single changeset with replacement
77 Killing a single changeset with replacement
78 (and testing the format option)
78 (and testing the format option)
79
79
80 $ hg init tmpb
80 $ hg init tmpb
81 $ cd tmpb
81 $ cd tmpb
82 $ mkcommit a
82 $ mkcommit a
83 $ mkcommit b
83 $ mkcommit b
84 $ mkcommit original_c
84 $ mkcommit original_c
85 $ hg up "desc('b')"
85 $ hg up "desc('b')"
86 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
86 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
87 $ mkcommit new_c
87 $ mkcommit new_c
88 created new head
88 created new head
89 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
89 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
90 $ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120'
90 $ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120'
91 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
91 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
92 2:245bde4270cd add original_c
92 2:245bde4270cd add original_c
93 $ hg debugrevlog -cd
93 $ hg debugrevlog -cd
94 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
94 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
95 0 -1 -1 0 59 0 0 0 0 58 58 0 1 0
95 0 -1 -1 0 59 0 0 0 0 58 58 0 1 0
96 1 0 -1 59 118 59 59 0 0 58 116 0 1 0
96 1 0 -1 59 118 59 59 0 0 58 116 0 1 0
97 2 1 -1 118 193 118 118 59 0 76 192 0 1 0
97 2 1 -1 118 193 118 118 59 0 76 192 0 1 0
98 3 1 -1 193 260 193 193 59 0 66 258 0 2 0
98 3 1 -1 193 260 193 193 59 0 66 258 0 2 0
99 $ hg debugobsolete
99 $ hg debugobsolete
100 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
100 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
101
101
102 (check for version number of the obsstore)
102 (check for version number of the obsstore)
103
103
104 $ dd bs=1 count=1 if=.hg/store/obsstore 2>/dev/null
104 $ dd bs=1 count=1 if=.hg/store/obsstore 2>/dev/null
105 \x00 (no-eol) (esc)
105 \x00 (no-eol) (esc)
106
106
107 do it again (it read the obsstore before adding new changeset)
107 do it again (it read the obsstore before adding new changeset)
108
108
109 $ hg up '.^'
109 $ hg up '.^'
110 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
110 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
111 $ mkcommit new_2_c
111 $ mkcommit new_2_c
112 created new head
112 created new head
113 $ hg debugobsolete -d '1337 0' `getid new_c` `getid new_2_c`
113 $ hg debugobsolete -d '1337 0' `getid new_c` `getid new_2_c`
114 $ hg debugobsolete
114 $ hg debugobsolete
115 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
115 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
116 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
116 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
117
117
118 Register two markers with a missing node
118 Register two markers with a missing node
119
119
120 $ hg up '.^'
120 $ hg up '.^'
121 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
121 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
122 $ mkcommit new_3_c
122 $ mkcommit new_3_c
123 created new head
123 created new head
124 $ hg debugobsolete -d '1338 0' `getid new_2_c` 1337133713371337133713371337133713371337
124 $ hg debugobsolete -d '1338 0' `getid new_2_c` 1337133713371337133713371337133713371337
125 $ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c`
125 $ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c`
126 $ hg debugobsolete
126 $ hg debugobsolete
127 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
127 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
128 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
128 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
129 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
129 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
130 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
130 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
131
131
132 Refuse pathological nullid successors
132 Refuse pathological nullid successors
133 $ hg debugobsolete -d '9001 0' 1337133713371337133713371337133713371337 0000000000000000000000000000000000000000
133 $ hg debugobsolete -d '9001 0' 1337133713371337133713371337133713371337 0000000000000000000000000000000000000000
134 transaction abort!
134 transaction abort!
135 rollback completed
135 rollback completed
136 abort: bad obsolescence marker detected: invalid successors nullid
136 abort: bad obsolescence marker detected: invalid successors nullid
137 [255]
137 [255]
138
138
139 Check that graphlog detect that a changeset is obsolete:
139 Check that graphlog detect that a changeset is obsolete:
140
140
141 $ hg log -G
141 $ hg log -G
142 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
142 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
143 |
143 |
144 o 1:7c3bad9141dc (draft) [ ] add b
144 o 1:7c3bad9141dc (draft) [ ] add b
145 |
145 |
146 o 0:1f0dee641bb7 (draft) [ ] add a
146 o 0:1f0dee641bb7 (draft) [ ] add a
147
147
148
148
149 check that heads does not report them
149 check that heads does not report them
150
150
151 $ hg heads
151 $ hg heads
152 5:5601fb93a350 (draft) [tip ] add new_3_c
152 5:5601fb93a350 (draft) [tip ] add new_3_c
153 $ hg heads --hidden
153 $ hg heads --hidden
154 5:5601fb93a350 (draft) [tip ] add new_3_c
154 5:5601fb93a350 (draft) [tip ] add new_3_c
155 4:ca819180edb9 (draft) [ ] add new_2_c
155 4:ca819180edb9 (draft) [ ] add new_2_c
156 3:cdbce2fbb163 (draft) [ ] add new_c
156 3:cdbce2fbb163 (draft) [ ] add new_c
157 2:245bde4270cd (draft) [ ] add original_c
157 2:245bde4270cd (draft) [ ] add original_c
158
158
159
159
160 check that summary does not report them
160 check that summary does not report them
161
161
162 $ hg init ../sink
162 $ hg init ../sink
163 $ echo '[paths]' >> .hg/hgrc
163 $ echo '[paths]' >> .hg/hgrc
164 $ echo 'default=../sink' >> .hg/hgrc
164 $ echo 'default=../sink' >> .hg/hgrc
165 $ hg summary --remote
165 $ hg summary --remote
166 parent: 5:5601fb93a350 tip
166 parent: 5:5601fb93a350 tip
167 add new_3_c
167 add new_3_c
168 branch: default
168 branch: default
169 commit: (clean)
169 commit: (clean)
170 update: (current)
170 update: (current)
171 phases: 3 draft
171 phases: 3 draft
172 remote: 3 outgoing
172 remote: 3 outgoing
173
173
174 $ hg summary --remote --hidden
174 $ hg summary --remote --hidden
175 parent: 5:5601fb93a350 tip
175 parent: 5:5601fb93a350 tip
176 add new_3_c
176 add new_3_c
177 branch: default
177 branch: default
178 commit: (clean)
178 commit: (clean)
179 update: 3 new changesets, 4 branch heads (merge)
179 update: 3 new changesets, 4 branch heads (merge)
180 phases: 6 draft
180 phases: 6 draft
181 remote: 3 outgoing
181 remote: 3 outgoing
182
182
183 check that various commands work well with filtering
183 check that various commands work well with filtering
184
184
185 $ hg tip
185 $ hg tip
186 5:5601fb93a350 (draft) [tip ] add new_3_c
186 5:5601fb93a350 (draft) [tip ] add new_3_c
187 $ hg log -r 6
187 $ hg log -r 6
188 abort: unknown revision '6'!
188 abort: unknown revision '6'!
189 [255]
189 [255]
190 $ hg log -r 4
190 $ hg log -r 4
191 abort: hidden revision '4'!
191 abort: hidden revision '4'!
192 (use --hidden to access hidden revisions)
192 (use --hidden to access hidden revisions)
193 [255]
193 [255]
194 $ hg debugrevspec 'rev(6)'
194 $ hg debugrevspec 'rev(6)'
195 $ hg debugrevspec 'rev(4)'
195 $ hg debugrevspec 'rev(4)'
196 $ hg debugrevspec 'null'
196 $ hg debugrevspec 'null'
197 -1
197 -1
198
198
199 Check that public changeset are not accounted as obsolete:
199 Check that public changeset are not accounted as obsolete:
200
200
201 $ hg --hidden phase --public 2
201 $ hg --hidden phase --public 2
202 $ hg log -G
202 $ hg log -G
203 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
203 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
204 |
204 |
205 | o 2:245bde4270cd (public) [ ] add original_c
205 | o 2:245bde4270cd (public) [ ] add original_c
206 |/
206 |/
207 o 1:7c3bad9141dc (public) [ ] add b
207 o 1:7c3bad9141dc (public) [ ] add b
208 |
208 |
209 o 0:1f0dee641bb7 (public) [ ] add a
209 o 0:1f0dee641bb7 (public) [ ] add a
210
210
211
211
212 And that bumped changeset are detected
212 And that bumped changeset are detected
213 --------------------------------------
213 --------------------------------------
214
214
215 If we didn't filtered obsolete changesets out, 3 and 4 would show up too. Also
215 If we didn't filtered obsolete changesets out, 3 and 4 would show up too. Also
216 note that the bumped changeset (5:5601fb93a350) is not a direct successor of
216 note that the bumped changeset (5:5601fb93a350) is not a direct successor of
217 the public changeset
217 the public changeset
218
218
219 $ hg log --hidden -r 'bumped()'
219 $ hg log --hidden -r 'bumped()'
220 5:5601fb93a350 (draft) [tip ] add new_3_c
220 5:5601fb93a350 (draft) [tip ] add new_3_c
221
221
222 And that we can't push bumped changeset
222 And that we can't push bumped changeset
223
223
224 $ hg push ../tmpa -r 0 --force #(make repo related)
224 $ hg push ../tmpa -r 0 --force #(make repo related)
225 pushing to ../tmpa
225 pushing to ../tmpa
226 searching for changes
226 searching for changes
227 warning: repository is unrelated
227 warning: repository is unrelated
228 adding changesets
228 adding changesets
229 adding manifests
229 adding manifests
230 adding file changes
230 adding file changes
231 added 1 changesets with 1 changes to 1 files (+1 heads)
231 added 1 changesets with 1 changes to 1 files (+1 heads)
232 $ hg push ../tmpa
232 $ hg push ../tmpa
233 pushing to ../tmpa
233 pushing to ../tmpa
234 searching for changes
234 searching for changes
235 abort: push includes bumped changeset: 5601fb93a350!
235 abort: push includes bumped changeset: 5601fb93a350!
236 [255]
236 [255]
237
237
238 Fixing "bumped" situation
238 Fixing "bumped" situation
239 We need to create a clone of 5 and add a special marker with a flag
239 We need to create a clone of 5 and add a special marker with a flag
240
240
241 $ hg summary
241 $ hg summary
242 parent: 5:5601fb93a350 tip
242 parent: 5:5601fb93a350 tip
243 add new_3_c
243 add new_3_c
244 branch: default
244 branch: default
245 commit: (clean)
245 commit: (clean)
246 update: 1 new changesets, 2 branch heads (merge)
246 update: 1 new changesets, 2 branch heads (merge)
247 phases: 1 draft
247 phases: 1 draft
248 bumped: 1 changesets
248 bumped: 1 changesets
249 $ hg up '5^'
249 $ hg up '5^'
250 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
250 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
251 $ hg revert -ar 5
251 $ hg revert -ar 5
252 adding new_3_c
252 adding new_3_c
253 $ hg ci -m 'add n3w_3_c'
253 $ hg ci -m 'add n3w_3_c'
254 created new head
254 created new head
255 $ hg debugobsolete -d '1338 0' --flags 1 `getid new_3_c` `getid n3w_3_c`
255 $ hg debugobsolete -d '1338 0' --flags 1 `getid new_3_c` `getid n3w_3_c`
256 $ hg log -r 'bumped()'
256 $ hg log -r 'bumped()'
257 $ hg log -G
257 $ hg log -G
258 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
258 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
259 |
259 |
260 | o 2:245bde4270cd (public) [ ] add original_c
260 | o 2:245bde4270cd (public) [ ] add original_c
261 |/
261 |/
262 o 1:7c3bad9141dc (public) [ ] add b
262 o 1:7c3bad9141dc (public) [ ] add b
263 |
263 |
264 o 0:1f0dee641bb7 (public) [ ] add a
264 o 0:1f0dee641bb7 (public) [ ] add a
265
265
266
266
267 $ cd ..
267 $ cd ..
268
268
269 Revision 0 is hidden
269 Revision 0 is hidden
270 --------------------
270 --------------------
271
271
272 $ hg init rev0hidden
272 $ hg init rev0hidden
273 $ cd rev0hidden
273 $ cd rev0hidden
274
274
275 $ mkcommit kill0
275 $ mkcommit kill0
276 $ hg up -q null
276 $ hg up -q null
277 $ hg debugobsolete `getid kill0`
277 $ hg debugobsolete `getid kill0`
278 $ mkcommit a
278 $ mkcommit a
279 $ mkcommit b
279 $ mkcommit b
280
280
281 Should pick the first visible revision as "repo" node
281 Should pick the first visible revision as "repo" node
282
282
283 $ hg archive ../archive-null
283 $ hg archive ../archive-null
284 $ cat ../archive-null/.hg_archival.txt
284 $ cat ../archive-null/.hg_archival.txt
285 repo: 1f0dee641bb7258c56bd60e93edfa2405381c41e
285 repo: 1f0dee641bb7258c56bd60e93edfa2405381c41e
286 node: 7c3bad9141dcb46ff89abf5f61856facd56e476c
286 node: 7c3bad9141dcb46ff89abf5f61856facd56e476c
287 branch: default
287 branch: default
288 latesttag: null
288 latesttag: null
289 latesttagdistance: 2
289 latesttagdistance: 2
290 changessincelatesttag: 2
290 changessincelatesttag: 2
291
291
292
292
293 $ cd ..
293 $ cd ..
294
294
295 Exchange Test
295 Exchange Test
296 ============================
296 ============================
297
297
298 Destination repo does not have any data
298 Destination repo does not have any data
299 ---------------------------------------
299 ---------------------------------------
300
300
301 Simple incoming test
301 Simple incoming test
302
302
303 $ hg init tmpc
303 $ hg init tmpc
304 $ cd tmpc
304 $ cd tmpc
305 $ hg incoming ../tmpb
305 $ hg incoming ../tmpb
306 comparing with ../tmpb
306 comparing with ../tmpb
307 0:1f0dee641bb7 (public) [ ] add a
307 0:1f0dee641bb7 (public) [ ] add a
308 1:7c3bad9141dc (public) [ ] add b
308 1:7c3bad9141dc (public) [ ] add b
309 2:245bde4270cd (public) [ ] add original_c
309 2:245bde4270cd (public) [ ] add original_c
310 6:6f9641995072 (draft) [tip ] add n3w_3_c
310 6:6f9641995072 (draft) [tip ] add n3w_3_c
311
311
312 Try to pull markers
312 Try to pull markers
313 (extinct changeset are excluded but marker are pushed)
313 (extinct changeset are excluded but marker are pushed)
314
314
315 $ hg pull ../tmpb
315 $ hg pull ../tmpb
316 pulling from ../tmpb
316 pulling from ../tmpb
317 requesting all changes
317 requesting all changes
318 adding changesets
318 adding changesets
319 adding manifests
319 adding manifests
320 adding file changes
320 adding file changes
321 added 4 changesets with 4 changes to 4 files (+1 heads)
321 added 4 changesets with 4 changes to 4 files (+1 heads)
322 5 new obsolescence markers
322 5 new obsolescence markers
323 (run 'hg heads' to see heads, 'hg merge' to merge)
323 (run 'hg heads' to see heads, 'hg merge' to merge)
324 $ hg debugobsolete
324 $ hg debugobsolete
325 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
325 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
326 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
326 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
327 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
327 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
328 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
328 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
329 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
329 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
330
330
331 Rollback//Transaction support
331 Rollback//Transaction support
332
332
333 $ hg debugobsolete -d '1340 0' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
333 $ hg debugobsolete -d '1340 0' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
334 $ hg debugobsolete
334 $ hg debugobsolete
335 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
335 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
336 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
336 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
337 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
337 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
338 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
338 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
339 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
339 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
340 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 (Thu Jan 01 00:22:20 1970 +0000) {'user': 'test'}
340 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 (Thu Jan 01 00:22:20 1970 +0000) {'user': 'test'}
341 $ hg rollback -n
341 $ hg rollback -n
342 repository tip rolled back to revision 3 (undo debugobsolete)
342 repository tip rolled back to revision 3 (undo debugobsolete)
343 $ hg rollback
343 $ hg rollback
344 repository tip rolled back to revision 3 (undo debugobsolete)
344 repository tip rolled back to revision 3 (undo debugobsolete)
345 $ hg debugobsolete
345 $ hg debugobsolete
346 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
346 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
347 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
347 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
348 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
348 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
349 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
349 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
350 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
350 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
351
351
352 $ cd ..
352 $ cd ..
353
353
354 Try to push markers
354 Try to push markers
355
355
356 $ hg init tmpd
356 $ hg init tmpd
357 $ hg -R tmpb push tmpd
357 $ hg -R tmpb push tmpd
358 pushing to tmpd
358 pushing to tmpd
359 searching for changes
359 searching for changes
360 adding changesets
360 adding changesets
361 adding manifests
361 adding manifests
362 adding file changes
362 adding file changes
363 added 4 changesets with 4 changes to 4 files (+1 heads)
363 added 4 changesets with 4 changes to 4 files (+1 heads)
364 5 new obsolescence markers
364 5 new obsolescence markers
365 $ hg -R tmpd debugobsolete | sort
365 $ hg -R tmpd debugobsolete | sort
366 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
366 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
367 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
367 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
368 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
368 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
369 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
369 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
370 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
370 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
371
371
372 Check obsolete keys are exchanged only if source has an obsolete store
372 Check obsolete keys are exchanged only if source has an obsolete store
373
373
374 $ hg init empty
374 $ hg init empty
375 $ hg --config extensions.debugkeys=debugkeys.py -R empty push tmpd
375 $ hg --config extensions.debugkeys=debugkeys.py -R empty push tmpd
376 pushing to tmpd
376 pushing to tmpd
377 listkeys phases
377 listkeys phases
378 listkeys bookmarks
378 listkeys bookmarks
379 no changes found
379 no changes found
380 listkeys phases
380 listkeys phases
381 [1]
381 [1]
382
382
383 clone support
383 clone support
384 (markers are copied and extinct changesets are included to allow hardlinks)
384 (markers are copied and extinct changesets are included to allow hardlinks)
385
385
386 $ hg clone tmpb clone-dest
386 $ hg clone tmpb clone-dest
387 updating to branch default
387 updating to branch default
388 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
388 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
389 $ hg -R clone-dest log -G --hidden
389 $ hg -R clone-dest log -G --hidden
390 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
390 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
391 |
391 |
392 | x 5:5601fb93a350 (draft) [ ] add new_3_c
392 | x 5:5601fb93a350 (draft) [ ] add new_3_c
393 |/
393 |/
394 | x 4:ca819180edb9 (draft) [ ] add new_2_c
394 | x 4:ca819180edb9 (draft) [ ] add new_2_c
395 |/
395 |/
396 | x 3:cdbce2fbb163 (draft) [ ] add new_c
396 | x 3:cdbce2fbb163 (draft) [ ] add new_c
397 |/
397 |/
398 | o 2:245bde4270cd (public) [ ] add original_c
398 | o 2:245bde4270cd (public) [ ] add original_c
399 |/
399 |/
400 o 1:7c3bad9141dc (public) [ ] add b
400 o 1:7c3bad9141dc (public) [ ] add b
401 |
401 |
402 o 0:1f0dee641bb7 (public) [ ] add a
402 o 0:1f0dee641bb7 (public) [ ] add a
403
403
404 $ hg -R clone-dest debugobsolete
404 $ hg -R clone-dest debugobsolete
405 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
405 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
406 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
406 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
407 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
407 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
408 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
408 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
409 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
409 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
410
410
411
411
412 Destination repo have existing data
412 Destination repo have existing data
413 ---------------------------------------
413 ---------------------------------------
414
414
415 On pull
415 On pull
416
416
417 $ hg init tmpe
417 $ hg init tmpe
418 $ cd tmpe
418 $ cd tmpe
419 $ hg debugobsolete -d '1339 0' 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00
419 $ hg debugobsolete -d '1339 0' 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00
420 $ hg pull ../tmpb
420 $ hg pull ../tmpb
421 pulling from ../tmpb
421 pulling from ../tmpb
422 requesting all changes
422 requesting all changes
423 adding changesets
423 adding changesets
424 adding manifests
424 adding manifests
425 adding file changes
425 adding file changes
426 added 4 changesets with 4 changes to 4 files (+1 heads)
426 added 4 changesets with 4 changes to 4 files (+1 heads)
427 5 new obsolescence markers
427 5 new obsolescence markers
428 (run 'hg heads' to see heads, 'hg merge' to merge)
428 (run 'hg heads' to see heads, 'hg merge' to merge)
429 $ hg debugobsolete
429 $ hg debugobsolete
430 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
430 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
431 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
431 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
432 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
432 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
433 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
433 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
434 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
434 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
435 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
435 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
436
436
437
437
438 On push
438 On push
439
439
440 $ hg push ../tmpc
440 $ hg push ../tmpc
441 pushing to ../tmpc
441 pushing to ../tmpc
442 searching for changes
442 searching for changes
443 no changes found
443 no changes found
444 1 new obsolescence markers
444 1 new obsolescence markers
445 [1]
445 [1]
446 $ hg -R ../tmpc debugobsolete
446 $ hg -R ../tmpc debugobsolete
447 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
447 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
448 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
448 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
449 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
449 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
450 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
450 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
451 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
451 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
452 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
452 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
453
453
454 detect outgoing obsolete and unstable
454 detect outgoing obsolete and unstable
455 ---------------------------------------
455 ---------------------------------------
456
456
457
457
458 $ hg log -G
458 $ hg log -G
459 o 3:6f9641995072 (draft) [tip ] add n3w_3_c
459 o 3:6f9641995072 (draft) [tip ] add n3w_3_c
460 |
460 |
461 | o 2:245bde4270cd (public) [ ] add original_c
461 | o 2:245bde4270cd (public) [ ] add original_c
462 |/
462 |/
463 o 1:7c3bad9141dc (public) [ ] add b
463 o 1:7c3bad9141dc (public) [ ] add b
464 |
464 |
465 o 0:1f0dee641bb7 (public) [ ] add a
465 o 0:1f0dee641bb7 (public) [ ] add a
466
466
467 $ hg up 'desc("n3w_3_c")'
467 $ hg up 'desc("n3w_3_c")'
468 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
468 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
469 $ mkcommit original_d
469 $ mkcommit original_d
470 $ mkcommit original_e
470 $ mkcommit original_e
471 $ hg debugobsolete --record-parents `getid original_d` -d '0 0'
471 $ hg debugobsolete --record-parents `getid original_d` -d '0 0'
472 $ hg debugobsolete | grep `getid original_d`
472 $ hg debugobsolete | grep `getid original_d`
473 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
473 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
474 $ hg log -r 'obsolete()'
474 $ hg log -r 'obsolete()'
475 4:94b33453f93b (draft) [ ] add original_d
475 4:94b33453f93b (draft) [ ] add original_d
476 $ hg summary
476 $ hg summary
477 parent: 5:cda648ca50f5 tip
477 parent: 5:cda648ca50f5 tip
478 add original_e
478 add original_e
479 branch: default
479 branch: default
480 commit: (clean)
480 commit: (clean)
481 update: 1 new changesets, 2 branch heads (merge)
481 update: 1 new changesets, 2 branch heads (merge)
482 phases: 3 draft
482 phases: 3 draft
483 unstable: 1 changesets
483 unstable: 1 changesets
484 $ hg log -G -r '::unstable()'
484 $ hg log -G -r '::unstable()'
485 @ 5:cda648ca50f5 (draft) [tip ] add original_e
485 @ 5:cda648ca50f5 (draft) [tip ] add original_e
486 |
486 |
487 x 4:94b33453f93b (draft) [ ] add original_d
487 x 4:94b33453f93b (draft) [ ] add original_d
488 |
488 |
489 o 3:6f9641995072 (draft) [ ] add n3w_3_c
489 o 3:6f9641995072 (draft) [ ] add n3w_3_c
490 |
490 |
491 o 1:7c3bad9141dc (public) [ ] add b
491 o 1:7c3bad9141dc (public) [ ] add b
492 |
492 |
493 o 0:1f0dee641bb7 (public) [ ] add a
493 o 0:1f0dee641bb7 (public) [ ] add a
494
494
495
495
496 refuse to push obsolete changeset
496 refuse to push obsolete changeset
497
497
498 $ hg push ../tmpc/ -r 'desc("original_d")'
498 $ hg push ../tmpc/ -r 'desc("original_d")'
499 pushing to ../tmpc/
499 pushing to ../tmpc/
500 searching for changes
500 searching for changes
501 abort: push includes obsolete changeset: 94b33453f93b!
501 abort: push includes obsolete changeset: 94b33453f93b!
502 [255]
502 [255]
503
503
504 refuse to push unstable changeset
504 refuse to push unstable changeset
505
505
506 $ hg push ../tmpc/
506 $ hg push ../tmpc/
507 pushing to ../tmpc/
507 pushing to ../tmpc/
508 searching for changes
508 searching for changes
509 abort: push includes unstable changeset: cda648ca50f5!
509 abort: push includes unstable changeset: cda648ca50f5!
510 [255]
510 [255]
511
511
512 Test that extinct changeset are properly detected
512 Test that extinct changeset are properly detected
513
513
514 $ hg log -r 'extinct()'
514 $ hg log -r 'extinct()'
515
515
516 Don't try to push extinct changeset
516 Don't try to push extinct changeset
517
517
518 $ hg init ../tmpf
518 $ hg init ../tmpf
519 $ hg out ../tmpf
519 $ hg out ../tmpf
520 comparing with ../tmpf
520 comparing with ../tmpf
521 searching for changes
521 searching for changes
522 0:1f0dee641bb7 (public) [ ] add a
522 0:1f0dee641bb7 (public) [ ] add a
523 1:7c3bad9141dc (public) [ ] add b
523 1:7c3bad9141dc (public) [ ] add b
524 2:245bde4270cd (public) [ ] add original_c
524 2:245bde4270cd (public) [ ] add original_c
525 3:6f9641995072 (draft) [ ] add n3w_3_c
525 3:6f9641995072 (draft) [ ] add n3w_3_c
526 4:94b33453f93b (draft) [ ] add original_d
526 4:94b33453f93b (draft) [ ] add original_d
527 5:cda648ca50f5 (draft) [tip ] add original_e
527 5:cda648ca50f5 (draft) [tip ] add original_e
528 $ hg push ../tmpf -f # -f because be push unstable too
528 $ hg push ../tmpf -f # -f because be push unstable too
529 pushing to ../tmpf
529 pushing to ../tmpf
530 searching for changes
530 searching for changes
531 adding changesets
531 adding changesets
532 adding manifests
532 adding manifests
533 adding file changes
533 adding file changes
534 added 6 changesets with 6 changes to 6 files (+1 heads)
534 added 6 changesets with 6 changes to 6 files (+1 heads)
535 7 new obsolescence markers
535 7 new obsolescence markers
536
536
537 no warning displayed
537 no warning displayed
538
538
539 $ hg push ../tmpf
539 $ hg push ../tmpf
540 pushing to ../tmpf
540 pushing to ../tmpf
541 searching for changes
541 searching for changes
542 no changes found
542 no changes found
543 [1]
543 [1]
544
544
545 Do not warn about new head when the new head is a successors of a remote one
545 Do not warn about new head when the new head is a successors of a remote one
546
546
547 $ hg log -G
547 $ hg log -G
548 @ 5:cda648ca50f5 (draft) [tip ] add original_e
548 @ 5:cda648ca50f5 (draft) [tip ] add original_e
549 |
549 |
550 x 4:94b33453f93b (draft) [ ] add original_d
550 x 4:94b33453f93b (draft) [ ] add original_d
551 |
551 |
552 o 3:6f9641995072 (draft) [ ] add n3w_3_c
552 o 3:6f9641995072 (draft) [ ] add n3w_3_c
553 |
553 |
554 | o 2:245bde4270cd (public) [ ] add original_c
554 | o 2:245bde4270cd (public) [ ] add original_c
555 |/
555 |/
556 o 1:7c3bad9141dc (public) [ ] add b
556 o 1:7c3bad9141dc (public) [ ] add b
557 |
557 |
558 o 0:1f0dee641bb7 (public) [ ] add a
558 o 0:1f0dee641bb7 (public) [ ] add a
559
559
560 $ hg up -q 'desc(n3w_3_c)'
560 $ hg up -q 'desc(n3w_3_c)'
561 $ mkcommit obsolete_e
561 $ mkcommit obsolete_e
562 created new head
562 created new head
563 $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'`
563 $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'`
564 $ hg outgoing ../tmpf # parasite hg outgoing testin
564 $ hg outgoing ../tmpf # parasite hg outgoing testin
565 comparing with ../tmpf
565 comparing with ../tmpf
566 searching for changes
566 searching for changes
567 6:3de5eca88c00 (draft) [tip ] add obsolete_e
567 6:3de5eca88c00 (draft) [tip ] add obsolete_e
568 $ hg push ../tmpf
568 $ hg push ../tmpf
569 pushing to ../tmpf
569 pushing to ../tmpf
570 searching for changes
570 searching for changes
571 adding changesets
571 adding changesets
572 adding manifests
572 adding manifests
573 adding file changes
573 adding file changes
574 added 1 changesets with 1 changes to 1 files (+1 heads)
574 added 1 changesets with 1 changes to 1 files (+1 heads)
575 1 new obsolescence markers
575 1 new obsolescence markers
576
576
577 test relevance computation
577 test relevance computation
578 ---------------------------------------
578 ---------------------------------------
579
579
580 Checking simple case of "marker relevance".
580 Checking simple case of "marker relevance".
581
581
582
582
583 Reminder of the repo situation
583 Reminder of the repo situation
584
584
585 $ hg log --hidden --graph
585 $ hg log --hidden --graph
586 @ 6:3de5eca88c00 (draft) [tip ] add obsolete_e
586 @ 6:3de5eca88c00 (draft) [tip ] add obsolete_e
587 |
587 |
588 | x 5:cda648ca50f5 (draft) [ ] add original_e
588 | x 5:cda648ca50f5 (draft) [ ] add original_e
589 | |
589 | |
590 | x 4:94b33453f93b (draft) [ ] add original_d
590 | x 4:94b33453f93b (draft) [ ] add original_d
591 |/
591 |/
592 o 3:6f9641995072 (draft) [ ] add n3w_3_c
592 o 3:6f9641995072 (draft) [ ] add n3w_3_c
593 |
593 |
594 | o 2:245bde4270cd (public) [ ] add original_c
594 | o 2:245bde4270cd (public) [ ] add original_c
595 |/
595 |/
596 o 1:7c3bad9141dc (public) [ ] add b
596 o 1:7c3bad9141dc (public) [ ] add b
597 |
597 |
598 o 0:1f0dee641bb7 (public) [ ] add a
598 o 0:1f0dee641bb7 (public) [ ] add a
599
599
600
600
601 List of all markers
601 List of all markers
602
602
603 $ hg debugobsolete
603 $ hg debugobsolete
604 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
604 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
605 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
605 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
606 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
606 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
607 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
607 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
608 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
608 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
609 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
609 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
610 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
610 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
611 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test'} (glob)
611 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test'} (glob)
612
612
613 List of changesets with no chain
613 List of changesets with no chain
614
614
615 $ hg debugobsolete --hidden --rev ::2
615 $ hg debugobsolete --hidden --rev ::2
616
616
617 List of changesets that are included on marker chain
617 List of changesets that are included on marker chain
618
618
619 $ hg debugobsolete --hidden --rev 6
619 $ hg debugobsolete --hidden --rev 6
620 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test'} (glob)
620 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test'} (glob)
621
621
622 List of changesets with a longer chain, (including a pruned children)
622 List of changesets with a longer chain, (including a pruned children)
623
623
624 $ hg debugobsolete --hidden --rev 3
624 $ hg debugobsolete --hidden --rev 3
625 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
625 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
626 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
626 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
627 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
627 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
628 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
628 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
629 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
629 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
630 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
630 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
631 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
631 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
632
632
633 List of both
633 List of both
634
634
635 $ hg debugobsolete --hidden --rev 3::6
635 $ hg debugobsolete --hidden --rev 3::6
636 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
636 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
637 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
637 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
638 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
638 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
639 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
639 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
640 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
640 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
641 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
641 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
642 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test'} (glob)
642 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test'} (glob)
643 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
643 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
644
644
645 #if serve
645 #if serve
646
646
647 Test the debug output for exchange
647 Test the debug output for exchange
648 ----------------------------------
648 ----------------------------------
649
649
650 $ hg pull ../tmpb --config 'experimental.obsmarkers-exchange-debug=True' --config 'experimental.bundle2-exp=True'
650 $ hg pull ../tmpb --config 'experimental.obsmarkers-exchange-debug=True' --config 'experimental.bundle2-exp=True'
651 pulling from ../tmpb
651 pulling from ../tmpb
652 searching for changes
652 searching for changes
653 no changes found
653 no changes found
654 obsmarker-exchange: 346 bytes received
654 obsmarker-exchange: 346 bytes received
655
655
656 check hgweb does not explode
656 check hgweb does not explode
657 ====================================
657 ====================================
658
658
659 $ hg unbundle $TESTDIR/bundles/hgweb+obs.hg
659 $ hg unbundle $TESTDIR/bundles/hgweb+obs.hg
660 adding changesets
660 adding changesets
661 adding manifests
661 adding manifests
662 adding file changes
662 adding file changes
663 added 62 changesets with 63 changes to 9 files (+60 heads)
663 added 62 changesets with 63 changes to 9 files (+60 heads)
664 (run 'hg heads .' to see heads, 'hg merge' to merge)
664 (run 'hg heads .' to see heads, 'hg merge' to merge)
665 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
665 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
666 > do
666 > do
667 > hg debugobsolete $node
667 > hg debugobsolete $node
668 > done
668 > done
669 $ hg up tip
669 $ hg up tip
670 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
670 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
671
671
672 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
672 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
673 $ cat hg.pid >> $DAEMON_PIDS
673 $ cat hg.pid >> $DAEMON_PIDS
674
674
675 check changelog view
675 check changelog view
676
676
677 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
677 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
678 200 Script output follows
678 200 Script output follows
679
679
680 check graph view
680 check graph view
681
681
682 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
682 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
683 200 Script output follows
683 200 Script output follows
684
684
685 check filelog view
685 check filelog view
686
686
687 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
687 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
688 200 Script output follows
688 200 Script output follows
689
689
690 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
690 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
691 200 Script output follows
691 200 Script output follows
692 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
692 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
693 404 Not Found
693 404 Not Found
694 [1]
694 [1]
695
695
696 check that web.view config option:
696 check that web.view config option:
697
697
698 $ killdaemons.py hg.pid
698 $ killdaemons.py hg.pid
699 $ cat >> .hg/hgrc << EOF
699 $ cat >> .hg/hgrc << EOF
700 > [web]
700 > [web]
701 > view=all
701 > view=all
702 > EOF
702 > EOF
703 $ wait
703 $ wait
704 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
704 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
705 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
705 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
706 200 Script output follows
706 200 Script output follows
707 $ killdaemons.py hg.pid
707 $ killdaemons.py hg.pid
708
708
709 Checking _enable=False warning if obsolete marker exists
709 Checking _enable=False warning if obsolete marker exists
710
710
711 $ echo '[experimental]' >> $HGRCPATH
711 $ echo '[experimental]' >> $HGRCPATH
712 $ echo "evolution=" >> $HGRCPATH
712 $ echo "evolution=" >> $HGRCPATH
713 $ hg log -r tip
713 $ hg log -r tip
714 obsolete feature not enabled but 68 markers found!
714 obsolete feature not enabled but 68 markers found!
715 68:c15e9edfca13 (draft) [tip ] add celestine
715 68:c15e9edfca13 (draft) [tip ] add celestine
716
716
717 reenable for later test
717 reenable for later test
718
718
719 $ echo '[experimental]' >> $HGRCPATH
719 $ echo '[experimental]' >> $HGRCPATH
720 $ echo "evolution=createmarkers,exchange" >> $HGRCPATH
720 $ echo "evolution=createmarkers,exchange" >> $HGRCPATH
721
721
722 #endif
722 #endif
723
723
724 Test incoming/outcoming with changesets obsoleted remotely, known locally
724 Test incoming/outcoming with changesets obsoleted remotely, known locally
725 ===============================================================================
725 ===============================================================================
726
726
727 This test issue 3805
727 This test issue 3805
728
728
729 $ hg init repo-issue3805
729 $ hg init repo-issue3805
730 $ cd repo-issue3805
730 $ cd repo-issue3805
731 $ echo "base" > base
731 $ echo "base" > base
732 $ hg ci -Am "base"
732 $ hg ci -Am "base"
733 adding base
733 adding base
734 $ echo "foo" > foo
734 $ echo "foo" > foo
735 $ hg ci -Am "A"
735 $ hg ci -Am "A"
736 adding foo
736 adding foo
737 $ hg clone . ../other-issue3805
737 $ hg clone . ../other-issue3805
738 updating to branch default
738 updating to branch default
739 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
739 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
740 $ echo "bar" >> foo
740 $ echo "bar" >> foo
741 $ hg ci --amend
741 $ hg ci --amend
742 $ cd ../other-issue3805
742 $ cd ../other-issue3805
743 $ hg log -G
743 $ hg log -G
744 @ 1:29f0c6921ddd (draft) [tip ] A
744 @ 1:29f0c6921ddd (draft) [tip ] A
745 |
745 |
746 o 0:d20a80d4def3 (draft) [ ] base
746 o 0:d20a80d4def3 (draft) [ ] base
747
747
748 $ hg log -G -R ../repo-issue3805
748 $ hg log -G -R ../repo-issue3805
749 @ 3:323a9c3ddd91 (draft) [tip ] A
749 @ 3:323a9c3ddd91 (draft) [tip ] A
750 |
750 |
751 o 0:d20a80d4def3 (draft) [ ] base
751 o 0:d20a80d4def3 (draft) [ ] base
752
752
753 $ hg incoming
753 $ hg incoming
754 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
754 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
755 searching for changes
755 searching for changes
756 3:323a9c3ddd91 (draft) [tip ] A
756 3:323a9c3ddd91 (draft) [tip ] A
757 $ hg incoming --bundle ../issue3805.hg
757 $ hg incoming --bundle ../issue3805.hg
758 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
758 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
759 searching for changes
759 searching for changes
760 3:323a9c3ddd91 (draft) [tip ] A
760 3:323a9c3ddd91 (draft) [tip ] A
761 $ hg outgoing
761 $ hg outgoing
762 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
762 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
763 searching for changes
763 searching for changes
764 1:29f0c6921ddd (draft) [tip ] A
764 1:29f0c6921ddd (draft) [tip ] A
765
765
766 #if serve
766 #if serve
767
767
768 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
768 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
769 $ cat hg.pid >> $DAEMON_PIDS
769 $ cat hg.pid >> $DAEMON_PIDS
770
770
771 $ hg incoming http://localhost:$HGPORT
771 $ hg incoming http://localhost:$HGPORT
772 comparing with http://localhost:$HGPORT/
772 comparing with http://localhost:$HGPORT/
773 searching for changes
773 searching for changes
774 2:323a9c3ddd91 (draft) [tip ] A
774 2:323a9c3ddd91 (draft) [tip ] A
775 $ hg outgoing http://localhost:$HGPORT
775 $ hg outgoing http://localhost:$HGPORT
776 comparing with http://localhost:$HGPORT/
776 comparing with http://localhost:$HGPORT/
777 searching for changes
777 searching for changes
778 1:29f0c6921ddd (draft) [tip ] A
778 1:29f0c6921ddd (draft) [tip ] A
779
779
780 $ killdaemons.py
780 $ killdaemons.py
781
781
782 #endif
782 #endif
783
783
784 This test issue 3814
784 This test issue 3814
785
785
786 (nothing to push but locally hidden changeset)
786 (nothing to push but locally hidden changeset)
787
787
788 $ cd ..
788 $ cd ..
789 $ hg init repo-issue3814
789 $ hg init repo-issue3814
790 $ cd repo-issue3805
790 $ cd repo-issue3805
791 $ hg push -r 323a9c3ddd91 ../repo-issue3814
791 $ hg push -r 323a9c3ddd91 ../repo-issue3814
792 pushing to ../repo-issue3814
792 pushing to ../repo-issue3814
793 searching for changes
793 searching for changes
794 adding changesets
794 adding changesets
795 adding manifests
795 adding manifests
796 adding file changes
796 adding file changes
797 added 2 changesets with 2 changes to 2 files
797 added 2 changesets with 2 changes to 2 files
798 2 new obsolescence markers
798 2 new obsolescence markers
799 $ hg out ../repo-issue3814
799 $ hg out ../repo-issue3814
800 comparing with ../repo-issue3814
800 comparing with ../repo-issue3814
801 searching for changes
801 searching for changes
802 no changes found
802 no changes found
803 [1]
803 [1]
804
804
805 Test that a local tag blocks a changeset from being hidden
805 Test that a local tag blocks a changeset from being hidden
806
806
807 $ hg tag -l visible -r 1 --hidden
807 $ hg tag -l visible -r 1 --hidden
808 $ hg log -G
808 $ hg log -G
809 @ 3:323a9c3ddd91 (draft) [tip ] A
809 @ 3:323a9c3ddd91 (draft) [tip ] A
810 |
810 |
811 | x 1:29f0c6921ddd (draft) [visible ] A
811 | x 1:29f0c6921ddd (draft) [visible ] A
812 |/
812 |/
813 o 0:d20a80d4def3 (draft) [ ] base
813 o 0:d20a80d4def3 (draft) [ ] base
814
814
815 Test that removing a local tag does not cause some commands to fail
815 Test that removing a local tag does not cause some commands to fail
816
816
817 $ hg tag -l -r tip tiptag
817 $ hg tag -l -r tip tiptag
818 $ hg tags
818 $ hg tags
819 tiptag 3:323a9c3ddd91
819 tiptag 3:323a9c3ddd91
820 tip 3:323a9c3ddd91
820 tip 3:323a9c3ddd91
821 visible 1:29f0c6921ddd
821 visible 1:29f0c6921ddd
822 $ hg --config extensions.strip= strip -r tip --no-backup
822 $ hg --config extensions.strip= strip -r tip --no-backup
823 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
823 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
824 $ hg tags
824 $ hg tags
825 visible 1:29f0c6921ddd
825 visible 1:29f0c6921ddd
826 tip 1:29f0c6921ddd
826 tip 1:29f0c6921ddd
827
827
828 Test bundle overlay onto hidden revision
828 Test bundle overlay onto hidden revision
829
829
830 $ cd ..
830 $ cd ..
831 $ hg init repo-bundleoverlay
831 $ hg init repo-bundleoverlay
832 $ cd repo-bundleoverlay
832 $ cd repo-bundleoverlay
833 $ echo "A" > foo
833 $ echo "A" > foo
834 $ hg ci -Am "A"
834 $ hg ci -Am "A"
835 adding foo
835 adding foo
836 $ echo "B" >> foo
836 $ echo "B" >> foo
837 $ hg ci -m "B"
837 $ hg ci -m "B"
838 $ hg up 0
838 $ hg up 0
839 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
839 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
840 $ echo "C" >> foo
840 $ echo "C" >> foo
841 $ hg ci -m "C"
841 $ hg ci -m "C"
842 created new head
842 created new head
843 $ hg log -G
843 $ hg log -G
844 @ 2:c186d7714947 (draft) [tip ] C
844 @ 2:c186d7714947 (draft) [tip ] C
845 |
845 |
846 | o 1:44526ebb0f98 (draft) [ ] B
846 | o 1:44526ebb0f98 (draft) [ ] B
847 |/
847 |/
848 o 0:4b34ecfb0d56 (draft) [ ] A
848 o 0:4b34ecfb0d56 (draft) [ ] A
849
849
850
850
851 $ hg clone -r1 . ../other-bundleoverlay
851 $ hg clone -r1 . ../other-bundleoverlay
852 adding changesets
852 adding changesets
853 adding manifests
853 adding manifests
854 adding file changes
854 adding file changes
855 added 2 changesets with 2 changes to 1 files
855 added 2 changesets with 2 changes to 1 files
856 updating to branch default
856 updating to branch default
857 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
857 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
858 $ cd ../other-bundleoverlay
858 $ cd ../other-bundleoverlay
859 $ echo "B+" >> foo
859 $ echo "B+" >> foo
860 $ hg ci --amend -m "B+"
860 $ hg ci --amend -m "B+"
861 $ hg log -G --hidden
861 $ hg log -G --hidden
862 @ 3:b7d587542d40 (draft) [tip ] B+
862 @ 3:b7d587542d40 (draft) [tip ] B+
863 |
863 |
864 | x 2:eb95e9297e18 (draft) [ ] temporary amend commit for 44526ebb0f98
864 | x 2:eb95e9297e18 (draft) [ ] temporary amend commit for 44526ebb0f98
865 | |
865 | |
866 | x 1:44526ebb0f98 (draft) [ ] B
866 | x 1:44526ebb0f98 (draft) [ ] B
867 |/
867 |/
868 o 0:4b34ecfb0d56 (draft) [ ] A
868 o 0:4b34ecfb0d56 (draft) [ ] A
869
869
870
870
871 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
871 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
872 comparing with ../repo-bundleoverlay
872 comparing with ../repo-bundleoverlay
873 searching for changes
873 searching for changes
874 1:44526ebb0f98 (draft) [ ] B
874 1:44526ebb0f98 (draft) [ ] B
875 2:c186d7714947 (draft) [tip ] C
875 2:c186d7714947 (draft) [tip ] C
876 $ hg log -G -R ../bundleoverlay.hg
876 $ hg log -G -R ../bundleoverlay.hg
877 o 4:c186d7714947 (draft) [tip ] C
877 o 4:c186d7714947 (draft) [tip ] C
878 |
878 |
879 | @ 3:b7d587542d40 (draft) [ ] B+
879 | @ 3:b7d587542d40 (draft) [ ] B+
880 |/
880 |/
881 o 0:4b34ecfb0d56 (draft) [ ] A
881 o 0:4b34ecfb0d56 (draft) [ ] A
882
882
883
883
884 #if serve
884 #if serve
885
885
886 Test issue 4506
886 Test issue 4506
887
887
888 $ cd ..
888 $ cd ..
889 $ hg init repo-issue4506
889 $ hg init repo-issue4506
890 $ cd repo-issue4506
890 $ cd repo-issue4506
891 $ echo "0" > foo
891 $ echo "0" > foo
892 $ hg add foo
892 $ hg add foo
893 $ hg ci -m "content-0"
893 $ hg ci -m "content-0"
894
894
895 $ hg up null
895 $ hg up null
896 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
896 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
897 $ echo "1" > bar
897 $ echo "1" > bar
898 $ hg add bar
898 $ hg add bar
899 $ hg ci -m "content-1"
899 $ hg ci -m "content-1"
900 created new head
900 created new head
901 $ hg up 0
901 $ hg up 0
902 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
902 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
903 $ hg graft 1
903 $ hg graft 1
904 grafting 1:1c9eddb02162 "content-1" (tip)
904 grafting 1:1c9eddb02162 "content-1" (tip)
905
905
906 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
906 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
907
907
908 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
908 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
909 $ cat hg.pid >> $DAEMON_PIDS
909 $ cat hg.pid >> $DAEMON_PIDS
910
910
911 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
911 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
912 404 Not Found
912 404 Not Found
913 [1]
913 [1]
914 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
914 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
915 200 Script output follows
915 200 Script output follows
916 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
916 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
917 200 Script output follows
917 200 Script output follows
918
918
919 $ killdaemons.py
919 $ killdaemons.py
920
920
921 #endif
921 #endif
922
922
923 Test heads computation on pending index changes with obsolescence markers
923 Test heads computation on pending index changes with obsolescence markers
924 $ cd ..
924 $ cd ..
925 $ cat >$TESTTMP/test_extension.py << EOF
925 $ cat >$TESTTMP/test_extension.py << EOF
926 > from mercurial import cmdutil
926 > from mercurial import cmdutil
927 > from mercurial.i18n import _
927 > from mercurial.i18n import _
928 >
928 >
929 > cmdtable = {}
929 > cmdtable = {}
930 > command = cmdutil.command(cmdtable)
930 > command = cmdutil.command(cmdtable)
931 > @command("amendtransient",[], _('hg amendtransient [rev]'))
931 > @command("amendtransient",[], _('hg amendtransient [rev]'))
932 > def amend(ui, repo, *pats, **opts):
932 > def amend(ui, repo, *pats, **opts):
933 > def commitfunc(ui, repo, message, match, opts):
933 > def commitfunc(ui, repo, message, match, opts):
934 > return repo.commit(message, repo['.'].user(), repo['.'].date(), match)
934 > return repo.commit(message, repo['.'].user(), repo['.'].date(), match)
935 > opts['message'] = 'Test'
935 > opts['message'] = 'Test'
936 > opts['logfile'] = None
936 > opts['logfile'] = None
937 > cmdutil.amend(ui, repo, commitfunc, repo['.'], {}, pats, opts)
937 > cmdutil.amend(ui, repo, commitfunc, repo['.'], {}, pats, opts)
938 > print repo.changelog.headrevs()
938 > ui.write('%s\n' % repo.changelog.headrevs())
939 > EOF
939 > EOF
940 $ cat >> $HGRCPATH << EOF
940 $ cat >> $HGRCPATH << EOF
941 > [extensions]
941 > [extensions]
942 > testextension=$TESTTMP/test_extension.py
942 > testextension=$TESTTMP/test_extension.py
943 > EOF
943 > EOF
944 $ hg init repo-issue-nativerevs-pending-changes
944 $ hg init repo-issue-nativerevs-pending-changes
945 $ cd repo-issue-nativerevs-pending-changes
945 $ cd repo-issue-nativerevs-pending-changes
946 $ mkcommit a
946 $ mkcommit a
947 $ mkcommit b
947 $ mkcommit b
948 $ hg up ".^"
948 $ hg up ".^"
949 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
949 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
950 $ echo aa > a
950 $ echo aa > a
951 $ hg amendtransient
951 $ hg amendtransient
952 [1, 3]
952 [1, 3]
953
953
954 Check that corrupted hidden cache does not crash
954 Check that corrupted hidden cache does not crash
955
955
956 $ printf "" > .hg/cache/hidden
956 $ printf "" > .hg/cache/hidden
957 $ hg log -r . -T '{node}' --debug
957 $ hg log -r . -T '{node}' --debug
958 corrupted hidden cache
958 corrupted hidden cache
959 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
959 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
960 $ hg log -r . -T '{node}' --debug
960 $ hg log -r . -T '{node}' --debug
961 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
961 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
962
962
963 #if unix-permissions
963 #if unix-permissions
964 Check that wrong hidden cache permission does not crash
964 Check that wrong hidden cache permission does not crash
965
965
966 $ chmod 000 .hg/cache/hidden
966 $ chmod 000 .hg/cache/hidden
967 $ hg log -r . -T '{node}' --debug
967 $ hg log -r . -T '{node}' --debug
968 cannot read hidden cache
968 cannot read hidden cache
969 error writing hidden changesets cache
969 error writing hidden changesets cache
970 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
970 8fd96dfc63e51ed5a8af1bec18eb4b19dbf83812 (no-eol)
971 #endif
971 #endif
972
972
973 Test cache consistency for the visible filter
973 Test cache consistency for the visible filter
974 1) We want to make sure that the cached filtered revs are invalidated when
974 1) We want to make sure that the cached filtered revs are invalidated when
975 bookmarks change
975 bookmarks change
976 $ cd ..
976 $ cd ..
977 $ cat >$TESTTMP/test_extension.py << EOF
977 $ cat >$TESTTMP/test_extension.py << EOF
978 > from mercurial import cmdutil, extensions, bookmarks, repoview
978 > from mercurial import cmdutil, extensions, bookmarks, repoview
979 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
979 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
980 > repo = bkmstoreinst._repo
980 > repo = bkmstoreinst._repo
981 > ret = orig(bkmstoreinst, *args, **kwargs)
981 > ret = orig(bkmstoreinst, *args, **kwargs)
982 > hidden1 = repoview.computehidden(repo)
982 > hidden1 = repoview.computehidden(repo)
983 > hidden = repoview.filterrevs(repo, 'visible')
983 > hidden = repoview.filterrevs(repo, 'visible')
984 > if sorted(hidden1) != sorted(hidden):
984 > if sorted(hidden1) != sorted(hidden):
985 > print "cache inconsistency"
985 > print "cache inconsistency"
986 > return ret
986 > return ret
987 > def extsetup(ui):
987 > def extsetup(ui):
988 > extensions.wrapfunction(bookmarks.bmstore, 'write', _bookmarkchanged)
988 > extensions.wrapfunction(bookmarks.bmstore, 'write', _bookmarkchanged)
989 > EOF
989 > EOF
990
990
991 $ hg init repo-cache-inconsistency
991 $ hg init repo-cache-inconsistency
992 $ cd repo-issue-nativerevs-pending-changes
992 $ cd repo-issue-nativerevs-pending-changes
993 $ mkcommit a
993 $ mkcommit a
994 a already tracked!
994 a already tracked!
995 $ mkcommit b
995 $ mkcommit b
996 $ hg id
996 $ hg id
997 13bedc178fce tip
997 13bedc178fce tip
998 $ echo "hello" > b
998 $ echo "hello" > b
999 $ hg commit --amend -m "message"
999 $ hg commit --amend -m "message"
1000 $ hg book bookb -r 13bedc178fce --hidden
1000 $ hg book bookb -r 13bedc178fce --hidden
1001 $ hg log -r 13bedc178fce
1001 $ hg log -r 13bedc178fce
1002 5:13bedc178fce (draft) [ bookb] add b
1002 5:13bedc178fce (draft) [ bookb] add b
1003 $ hg book -d bookb
1003 $ hg book -d bookb
1004 $ hg log -r 13bedc178fce
1004 $ hg log -r 13bedc178fce
1005 abort: hidden revision '13bedc178fce'!
1005 abort: hidden revision '13bedc178fce'!
1006 (use --hidden to access hidden revisions)
1006 (use --hidden to access hidden revisions)
1007 [255]
1007 [255]
1008
1008
1009 Test ability to pull changeset with locally applying obsolescence markers
1009 Test ability to pull changeset with locally applying obsolescence markers
1010 (issue4945)
1010 (issue4945)
1011
1011
1012 $ cd ..
1012 $ cd ..
1013 $ hg init issue4845
1013 $ hg init issue4845
1014 $ cd issue4845
1014 $ cd issue4845
1015
1015
1016 $ echo foo > f0
1016 $ echo foo > f0
1017 $ hg add f0
1017 $ hg add f0
1018 $ hg ci -m '0'
1018 $ hg ci -m '0'
1019 $ echo foo > f1
1019 $ echo foo > f1
1020 $ hg add f1
1020 $ hg add f1
1021 $ hg ci -m '1'
1021 $ hg ci -m '1'
1022 $ echo foo > f2
1022 $ echo foo > f2
1023 $ hg add f2
1023 $ hg add f2
1024 $ hg ci -m '2'
1024 $ hg ci -m '2'
1025
1025
1026 $ echo bar > f2
1026 $ echo bar > f2
1027 $ hg commit --amend --config experimetnal.evolution=createmarkers
1027 $ hg commit --amend --config experimetnal.evolution=createmarkers
1028 $ hg log -G
1028 $ hg log -G
1029 @ 4:b0551702f918 (draft) [tip ] 2
1029 @ 4:b0551702f918 (draft) [tip ] 2
1030 |
1030 |
1031 o 1:e016b03fd86f (draft) [ ] 1
1031 o 1:e016b03fd86f (draft) [ ] 1
1032 |
1032 |
1033 o 0:a78f55e5508c (draft) [ ] 0
1033 o 0:a78f55e5508c (draft) [ ] 0
1034
1034
1035 $ hg log -G --hidden
1035 $ hg log -G --hidden
1036 @ 4:b0551702f918 (draft) [tip ] 2
1036 @ 4:b0551702f918 (draft) [tip ] 2
1037 |
1037 |
1038 | x 3:f27abbcc1f77 (draft) [ ] temporary amend commit for e008cf283490
1038 | x 3:f27abbcc1f77 (draft) [ ] temporary amend commit for e008cf283490
1039 | |
1039 | |
1040 | x 2:e008cf283490 (draft) [ ] 2
1040 | x 2:e008cf283490 (draft) [ ] 2
1041 |/
1041 |/
1042 o 1:e016b03fd86f (draft) [ ] 1
1042 o 1:e016b03fd86f (draft) [ ] 1
1043 |
1043 |
1044 o 0:a78f55e5508c (draft) [ ] 0
1044 o 0:a78f55e5508c (draft) [ ] 0
1045
1045
1046
1046
1047 $ hg strip -r 1 --config extensions.strip=
1047 $ hg strip -r 1 --config extensions.strip=
1048 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1048 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1049 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-c41c6bcc-backup.hg (glob)
1049 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-c41c6bcc-backup.hg (glob)
1050 $ hg log -G
1050 $ hg log -G
1051 @ 0:a78f55e5508c (draft) [tip ] 0
1051 @ 0:a78f55e5508c (draft) [tip ] 0
1052
1052
1053 $ hg log -G --hidden
1053 $ hg log -G --hidden
1054 @ 0:a78f55e5508c (draft) [tip ] 0
1054 @ 0:a78f55e5508c (draft) [tip ] 0
1055
1055
1056
1056
1057 $ hg pull .hg/strip-backup/*
1057 $ hg pull .hg/strip-backup/*
1058 pulling from .hg/strip-backup/e016b03fd86f-c41c6bcc-backup.hg
1058 pulling from .hg/strip-backup/e016b03fd86f-c41c6bcc-backup.hg
1059 searching for changes
1059 searching for changes
1060 adding changesets
1060 adding changesets
1061 adding manifests
1061 adding manifests
1062 adding file changes
1062 adding file changes
1063 added 2 changesets with 2 changes to 2 files
1063 added 2 changesets with 2 changes to 2 files
1064 (run 'hg update' to get a working copy)
1064 (run 'hg update' to get a working copy)
1065 $ hg log -G
1065 $ hg log -G
1066 o 2:b0551702f918 (draft) [tip ] 2
1066 o 2:b0551702f918 (draft) [tip ] 2
1067 |
1067 |
1068 o 1:e016b03fd86f (draft) [ ] 1
1068 o 1:e016b03fd86f (draft) [ ] 1
1069 |
1069 |
1070 @ 0:a78f55e5508c (draft) [ ] 0
1070 @ 0:a78f55e5508c (draft) [ ] 0
1071
1071
1072 $ hg log -G --hidden
1072 $ hg log -G --hidden
1073 o 2:b0551702f918 (draft) [tip ] 2
1073 o 2:b0551702f918 (draft) [tip ] 2
1074 |
1074 |
1075 o 1:e016b03fd86f (draft) [ ] 1
1075 o 1:e016b03fd86f (draft) [ ] 1
1076 |
1076 |
1077 @ 0:a78f55e5508c (draft) [ ] 0
1077 @ 0:a78f55e5508c (draft) [ ] 0
1078
1078
1079
1079
General Comments 0
You need to be logged in to leave comments. Login now