##// END OF EJS Templates
warn about new heads on commit (issue842)
Dirkjan Ochtman -
r6336:4b0c9c67 default
parent child Browse files
Show More
@@ -0,0 +1,20 b''
1 hg init test
2 cd test
3 echo foo > a
4 hg ci -Ama
5
6 hg up -r0000
7 echo bar > a
8 echo % should issue warning
9 hg ci -Amb
10
11 hg up -r0000
12 echo stuffy > a
13 echo % should not issue warning
14 hg ci -q -Amc
15
16 hg up -r0000
17 echo crap > a
18 hg branch testing
19 echo % should not issue warning
20 hg ci -q -Amd
@@ -0,0 +1,10 b''
1 adding a
2 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3 % should issue warning
4 adding a
5 created new head
6 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
7 % should not issue warning
8 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
9 marked working directory as branch testing
10 % should not issue warning
@@ -1,3219 +1,3223 b''
1 1 # commands.py - command processing for mercurial
2 2 #
3 3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 4 #
5 5 # This software may be used and distributed according to the terms
6 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 8 from node import hex, nullid, nullrev, short
9 9 from repo import RepoError
10 10 from i18n import _
11 11 import os, re, sys, urllib
12 12 import hg, util, revlog, bundlerepo, extensions, copies
13 13 import difflib, patch, time, help, mdiff, tempfile
14 14 import version, socket
15 15 import archival, changegroup, cmdutil, hgweb.server, sshserver, hbisect
16 16
17 17 # Commands start here, listed alphabetically
18 18
19 19 def add(ui, repo, *pats, **opts):
20 20 """add the specified files on the next commit
21 21
22 22 Schedule files to be version controlled and added to the repository.
23 23
24 24 The files will be added to the repository at the next commit. To
25 25 undo an add before that, see hg revert.
26 26
27 27 If no names are given, add all files in the repository.
28 28 """
29 29
30 30 rejected = None
31 31 exacts = {}
32 32 names = []
33 33 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts,
34 34 badmatch=util.always):
35 35 if exact:
36 36 if ui.verbose:
37 37 ui.status(_('adding %s\n') % rel)
38 38 names.append(abs)
39 39 exacts[abs] = 1
40 40 elif abs not in repo.dirstate:
41 41 ui.status(_('adding %s\n') % rel)
42 42 names.append(abs)
43 43 if not opts.get('dry_run'):
44 44 rejected = repo.add(names)
45 45 rejected = [p for p in rejected if p in exacts]
46 46 return rejected and 1 or 0
47 47
48 48 def addremove(ui, repo, *pats, **opts):
49 49 """add all new files, delete all missing files
50 50
51 51 Add all new files and remove all missing files from the repository.
52 52
53 53 New files are ignored if they match any of the patterns in .hgignore. As
54 54 with add, these changes take effect at the next commit.
55 55
56 56 Use the -s option to detect renamed files. With a parameter > 0,
57 57 this compares every removed file with every added file and records
58 58 those similar enough as renames. This option takes a percentage
59 59 between 0 (disabled) and 100 (files must be identical) as its
60 60 parameter. Detecting renamed files this way can be expensive.
61 61 """
62 62 try:
63 63 sim = float(opts.get('similarity') or 0)
64 64 except ValueError:
65 65 raise util.Abort(_('similarity must be a number'))
66 66 if sim < 0 or sim > 100:
67 67 raise util.Abort(_('similarity must be between 0 and 100'))
68 68 return cmdutil.addremove(repo, pats, opts, similarity=sim/100.)
69 69
70 70 def annotate(ui, repo, *pats, **opts):
71 71 """show changeset information per file line
72 72
73 73 List changes in files, showing the revision id responsible for each line
74 74
75 75 This command is useful to discover who did a change or when a change took
76 76 place.
77 77
78 78 Without the -a option, annotate will avoid processing files it
79 79 detects as binary. With -a, annotate will generate an annotation
80 80 anyway, probably with undesirable results.
81 81 """
82 82 datefunc = ui.quiet and util.shortdate or util.datestr
83 83 getdate = util.cachefunc(lambda x: datefunc(x[0].date()))
84 84
85 85 if not pats:
86 86 raise util.Abort(_('at least one file name or pattern required'))
87 87
88 88 opmap = [('user', lambda x: ui.shortuser(x[0].user())),
89 89 ('number', lambda x: str(x[0].rev())),
90 90 ('changeset', lambda x: short(x[0].node())),
91 91 ('date', getdate),
92 92 ('follow', lambda x: x[0].path()),
93 93 ]
94 94
95 95 if (not opts['user'] and not opts['changeset'] and not opts['date']
96 96 and not opts['follow']):
97 97 opts['number'] = 1
98 98
99 99 linenumber = opts.get('line_number') is not None
100 100 if (linenumber and (not opts['changeset']) and (not opts['number'])):
101 101 raise util.Abort(_('at least one of -n/-c is required for -l'))
102 102
103 103 funcmap = [func for op, func in opmap if opts.get(op)]
104 104 if linenumber:
105 105 lastfunc = funcmap[-1]
106 106 funcmap[-1] = lambda x: "%s:%s" % (lastfunc(x), x[1])
107 107
108 108 ctx = repo.changectx(opts['rev'])
109 109
110 110 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts,
111 111 node=ctx.node()):
112 112 fctx = ctx.filectx(abs)
113 113 if not opts['text'] and util.binary(fctx.data()):
114 114 ui.write(_("%s: binary file\n") % ((pats and rel) or abs))
115 115 continue
116 116
117 117 lines = fctx.annotate(follow=opts.get('follow'),
118 118 linenumber=linenumber)
119 119 pieces = []
120 120
121 121 for f in funcmap:
122 122 l = [f(n) for n, dummy in lines]
123 123 if l:
124 124 m = max(map(len, l))
125 125 pieces.append(["%*s" % (m, x) for x in l])
126 126
127 127 if pieces:
128 128 for p, l in zip(zip(*pieces), lines):
129 129 ui.write("%s: %s" % (" ".join(p), l[1]))
130 130
131 131 def archive(ui, repo, dest, **opts):
132 132 '''create unversioned archive of a repository revision
133 133
134 134 By default, the revision used is the parent of the working
135 135 directory; use "-r" to specify a different revision.
136 136
137 137 To specify the type of archive to create, use "-t". Valid
138 138 types are:
139 139
140 140 "files" (default): a directory full of files
141 141 "tar": tar archive, uncompressed
142 142 "tbz2": tar archive, compressed using bzip2
143 143 "tgz": tar archive, compressed using gzip
144 144 "uzip": zip archive, uncompressed
145 145 "zip": zip archive, compressed using deflate
146 146
147 147 The exact name of the destination archive or directory is given
148 148 using a format string; see "hg help export" for details.
149 149
150 150 Each member added to an archive file has a directory prefix
151 151 prepended. Use "-p" to specify a format string for the prefix.
152 152 The default is the basename of the archive, with suffixes removed.
153 153 '''
154 154
155 155 ctx = repo.changectx(opts['rev'])
156 156 if not ctx:
157 157 raise util.Abort(_('repository has no revisions'))
158 158 node = ctx.node()
159 159 dest = cmdutil.make_filename(repo, dest, node)
160 160 if os.path.realpath(dest) == repo.root:
161 161 raise util.Abort(_('repository root cannot be destination'))
162 162 dummy, matchfn, dummy = cmdutil.matchpats(repo, [], opts)
163 163 kind = opts.get('type') or 'files'
164 164 prefix = opts['prefix']
165 165 if dest == '-':
166 166 if kind == 'files':
167 167 raise util.Abort(_('cannot archive plain files to stdout'))
168 168 dest = sys.stdout
169 169 if not prefix: prefix = os.path.basename(repo.root) + '-%h'
170 170 prefix = cmdutil.make_filename(repo, prefix, node)
171 171 archival.archive(repo, dest, node, kind, not opts['no_decode'],
172 172 matchfn, prefix)
173 173
174 174 def backout(ui, repo, node=None, rev=None, **opts):
175 175 '''reverse effect of earlier changeset
176 176
177 177 Commit the backed out changes as a new changeset. The new
178 178 changeset is a child of the backed out changeset.
179 179
180 180 If you back out a changeset other than the tip, a new head is
181 181 created. This head will be the new tip and you should merge this
182 182 backout changeset with another head (current one by default).
183 183
184 184 The --merge option remembers the parent of the working directory
185 185 before starting the backout, then merges the new head with that
186 186 changeset afterwards. This saves you from doing the merge by
187 187 hand. The result of this merge is not committed, as for a normal
188 188 merge.
189 189
190 190 See 'hg help dates' for a list of formats valid for -d/--date.
191 191 '''
192 192 if rev and node:
193 193 raise util.Abort(_("please specify just one revision"))
194 194
195 195 if not rev:
196 196 rev = node
197 197
198 198 if not rev:
199 199 raise util.Abort(_("please specify a revision to backout"))
200 200
201 201 date = opts.get('date')
202 202 if date:
203 203 opts['date'] = util.parsedate(date)
204 204
205 205 cmdutil.bail_if_changed(repo)
206 206 node = repo.lookup(rev)
207 207
208 208 op1, op2 = repo.dirstate.parents()
209 209 a = repo.changelog.ancestor(op1, node)
210 210 if a != node:
211 211 raise util.Abort(_('cannot back out change on a different branch'))
212 212
213 213 p1, p2 = repo.changelog.parents(node)
214 214 if p1 == nullid:
215 215 raise util.Abort(_('cannot back out a change with no parents'))
216 216 if p2 != nullid:
217 217 if not opts['parent']:
218 218 raise util.Abort(_('cannot back out a merge changeset without '
219 219 '--parent'))
220 220 p = repo.lookup(opts['parent'])
221 221 if p not in (p1, p2):
222 222 raise util.Abort(_('%s is not a parent of %s') %
223 223 (short(p), short(node)))
224 224 parent = p
225 225 else:
226 226 if opts['parent']:
227 227 raise util.Abort(_('cannot use --parent on non-merge changeset'))
228 228 parent = p1
229 229
230 230 hg.clean(repo, node, show_stats=False)
231 231 revert_opts = opts.copy()
232 232 revert_opts['date'] = None
233 233 revert_opts['all'] = True
234 234 revert_opts['rev'] = hex(parent)
235 235 revert_opts['no_backup'] = None
236 236 revert(ui, repo, **revert_opts)
237 237 commit_opts = opts.copy()
238 238 commit_opts['addremove'] = False
239 239 if not commit_opts['message'] and not commit_opts['logfile']:
240 240 commit_opts['message'] = _("Backed out changeset %s") % (short(node))
241 241 commit_opts['force_editor'] = True
242 242 commit(ui, repo, **commit_opts)
243 243 def nice(node):
244 244 return '%d:%s' % (repo.changelog.rev(node), short(node))
245 245 ui.status(_('changeset %s backs out changeset %s\n') %
246 246 (nice(repo.changelog.tip()), nice(node)))
247 247 if op1 != node:
248 248 hg.clean(repo, op1, show_stats=False)
249 249 if opts['merge']:
250 250 ui.status(_('merging with changeset %s\n') % nice(repo.changelog.tip()))
251 251 hg.merge(repo, hex(repo.changelog.tip()))
252 252 else:
253 253 ui.status(_('the backout changeset is a new head - '
254 254 'do not forget to merge\n'))
255 255 ui.status(_('(use "backout --merge" '
256 256 'if you want to auto-merge)\n'))
257 257
258 258 def bisect(ui, repo, rev=None, extra=None,
259 259 reset=None, good=None, bad=None, skip=None, noupdate=None):
260 260 """subdivision search of changesets
261 261
262 262 This command helps to find changesets which introduce problems.
263 263 To use, mark the earliest changeset you know exhibits the problem
264 264 as bad, then mark the latest changeset which is free from the
265 265 problem as good. Bisect will update your working directory to a
266 266 revision for testing. Once you have performed tests, mark the
267 267 working directory as bad or good and bisect will either update to
268 268 another candidate changeset or announce that it has found the bad
269 269 revision.
270 270 """
271 271 # backward compatibility
272 272 if rev in "good bad reset init".split():
273 273 ui.warn(_("(use of 'hg bisect <cmd>' is deprecated)\n"))
274 274 cmd, rev, extra = rev, extra, None
275 275 if cmd == "good":
276 276 good = True
277 277 elif cmd == "bad":
278 278 bad = True
279 279 else:
280 280 reset = True
281 281 elif extra or good + bad + skip + reset > 1:
282 282 raise util.Abort("Incompatible arguments")
283 283
284 284 if reset:
285 285 p = repo.join("bisect.state")
286 286 if os.path.exists(p):
287 287 os.unlink(p)
288 288 return
289 289
290 290 # load state
291 291 state = {'good': [], 'bad': [], 'skip': []}
292 292 if os.path.exists(repo.join("bisect.state")):
293 293 for l in repo.opener("bisect.state"):
294 294 kind, node = l[:-1].split()
295 295 node = repo.lookup(node)
296 296 if kind not in state:
297 297 raise util.Abort(_("unknown bisect kind %s") % kind)
298 298 state[kind].append(node)
299 299
300 300 # update state
301 301 node = repo.lookup(rev or '.')
302 302 if good:
303 303 state['good'].append(node)
304 304 elif bad:
305 305 state['bad'].append(node)
306 306 elif skip:
307 307 state['skip'].append(node)
308 308
309 309 # save state
310 310 f = repo.opener("bisect.state", "w", atomictemp=True)
311 311 wlock = repo.wlock()
312 312 try:
313 313 for kind in state:
314 314 for node in state[kind]:
315 315 f.write("%s %s\n" % (kind, hex(node)))
316 316 f.rename()
317 317 finally:
318 318 del wlock
319 319
320 320 if not state['good'] or not state['bad']:
321 321 return
322 322
323 323 # actually bisect
324 324 node, changesets, good = hbisect.bisect(repo.changelog, state)
325 325 if changesets == 0:
326 326 ui.write(_("The first %s revision is:\n") % (good and "good" or "bad"))
327 327 displayer = cmdutil.show_changeset(ui, repo, {})
328 328 displayer.show(changenode=node)
329 329 elif node is not None:
330 330 # compute the approximate number of remaining tests
331 331 tests, size = 0, 2
332 332 while size <= changesets:
333 333 tests, size = tests + 1, size * 2
334 334 rev = repo.changelog.rev(node)
335 335 ui.write(_("Testing changeset %s:%s "
336 336 "(%s changesets remaining, ~%s tests)\n")
337 337 % (rev, short(node), changesets, tests))
338 338 if not noupdate:
339 339 cmdutil.bail_if_changed(repo)
340 340 return hg.clean(repo, node)
341 341
342 342 def branch(ui, repo, label=None, **opts):
343 343 """set or show the current branch name
344 344
345 345 With no argument, show the current branch name. With one argument,
346 346 set the working directory branch name (the branch does not exist in
347 347 the repository until the next commit).
348 348
349 349 Unless --force is specified, branch will not let you set a
350 350 branch name that shadows an existing branch.
351 351
352 352 Use the command 'hg update' to switch to an existing branch.
353 353 """
354 354
355 355 if label:
356 356 if not opts.get('force') and label in repo.branchtags():
357 357 if label not in [p.branch() for p in repo.workingctx().parents()]:
358 358 raise util.Abort(_('a branch of the same name already exists'
359 359 ' (use --force to override)'))
360 360 repo.dirstate.setbranch(util.fromlocal(label))
361 361 ui.status(_('marked working directory as branch %s\n') % label)
362 362 else:
363 363 ui.write("%s\n" % util.tolocal(repo.dirstate.branch()))
364 364
365 365 def branches(ui, repo, active=False):
366 366 """list repository named branches
367 367
368 368 List the repository's named branches, indicating which ones are
369 369 inactive. If active is specified, only show active branches.
370 370
371 371 A branch is considered active if it contains unmerged heads.
372 372
373 373 Use the command 'hg update' to switch to an existing branch.
374 374 """
375 375 b = repo.branchtags()
376 376 heads = dict.fromkeys(repo.heads(), 1)
377 377 l = [((n in heads), repo.changelog.rev(n), n, t) for t, n in b.items()]
378 378 l.sort()
379 379 l.reverse()
380 380 for ishead, r, n, t in l:
381 381 if active and not ishead:
382 382 # If we're only displaying active branches, abort the loop on
383 383 # encountering the first inactive head
384 384 break
385 385 else:
386 386 hexfunc = ui.debugflag and hex or short
387 387 if ui.quiet:
388 388 ui.write("%s\n" % t)
389 389 else:
390 390 spaces = " " * (30 - util.locallen(t))
391 391 # The code only gets here if inactive branches are being
392 392 # displayed or the branch is active.
393 393 isinactive = ((not ishead) and " (inactive)") or ''
394 394 ui.write("%s%s %s:%s%s\n" % (t, spaces, r, hexfunc(n), isinactive))
395 395
396 396 def bundle(ui, repo, fname, dest=None, **opts):
397 397 """create a changegroup file
398 398
399 399 Generate a compressed changegroup file collecting changesets not
400 400 found in the other repository.
401 401
402 402 If no destination repository is specified the destination is
403 403 assumed to have all the nodes specified by one or more --base
404 404 parameters. To create a bundle containing all changesets, use
405 405 --all (or --base null).
406 406
407 407 The bundle file can then be transferred using conventional means and
408 408 applied to another repository with the unbundle or pull command.
409 409 This is useful when direct push and pull are not available or when
410 410 exporting an entire repository is undesirable.
411 411
412 412 Applying bundles preserves all changeset contents including
413 413 permissions, copy/rename information, and revision history.
414 414 """
415 415 revs = opts.get('rev') or None
416 416 if revs:
417 417 revs = [repo.lookup(rev) for rev in revs]
418 418 if opts.get('all'):
419 419 base = ['null']
420 420 else:
421 421 base = opts.get('base')
422 422 if base:
423 423 if dest:
424 424 raise util.Abort(_("--base is incompatible with specifiying "
425 425 "a destination"))
426 426 base = [repo.lookup(rev) for rev in base]
427 427 # create the right base
428 428 # XXX: nodesbetween / changegroup* should be "fixed" instead
429 429 o = []
430 430 has = {nullid: None}
431 431 for n in base:
432 432 has.update(repo.changelog.reachable(n))
433 433 if revs:
434 434 visit = list(revs)
435 435 else:
436 436 visit = repo.changelog.heads()
437 437 seen = {}
438 438 while visit:
439 439 n = visit.pop(0)
440 440 parents = [p for p in repo.changelog.parents(n) if p not in has]
441 441 if len(parents) == 0:
442 442 o.insert(0, n)
443 443 else:
444 444 for p in parents:
445 445 if p not in seen:
446 446 seen[p] = 1
447 447 visit.append(p)
448 448 else:
449 449 cmdutil.setremoteconfig(ui, opts)
450 450 dest, revs, checkout = hg.parseurl(
451 451 ui.expandpath(dest or 'default-push', dest or 'default'), revs)
452 452 other = hg.repository(ui, dest)
453 453 o = repo.findoutgoing(other, force=opts['force'])
454 454
455 455 if revs:
456 456 cg = repo.changegroupsubset(o, revs, 'bundle')
457 457 else:
458 458 cg = repo.changegroup(o, 'bundle')
459 459 changegroup.writebundle(cg, fname, "HG10BZ")
460 460
461 461 def cat(ui, repo, file1, *pats, **opts):
462 462 """output the current or given revision of files
463 463
464 464 Print the specified files as they were at the given revision.
465 465 If no revision is given, the parent of the working directory is used,
466 466 or tip if no revision is checked out.
467 467
468 468 Output may be to a file, in which case the name of the file is
469 469 given using a format string. The formatting rules are the same as
470 470 for the export command, with the following additions:
471 471
472 472 %s basename of file being printed
473 473 %d dirname of file being printed, or '.' if in repo root
474 474 %p root-relative path name of file being printed
475 475 """
476 476 ctx = repo.changectx(opts['rev'])
477 477 err = 1
478 478 for src, abs, rel, exact in cmdutil.walk(repo, (file1,) + pats, opts,
479 479 ctx.node()):
480 480 fp = cmdutil.make_file(repo, opts['output'], ctx.node(), pathname=abs)
481 481 data = ctx.filectx(abs).data()
482 482 if opts.get('decode'):
483 483 data = repo.wwritedata(abs, data)
484 484 fp.write(data)
485 485 err = 0
486 486 return err
487 487
488 488 def clone(ui, source, dest=None, **opts):
489 489 """make a copy of an existing repository
490 490
491 491 Create a copy of an existing repository in a new directory.
492 492
493 493 If no destination directory name is specified, it defaults to the
494 494 basename of the source.
495 495
496 496 The location of the source is added to the new repository's
497 497 .hg/hgrc file, as the default to be used for future pulls.
498 498
499 499 For efficiency, hardlinks are used for cloning whenever the source
500 500 and destination are on the same filesystem (note this applies only
501 501 to the repository data, not to the checked out files). Some
502 502 filesystems, such as AFS, implement hardlinking incorrectly, but
503 503 do not report errors. In these cases, use the --pull option to
504 504 avoid hardlinking.
505 505
506 506 You can safely clone repositories and checked out files using full
507 507 hardlinks with
508 508
509 509 $ cp -al REPO REPOCLONE
510 510
511 511 which is the fastest way to clone. However, the operation is not
512 512 atomic (making sure REPO is not modified during the operation is
513 513 up to you) and you have to make sure your editor breaks hardlinks
514 514 (Emacs and most Linux Kernel tools do so).
515 515
516 516 If you use the -r option to clone up to a specific revision, no
517 517 subsequent revisions will be present in the cloned repository.
518 518 This option implies --pull, even on local repositories.
519 519
520 520 See pull for valid source format details.
521 521
522 522 It is possible to specify an ssh:// URL as the destination, but no
523 523 .hg/hgrc and working directory will be created on the remote side.
524 524 Look at the help text for the pull command for important details
525 525 about ssh:// URLs.
526 526 """
527 527 cmdutil.setremoteconfig(ui, opts)
528 528 hg.clone(ui, source, dest,
529 529 pull=opts['pull'],
530 530 stream=opts['uncompressed'],
531 531 rev=opts['rev'],
532 532 update=not opts['noupdate'])
533 533
534 534 def commit(ui, repo, *pats, **opts):
535 535 """commit the specified files or all outstanding changes
536 536
537 537 Commit changes to the given files into the repository.
538 538
539 539 If a list of files is omitted, all changes reported by "hg status"
540 540 will be committed.
541 541
542 542 If no commit message is specified, the configured editor is started to
543 543 enter a message.
544 544
545 545 See 'hg help dates' for a list of formats valid for -d/--date.
546 546 """
547 547 def commitfunc(ui, repo, files, message, match, opts):
548 548 return repo.commit(files, message, opts['user'], opts['date'], match,
549 549 force_editor=opts.get('force_editor'))
550
551 heads = repo.changelog.heads()
550 552 cmdutil.commit(ui, repo, commitfunc, pats, opts)
553 if len(repo.changelog.heads()) > len(heads):
554 ui.status(_('created new head\n'))
551 555
552 556 def copy(ui, repo, *pats, **opts):
553 557 """mark files as copied for the next commit
554 558
555 559 Mark dest as having copies of source files. If dest is a
556 560 directory, copies are put in that directory. If dest is a file,
557 561 there can only be one source.
558 562
559 563 By default, this command copies the contents of files as they
560 564 stand in the working directory. If invoked with --after, the
561 565 operation is recorded, but no copying is performed.
562 566
563 567 This command takes effect in the next commit. To undo a copy
564 568 before that, see hg revert.
565 569 """
566 570 wlock = repo.wlock(False)
567 571 try:
568 572 return cmdutil.copy(ui, repo, pats, opts)
569 573 finally:
570 574 del wlock
571 575
572 576 def debugancestor(ui, repo, *args):
573 577 """find the ancestor revision of two revisions in a given index"""
574 578 if len(args) == 3:
575 579 index, rev1, rev2 = args
576 580 r = revlog.revlog(util.opener(os.getcwd(), audit=False), index)
577 581 lookup = r.lookup
578 582 elif len(args) == 2:
579 583 if not repo:
580 584 raise util.Abort(_("There is no Mercurial repository here "
581 585 "(.hg not found)"))
582 586 rev1, rev2 = args
583 587 r = repo.changelog
584 588 lookup = repo.lookup
585 589 else:
586 590 raise util.Abort(_('either two or three arguments required'))
587 591 a = r.ancestor(lookup(rev1), lookup(rev2))
588 592 ui.write("%d:%s\n" % (r.rev(a), hex(a)))
589 593
590 594 def debugcomplete(ui, cmd='', **opts):
591 595 """returns the completion list associated with the given command"""
592 596
593 597 if opts['options']:
594 598 options = []
595 599 otables = [globalopts]
596 600 if cmd:
597 601 aliases, entry = cmdutil.findcmd(ui, cmd, table)
598 602 otables.append(entry[1])
599 603 for t in otables:
600 604 for o in t:
601 605 if o[0]:
602 606 options.append('-%s' % o[0])
603 607 options.append('--%s' % o[1])
604 608 ui.write("%s\n" % "\n".join(options))
605 609 return
606 610
607 611 clist = cmdutil.findpossible(ui, cmd, table).keys()
608 612 clist.sort()
609 613 ui.write("%s\n" % "\n".join(clist))
610 614
611 615 def debugfsinfo(ui, path = "."):
612 616 file('.debugfsinfo', 'w').write('')
613 617 ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no'))
614 618 ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no'))
615 619 ui.write('case-sensitive: %s\n' % (util.checkfolding('.debugfsinfo')
616 620 and 'yes' or 'no'))
617 621 os.unlink('.debugfsinfo')
618 622
619 623 def debugrebuildstate(ui, repo, rev=""):
620 624 """rebuild the dirstate as it would look like for the given revision"""
621 625 if rev == "":
622 626 rev = repo.changelog.tip()
623 627 ctx = repo.changectx(rev)
624 628 files = ctx.manifest()
625 629 wlock = repo.wlock()
626 630 try:
627 631 repo.dirstate.rebuild(rev, files)
628 632 finally:
629 633 del wlock
630 634
631 635 def debugcheckstate(ui, repo):
632 636 """validate the correctness of the current dirstate"""
633 637 parent1, parent2 = repo.dirstate.parents()
634 638 m1 = repo.changectx(parent1).manifest()
635 639 m2 = repo.changectx(parent2).manifest()
636 640 errors = 0
637 641 for f in repo.dirstate:
638 642 state = repo.dirstate[f]
639 643 if state in "nr" and f not in m1:
640 644 ui.warn(_("%s in state %s, but not in manifest1\n") % (f, state))
641 645 errors += 1
642 646 if state in "a" and f in m1:
643 647 ui.warn(_("%s in state %s, but also in manifest1\n") % (f, state))
644 648 errors += 1
645 649 if state in "m" and f not in m1 and f not in m2:
646 650 ui.warn(_("%s in state %s, but not in either manifest\n") %
647 651 (f, state))
648 652 errors += 1
649 653 for f in m1:
650 654 state = repo.dirstate[f]
651 655 if state not in "nrm":
652 656 ui.warn(_("%s in manifest1, but listed as state %s") % (f, state))
653 657 errors += 1
654 658 if errors:
655 659 error = _(".hg/dirstate inconsistent with current parent's manifest")
656 660 raise util.Abort(error)
657 661
658 662 def showconfig(ui, repo, *values, **opts):
659 663 """show combined config settings from all hgrc files
660 664
661 665 With no args, print names and values of all config items.
662 666
663 667 With one arg of the form section.name, print just the value of
664 668 that config item.
665 669
666 670 With multiple args, print names and values of all config items
667 671 with matching section names."""
668 672
669 673 untrusted = bool(opts.get('untrusted'))
670 674 if values:
671 675 if len([v for v in values if '.' in v]) > 1:
672 676 raise util.Abort(_('only one config item permitted'))
673 677 for section, name, value in ui.walkconfig(untrusted=untrusted):
674 678 sectname = section + '.' + name
675 679 if values:
676 680 for v in values:
677 681 if v == section:
678 682 ui.write('%s=%s\n' % (sectname, value))
679 683 elif v == sectname:
680 684 ui.write(value, '\n')
681 685 else:
682 686 ui.write('%s=%s\n' % (sectname, value))
683 687
684 688 def debugsetparents(ui, repo, rev1, rev2=None):
685 689 """manually set the parents of the current working directory
686 690
687 691 This is useful for writing repository conversion tools, but should
688 692 be used with care.
689 693 """
690 694
691 695 if not rev2:
692 696 rev2 = hex(nullid)
693 697
694 698 wlock = repo.wlock()
695 699 try:
696 700 repo.dirstate.setparents(repo.lookup(rev1), repo.lookup(rev2))
697 701 finally:
698 702 del wlock
699 703
700 704 def debugstate(ui, repo, nodates=None):
701 705 """show the contents of the current dirstate"""
702 706 k = repo.dirstate._map.items()
703 707 k.sort()
704 708 timestr = ""
705 709 showdate = not nodates
706 710 for file_, ent in k:
707 711 if showdate:
708 712 if ent[3] == -1:
709 713 # Pad or slice to locale representation
710 714 locale_len = len(time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime(0)))
711 715 timestr = 'unset'
712 716 timestr = timestr[:locale_len] + ' '*(locale_len - len(timestr))
713 717 else:
714 718 timestr = time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime(ent[3]))
715 719 if ent[1] & 020000:
716 720 mode = 'lnk'
717 721 else:
718 722 mode = '%3o' % (ent[1] & 0777)
719 723 ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_))
720 724 for f in repo.dirstate.copies():
721 725 ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f))
722 726
723 727 def debugdata(ui, file_, rev):
724 728 """dump the contents of a data file revision"""
725 729 r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_[:-2] + ".i")
726 730 try:
727 731 ui.write(r.revision(r.lookup(rev)))
728 732 except KeyError:
729 733 raise util.Abort(_('invalid revision identifier %s') % rev)
730 734
731 735 def debugdate(ui, date, range=None, **opts):
732 736 """parse and display a date"""
733 737 if opts["extended"]:
734 738 d = util.parsedate(date, util.extendeddateformats)
735 739 else:
736 740 d = util.parsedate(date)
737 741 ui.write("internal: %s %s\n" % d)
738 742 ui.write("standard: %s\n" % util.datestr(d))
739 743 if range:
740 744 m = util.matchdate(range)
741 745 ui.write("match: %s\n" % m(d[0]))
742 746
743 747 def debugindex(ui, file_):
744 748 """dump the contents of an index file"""
745 749 r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_)
746 750 ui.write(" rev offset length base linkrev" +
747 751 " nodeid p1 p2\n")
748 752 for i in xrange(r.count()):
749 753 node = r.node(i)
750 754 try:
751 755 pp = r.parents(node)
752 756 except:
753 757 pp = [nullid, nullid]
754 758 ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
755 759 i, r.start(i), r.length(i), r.base(i), r.linkrev(node),
756 760 short(node), short(pp[0]), short(pp[1])))
757 761
758 762 def debugindexdot(ui, file_):
759 763 """dump an index DAG as a .dot file"""
760 764 r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_)
761 765 ui.write("digraph G {\n")
762 766 for i in xrange(r.count()):
763 767 node = r.node(i)
764 768 pp = r.parents(node)
765 769 ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i))
766 770 if pp[1] != nullid:
767 771 ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i))
768 772 ui.write("}\n")
769 773
770 774 def debuginstall(ui):
771 775 '''test Mercurial installation'''
772 776
773 777 def writetemp(contents):
774 778 (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-")
775 779 f = os.fdopen(fd, "wb")
776 780 f.write(contents)
777 781 f.close()
778 782 return name
779 783
780 784 problems = 0
781 785
782 786 # encoding
783 787 ui.status(_("Checking encoding (%s)...\n") % util._encoding)
784 788 try:
785 789 util.fromlocal("test")
786 790 except util.Abort, inst:
787 791 ui.write(" %s\n" % inst)
788 792 ui.write(_(" (check that your locale is properly set)\n"))
789 793 problems += 1
790 794
791 795 # compiled modules
792 796 ui.status(_("Checking extensions...\n"))
793 797 try:
794 798 import bdiff, mpatch, base85
795 799 except Exception, inst:
796 800 ui.write(" %s\n" % inst)
797 801 ui.write(_(" One or more extensions could not be found"))
798 802 ui.write(_(" (check that you compiled the extensions)\n"))
799 803 problems += 1
800 804
801 805 # templates
802 806 ui.status(_("Checking templates...\n"))
803 807 try:
804 808 import templater
805 809 t = templater.templater(templater.templatepath("map-cmdline.default"))
806 810 except Exception, inst:
807 811 ui.write(" %s\n" % inst)
808 812 ui.write(_(" (templates seem to have been installed incorrectly)\n"))
809 813 problems += 1
810 814
811 815 # patch
812 816 ui.status(_("Checking patch...\n"))
813 817 patchproblems = 0
814 818 a = "1\n2\n3\n4\n"
815 819 b = "1\n2\n3\ninsert\n4\n"
816 820 fa = writetemp(a)
817 821 d = mdiff.unidiff(a, None, b, None, os.path.basename(fa),
818 822 os.path.basename(fa))
819 823 fd = writetemp(d)
820 824
821 825 files = {}
822 826 try:
823 827 patch.patch(fd, ui, cwd=os.path.dirname(fa), files=files)
824 828 except util.Abort, e:
825 829 ui.write(_(" patch call failed:\n"))
826 830 ui.write(" " + str(e) + "\n")
827 831 patchproblems += 1
828 832 else:
829 833 if list(files) != [os.path.basename(fa)]:
830 834 ui.write(_(" unexpected patch output!\n"))
831 835 patchproblems += 1
832 836 a = file(fa).read()
833 837 if a != b:
834 838 ui.write(_(" patch test failed!\n"))
835 839 patchproblems += 1
836 840
837 841 if patchproblems:
838 842 if ui.config('ui', 'patch'):
839 843 ui.write(_(" (Current patch tool may be incompatible with patch,"
840 844 " or misconfigured. Please check your .hgrc file)\n"))
841 845 else:
842 846 ui.write(_(" Internal patcher failure, please report this error"
843 847 " to http://www.selenic.com/mercurial/bts\n"))
844 848 problems += patchproblems
845 849
846 850 os.unlink(fa)
847 851 os.unlink(fd)
848 852
849 853 # editor
850 854 ui.status(_("Checking commit editor...\n"))
851 855 editor = ui.geteditor()
852 856 cmdpath = util.find_exe(editor) or util.find_exe(editor.split()[0])
853 857 if not cmdpath:
854 858 if editor == 'vi':
855 859 ui.write(_(" No commit editor set and can't find vi in PATH\n"))
856 860 ui.write(_(" (specify a commit editor in your .hgrc file)\n"))
857 861 else:
858 862 ui.write(_(" Can't find editor '%s' in PATH\n") % editor)
859 863 ui.write(_(" (specify a commit editor in your .hgrc file)\n"))
860 864 problems += 1
861 865
862 866 # check username
863 867 ui.status(_("Checking username...\n"))
864 868 user = os.environ.get("HGUSER")
865 869 if user is None:
866 870 user = ui.config("ui", "username")
867 871 if user is None:
868 872 user = os.environ.get("EMAIL")
869 873 if not user:
870 874 ui.warn(" ")
871 875 ui.username()
872 876 ui.write(_(" (specify a username in your .hgrc file)\n"))
873 877
874 878 if not problems:
875 879 ui.status(_("No problems detected\n"))
876 880 else:
877 881 ui.write(_("%s problems detected,"
878 882 " please check your install!\n") % problems)
879 883
880 884 return problems
881 885
882 886 def debugrename(ui, repo, file1, *pats, **opts):
883 887 """dump rename information"""
884 888
885 889 ctx = repo.changectx(opts.get('rev', 'tip'))
886 890 for src, abs, rel, exact in cmdutil.walk(repo, (file1,) + pats, opts,
887 891 ctx.node()):
888 892 fctx = ctx.filectx(abs)
889 893 m = fctx.filelog().renamed(fctx.filenode())
890 894 if m:
891 895 ui.write(_("%s renamed from %s:%s\n") % (rel, m[0], hex(m[1])))
892 896 else:
893 897 ui.write(_("%s not renamed\n") % rel)
894 898
895 899 def debugwalk(ui, repo, *pats, **opts):
896 900 """show how files match on given patterns"""
897 901 items = list(cmdutil.walk(repo, pats, opts))
898 902 if not items:
899 903 return
900 904 fmt = '%%s %%-%ds %%-%ds %%s' % (
901 905 max([len(abs) for (src, abs, rel, exact) in items]),
902 906 max([len(rel) for (src, abs, rel, exact) in items]))
903 907 for src, abs, rel, exact in items:
904 908 line = fmt % (src, abs, rel, exact and 'exact' or '')
905 909 ui.write("%s\n" % line.rstrip())
906 910
907 911 def diff(ui, repo, *pats, **opts):
908 912 """diff repository (or selected files)
909 913
910 914 Show differences between revisions for the specified files.
911 915
912 916 Differences between files are shown using the unified diff format.
913 917
914 918 NOTE: diff may generate unexpected results for merges, as it will
915 919 default to comparing against the working directory's first parent
916 920 changeset if no revisions are specified.
917 921
918 922 When two revision arguments are given, then changes are shown
919 923 between those revisions. If only one revision is specified then
920 924 that revision is compared to the working directory, and, when no
921 925 revisions are specified, the working directory files are compared
922 926 to its parent.
923 927
924 928 Without the -a option, diff will avoid generating diffs of files
925 929 it detects as binary. With -a, diff will generate a diff anyway,
926 930 probably with undesirable results.
927 931 """
928 932 node1, node2 = cmdutil.revpair(repo, opts['rev'])
929 933
930 934 fns, matchfn, anypats = cmdutil.matchpats(repo, pats, opts)
931 935
932 936 patch.diff(repo, node1, node2, fns, match=matchfn,
933 937 opts=patch.diffopts(ui, opts))
934 938
935 939 def export(ui, repo, *changesets, **opts):
936 940 """dump the header and diffs for one or more changesets
937 941
938 942 Print the changeset header and diffs for one or more revisions.
939 943
940 944 The information shown in the changeset header is: author,
941 945 changeset hash, parent(s) and commit comment.
942 946
943 947 NOTE: export may generate unexpected diff output for merge changesets,
944 948 as it will compare the merge changeset against its first parent only.
945 949
946 950 Output may be to a file, in which case the name of the file is
947 951 given using a format string. The formatting rules are as follows:
948 952
949 953 %% literal "%" character
950 954 %H changeset hash (40 bytes of hexadecimal)
951 955 %N number of patches being generated
952 956 %R changeset revision number
953 957 %b basename of the exporting repository
954 958 %h short-form changeset hash (12 bytes of hexadecimal)
955 959 %n zero-padded sequence number, starting at 1
956 960 %r zero-padded changeset revision number
957 961
958 962 Without the -a option, export will avoid generating diffs of files
959 963 it detects as binary. With -a, export will generate a diff anyway,
960 964 probably with undesirable results.
961 965
962 966 With the --switch-parent option, the diff will be against the second
963 967 parent. It can be useful to review a merge.
964 968 """
965 969 if not changesets:
966 970 raise util.Abort(_("export requires at least one changeset"))
967 971 revs = cmdutil.revrange(repo, changesets)
968 972 if len(revs) > 1:
969 973 ui.note(_('exporting patches:\n'))
970 974 else:
971 975 ui.note(_('exporting patch:\n'))
972 976 patch.export(repo, revs, template=opts['output'],
973 977 switch_parent=opts['switch_parent'],
974 978 opts=patch.diffopts(ui, opts))
975 979
976 980 def grep(ui, repo, pattern, *pats, **opts):
977 981 """search for a pattern in specified files and revisions
978 982
979 983 Search revisions of files for a regular expression.
980 984
981 985 This command behaves differently than Unix grep. It only accepts
982 986 Python/Perl regexps. It searches repository history, not the
983 987 working directory. It always prints the revision number in which
984 988 a match appears.
985 989
986 990 By default, grep only prints output for the first revision of a
987 991 file in which it finds a match. To get it to print every revision
988 992 that contains a change in match status ("-" for a match that
989 993 becomes a non-match, or "+" for a non-match that becomes a match),
990 994 use the --all flag.
991 995 """
992 996 reflags = 0
993 997 if opts['ignore_case']:
994 998 reflags |= re.I
995 999 try:
996 1000 regexp = re.compile(pattern, reflags)
997 1001 except Exception, inst:
998 1002 ui.warn(_("grep: invalid match pattern: %s\n") % inst)
999 1003 return None
1000 1004 sep, eol = ':', '\n'
1001 1005 if opts['print0']:
1002 1006 sep = eol = '\0'
1003 1007
1004 1008 fcache = {}
1005 1009 def getfile(fn):
1006 1010 if fn not in fcache:
1007 1011 fcache[fn] = repo.file(fn)
1008 1012 return fcache[fn]
1009 1013
1010 1014 def matchlines(body):
1011 1015 begin = 0
1012 1016 linenum = 0
1013 1017 while True:
1014 1018 match = regexp.search(body, begin)
1015 1019 if not match:
1016 1020 break
1017 1021 mstart, mend = match.span()
1018 1022 linenum += body.count('\n', begin, mstart) + 1
1019 1023 lstart = body.rfind('\n', begin, mstart) + 1 or begin
1020 1024 lend = body.find('\n', mend)
1021 1025 yield linenum, mstart - lstart, mend - lstart, body[lstart:lend]
1022 1026 begin = lend + 1
1023 1027
1024 1028 class linestate(object):
1025 1029 def __init__(self, line, linenum, colstart, colend):
1026 1030 self.line = line
1027 1031 self.linenum = linenum
1028 1032 self.colstart = colstart
1029 1033 self.colend = colend
1030 1034
1031 1035 def __eq__(self, other):
1032 1036 return self.line == other.line
1033 1037
1034 1038 matches = {}
1035 1039 copies = {}
1036 1040 def grepbody(fn, rev, body):
1037 1041 matches[rev].setdefault(fn, [])
1038 1042 m = matches[rev][fn]
1039 1043 for lnum, cstart, cend, line in matchlines(body):
1040 1044 s = linestate(line, lnum, cstart, cend)
1041 1045 m.append(s)
1042 1046
1043 1047 def difflinestates(a, b):
1044 1048 sm = difflib.SequenceMatcher(None, a, b)
1045 1049 for tag, alo, ahi, blo, bhi in sm.get_opcodes():
1046 1050 if tag == 'insert':
1047 1051 for i in xrange(blo, bhi):
1048 1052 yield ('+', b[i])
1049 1053 elif tag == 'delete':
1050 1054 for i in xrange(alo, ahi):
1051 1055 yield ('-', a[i])
1052 1056 elif tag == 'replace':
1053 1057 for i in xrange(alo, ahi):
1054 1058 yield ('-', a[i])
1055 1059 for i in xrange(blo, bhi):
1056 1060 yield ('+', b[i])
1057 1061
1058 1062 prev = {}
1059 1063 def display(fn, rev, states, prevstates):
1060 1064 datefunc = ui.quiet and util.shortdate or util.datestr
1061 1065 found = False
1062 1066 filerevmatches = {}
1063 1067 r = prev.get(fn, -1)
1064 1068 if opts['all']:
1065 1069 iter = difflinestates(states, prevstates)
1066 1070 else:
1067 1071 iter = [('', l) for l in prevstates]
1068 1072 for change, l in iter:
1069 1073 cols = [fn, str(r)]
1070 1074 if opts['line_number']:
1071 1075 cols.append(str(l.linenum))
1072 1076 if opts['all']:
1073 1077 cols.append(change)
1074 1078 if opts['user']:
1075 1079 cols.append(ui.shortuser(get(r)[1]))
1076 1080 if opts.get('date'):
1077 1081 cols.append(datefunc(get(r)[2]))
1078 1082 if opts['files_with_matches']:
1079 1083 c = (fn, r)
1080 1084 if c in filerevmatches:
1081 1085 continue
1082 1086 filerevmatches[c] = 1
1083 1087 else:
1084 1088 cols.append(l.line)
1085 1089 ui.write(sep.join(cols), eol)
1086 1090 found = True
1087 1091 return found
1088 1092
1089 1093 fstate = {}
1090 1094 skip = {}
1091 1095 get = util.cachefunc(lambda r: repo.changectx(r).changeset())
1092 1096 changeiter, matchfn = cmdutil.walkchangerevs(ui, repo, pats, get, opts)
1093 1097 found = False
1094 1098 follow = opts.get('follow')
1095 1099 for st, rev, fns in changeiter:
1096 1100 if st == 'window':
1097 1101 matches.clear()
1098 1102 elif st == 'add':
1099 1103 ctx = repo.changectx(rev)
1100 1104 matches[rev] = {}
1101 1105 for fn in fns:
1102 1106 if fn in skip:
1103 1107 continue
1104 1108 try:
1105 1109 grepbody(fn, rev, getfile(fn).read(ctx.filenode(fn)))
1106 1110 fstate.setdefault(fn, [])
1107 1111 if follow:
1108 1112 copied = getfile(fn).renamed(ctx.filenode(fn))
1109 1113 if copied:
1110 1114 copies.setdefault(rev, {})[fn] = copied[0]
1111 1115 except revlog.LookupError:
1112 1116 pass
1113 1117 elif st == 'iter':
1114 1118 states = matches[rev].items()
1115 1119 states.sort()
1116 1120 for fn, m in states:
1117 1121 copy = copies.get(rev, {}).get(fn)
1118 1122 if fn in skip:
1119 1123 if copy:
1120 1124 skip[copy] = True
1121 1125 continue
1122 1126 if fn in prev or fstate[fn]:
1123 1127 r = display(fn, rev, m, fstate[fn])
1124 1128 found = found or r
1125 1129 if r and not opts['all']:
1126 1130 skip[fn] = True
1127 1131 if copy:
1128 1132 skip[copy] = True
1129 1133 fstate[fn] = m
1130 1134 if copy:
1131 1135 fstate[copy] = m
1132 1136 prev[fn] = rev
1133 1137
1134 1138 fstate = fstate.items()
1135 1139 fstate.sort()
1136 1140 for fn, state in fstate:
1137 1141 if fn in skip:
1138 1142 continue
1139 1143 if fn not in copies.get(prev[fn], {}):
1140 1144 found = display(fn, rev, {}, state) or found
1141 1145 return (not found and 1) or 0
1142 1146
1143 1147 def heads(ui, repo, *branchrevs, **opts):
1144 1148 """show current repository heads or show branch heads
1145 1149
1146 1150 With no arguments, show all repository head changesets.
1147 1151
1148 1152 If branch or revisions names are given this will show the heads of
1149 1153 the specified branches or the branches those revisions are tagged
1150 1154 with.
1151 1155
1152 1156 Repository "heads" are changesets that don't have child
1153 1157 changesets. They are where development generally takes place and
1154 1158 are the usual targets for update and merge operations.
1155 1159
1156 1160 Branch heads are changesets that have a given branch tag, but have
1157 1161 no child changesets with that tag. They are usually where
1158 1162 development on the given branch takes place.
1159 1163 """
1160 1164 if opts['rev']:
1161 1165 start = repo.lookup(opts['rev'])
1162 1166 else:
1163 1167 start = None
1164 1168 if not branchrevs:
1165 1169 # Assume we're looking repo-wide heads if no revs were specified.
1166 1170 heads = repo.heads(start)
1167 1171 else:
1168 1172 heads = []
1169 1173 visitedset = util.set()
1170 1174 for branchrev in branchrevs:
1171 1175 branch = repo.changectx(branchrev).branch()
1172 1176 if branch in visitedset:
1173 1177 continue
1174 1178 visitedset.add(branch)
1175 1179 bheads = repo.branchheads(branch, start)
1176 1180 if not bheads:
1177 1181 if branch != branchrev:
1178 1182 ui.warn(_("no changes on branch %s containing %s are "
1179 1183 "reachable from %s\n")
1180 1184 % (branch, branchrev, opts['rev']))
1181 1185 else:
1182 1186 ui.warn(_("no changes on branch %s are reachable from %s\n")
1183 1187 % (branch, opts['rev']))
1184 1188 heads.extend(bheads)
1185 1189 if not heads:
1186 1190 return 1
1187 1191 displayer = cmdutil.show_changeset(ui, repo, opts)
1188 1192 for n in heads:
1189 1193 displayer.show(changenode=n)
1190 1194
1191 1195 def help_(ui, name=None, with_version=False):
1192 1196 """show help for a command, extension, or list of commands
1193 1197
1194 1198 With no arguments, print a list of commands and short help.
1195 1199
1196 1200 Given a command name, print help for that command.
1197 1201
1198 1202 Given an extension name, print help for that extension, and the
1199 1203 commands it provides."""
1200 1204 option_lists = []
1201 1205
1202 1206 def addglobalopts(aliases):
1203 1207 if ui.verbose:
1204 1208 option_lists.append((_("global options:"), globalopts))
1205 1209 if name == 'shortlist':
1206 1210 option_lists.append((_('use "hg help" for the full list '
1207 1211 'of commands'), ()))
1208 1212 else:
1209 1213 if name == 'shortlist':
1210 1214 msg = _('use "hg help" for the full list of commands '
1211 1215 'or "hg -v" for details')
1212 1216 elif aliases:
1213 1217 msg = _('use "hg -v help%s" to show aliases and '
1214 1218 'global options') % (name and " " + name or "")
1215 1219 else:
1216 1220 msg = _('use "hg -v help %s" to show global options') % name
1217 1221 option_lists.append((msg, ()))
1218 1222
1219 1223 def helpcmd(name):
1220 1224 if with_version:
1221 1225 version_(ui)
1222 1226 ui.write('\n')
1223 1227 aliases, i = cmdutil.findcmd(ui, name, table)
1224 1228 # synopsis
1225 1229 ui.write("%s\n" % i[2])
1226 1230
1227 1231 # aliases
1228 1232 if not ui.quiet and len(aliases) > 1:
1229 1233 ui.write(_("\naliases: %s\n") % ', '.join(aliases[1:]))
1230 1234
1231 1235 # description
1232 1236 doc = i[0].__doc__
1233 1237 if not doc:
1234 1238 doc = _("(No help text available)")
1235 1239 if ui.quiet:
1236 1240 doc = doc.splitlines(0)[0]
1237 1241 ui.write("\n%s\n" % doc.rstrip())
1238 1242
1239 1243 if not ui.quiet:
1240 1244 # options
1241 1245 if i[1]:
1242 1246 option_lists.append((_("options:\n"), i[1]))
1243 1247
1244 1248 addglobalopts(False)
1245 1249
1246 1250 def helplist(header, select=None):
1247 1251 h = {}
1248 1252 cmds = {}
1249 1253 for c, e in table.items():
1250 1254 f = c.split("|", 1)[0]
1251 1255 if select and not select(f):
1252 1256 continue
1253 1257 if name == "shortlist" and not f.startswith("^"):
1254 1258 continue
1255 1259 f = f.lstrip("^")
1256 1260 if not ui.debugflag and f.startswith("debug"):
1257 1261 continue
1258 1262 doc = e[0].__doc__
1259 1263 if not doc:
1260 1264 doc = _("(No help text available)")
1261 1265 h[f] = doc.splitlines(0)[0].rstrip()
1262 1266 cmds[f] = c.lstrip("^")
1263 1267
1264 1268 if not h:
1265 1269 ui.status(_('no commands defined\n'))
1266 1270 return
1267 1271
1268 1272 ui.status(header)
1269 1273 fns = h.keys()
1270 1274 fns.sort()
1271 1275 m = max(map(len, fns))
1272 1276 for f in fns:
1273 1277 if ui.verbose:
1274 1278 commands = cmds[f].replace("|",", ")
1275 1279 ui.write(" %s:\n %s\n"%(commands, h[f]))
1276 1280 else:
1277 1281 ui.write(' %-*s %s\n' % (m, f, h[f]))
1278 1282
1279 1283 if not ui.quiet:
1280 1284 addglobalopts(True)
1281 1285
1282 1286 def helptopic(name):
1283 1287 v = None
1284 1288 for i in help.helptable:
1285 1289 l = i.split('|')
1286 1290 if name in l:
1287 1291 v = i
1288 1292 header = l[-1]
1289 1293 if not v:
1290 1294 raise cmdutil.UnknownCommand(name)
1291 1295
1292 1296 # description
1293 1297 doc = help.helptable[v]
1294 1298 if not doc:
1295 1299 doc = _("(No help text available)")
1296 1300 if callable(doc):
1297 1301 doc = doc()
1298 1302
1299 1303 ui.write("%s\n" % header)
1300 1304 ui.write("%s\n" % doc.rstrip())
1301 1305
1302 1306 def helpext(name):
1303 1307 try:
1304 1308 mod = extensions.find(name)
1305 1309 except KeyError:
1306 1310 raise cmdutil.UnknownCommand(name)
1307 1311
1308 1312 doc = (mod.__doc__ or _('No help text available')).splitlines(0)
1309 1313 ui.write(_('%s extension - %s\n') % (name.split('.')[-1], doc[0]))
1310 1314 for d in doc[1:]:
1311 1315 ui.write(d, '\n')
1312 1316
1313 1317 ui.status('\n')
1314 1318
1315 1319 try:
1316 1320 ct = mod.cmdtable
1317 1321 except AttributeError:
1318 1322 ct = {}
1319 1323
1320 1324 modcmds = dict.fromkeys([c.split('|', 1)[0] for c in ct])
1321 1325 helplist(_('list of commands:\n\n'), modcmds.has_key)
1322 1326
1323 1327 if name and name != 'shortlist':
1324 1328 i = None
1325 1329 for f in (helpcmd, helptopic, helpext):
1326 1330 try:
1327 1331 f(name)
1328 1332 i = None
1329 1333 break
1330 1334 except cmdutil.UnknownCommand, inst:
1331 1335 i = inst
1332 1336 if i:
1333 1337 raise i
1334 1338
1335 1339 else:
1336 1340 # program name
1337 1341 if ui.verbose or with_version:
1338 1342 version_(ui)
1339 1343 else:
1340 1344 ui.status(_("Mercurial Distributed SCM\n"))
1341 1345 ui.status('\n')
1342 1346
1343 1347 # list of commands
1344 1348 if name == "shortlist":
1345 1349 header = _('basic commands:\n\n')
1346 1350 else:
1347 1351 header = _('list of commands:\n\n')
1348 1352
1349 1353 helplist(header)
1350 1354
1351 1355 # list all option lists
1352 1356 opt_output = []
1353 1357 for title, options in option_lists:
1354 1358 opt_output.append(("\n%s" % title, None))
1355 1359 for shortopt, longopt, default, desc in options:
1356 1360 if "DEPRECATED" in desc and not ui.verbose: continue
1357 1361 opt_output.append(("%2s%s" % (shortopt and "-%s" % shortopt,
1358 1362 longopt and " --%s" % longopt),
1359 1363 "%s%s" % (desc,
1360 1364 default
1361 1365 and _(" (default: %s)") % default
1362 1366 or "")))
1363 1367
1364 1368 if opt_output:
1365 1369 opts_len = max([len(line[0]) for line in opt_output if line[1]] or [0])
1366 1370 for first, second in opt_output:
1367 1371 if second:
1368 1372 ui.write(" %-*s %s\n" % (opts_len, first, second))
1369 1373 else:
1370 1374 ui.write("%s\n" % first)
1371 1375
1372 1376 def identify(ui, repo, source=None,
1373 1377 rev=None, num=None, id=None, branch=None, tags=None):
1374 1378 """identify the working copy or specified revision
1375 1379
1376 1380 With no revision, print a summary of the current state of the repo.
1377 1381
1378 1382 With a path, do a lookup in another repository.
1379 1383
1380 1384 This summary identifies the repository state using one or two parent
1381 1385 hash identifiers, followed by a "+" if there are uncommitted changes
1382 1386 in the working directory, a list of tags for this revision and a branch
1383 1387 name for non-default branches.
1384 1388 """
1385 1389
1386 1390 if not repo and not source:
1387 1391 raise util.Abort(_("There is no Mercurial repository here "
1388 1392 "(.hg not found)"))
1389 1393
1390 1394 hexfunc = ui.debugflag and hex or short
1391 1395 default = not (num or id or branch or tags)
1392 1396 output = []
1393 1397
1394 1398 if source:
1395 1399 source, revs, checkout = hg.parseurl(ui.expandpath(source), [])
1396 1400 srepo = hg.repository(ui, source)
1397 1401 if not rev and revs:
1398 1402 rev = revs[0]
1399 1403 if not rev:
1400 1404 rev = "tip"
1401 1405 if num or branch or tags:
1402 1406 raise util.Abort(
1403 1407 "can't query remote revision number, branch, or tags")
1404 1408 output = [hexfunc(srepo.lookup(rev))]
1405 1409 elif not rev:
1406 1410 ctx = repo.workingctx()
1407 1411 parents = ctx.parents()
1408 1412 changed = False
1409 1413 if default or id or num:
1410 1414 changed = ctx.files() + ctx.deleted()
1411 1415 if default or id:
1412 1416 output = ["%s%s" % ('+'.join([hexfunc(p.node()) for p in parents]),
1413 1417 (changed) and "+" or "")]
1414 1418 if num:
1415 1419 output.append("%s%s" % ('+'.join([str(p.rev()) for p in parents]),
1416 1420 (changed) and "+" or ""))
1417 1421 else:
1418 1422 ctx = repo.changectx(rev)
1419 1423 if default or id:
1420 1424 output = [hexfunc(ctx.node())]
1421 1425 if num:
1422 1426 output.append(str(ctx.rev()))
1423 1427
1424 1428 if not source and default and not ui.quiet:
1425 1429 b = util.tolocal(ctx.branch())
1426 1430 if b != 'default':
1427 1431 output.append("(%s)" % b)
1428 1432
1429 1433 # multiple tags for a single parent separated by '/'
1430 1434 t = "/".join(ctx.tags())
1431 1435 if t:
1432 1436 output.append(t)
1433 1437
1434 1438 if branch:
1435 1439 output.append(util.tolocal(ctx.branch()))
1436 1440
1437 1441 if tags:
1438 1442 output.extend(ctx.tags())
1439 1443
1440 1444 ui.write("%s\n" % ' '.join(output))
1441 1445
1442 1446 def import_(ui, repo, patch1, *patches, **opts):
1443 1447 """import an ordered set of patches
1444 1448
1445 1449 Import a list of patches and commit them individually.
1446 1450
1447 1451 If there are outstanding changes in the working directory, import
1448 1452 will abort unless given the -f flag.
1449 1453
1450 1454 You can import a patch straight from a mail message. Even patches
1451 1455 as attachments work (body part must be type text/plain or
1452 1456 text/x-patch to be used). From and Subject headers of email
1453 1457 message are used as default committer and commit message. All
1454 1458 text/plain body parts before first diff are added to commit
1455 1459 message.
1456 1460
1457 1461 If the imported patch was generated by hg export, user and description
1458 1462 from patch override values from message headers and body. Values
1459 1463 given on command line with -m and -u override these.
1460 1464
1461 1465 If --exact is specified, import will set the working directory
1462 1466 to the parent of each patch before applying it, and will abort
1463 1467 if the resulting changeset has a different ID than the one
1464 1468 recorded in the patch. This may happen due to character set
1465 1469 problems or other deficiencies in the text patch format.
1466 1470
1467 1471 To read a patch from standard input, use patch name "-".
1468 1472 See 'hg help dates' for a list of formats valid for -d/--date.
1469 1473 """
1470 1474 patches = (patch1,) + patches
1471 1475
1472 1476 date = opts.get('date')
1473 1477 if date:
1474 1478 opts['date'] = util.parsedate(date)
1475 1479
1476 1480 if opts.get('exact') or not opts['force']:
1477 1481 cmdutil.bail_if_changed(repo)
1478 1482
1479 1483 d = opts["base"]
1480 1484 strip = opts["strip"]
1481 1485 wlock = lock = None
1482 1486 try:
1483 1487 wlock = repo.wlock()
1484 1488 lock = repo.lock()
1485 1489 for p in patches:
1486 1490 pf = os.path.join(d, p)
1487 1491
1488 1492 if pf == '-':
1489 1493 ui.status(_("applying patch from stdin\n"))
1490 1494 data = patch.extract(ui, sys.stdin)
1491 1495 else:
1492 1496 ui.status(_("applying %s\n") % p)
1493 1497 if os.path.exists(pf):
1494 1498 data = patch.extract(ui, file(pf, 'rb'))
1495 1499 else:
1496 1500 data = patch.extract(ui, urllib.urlopen(pf))
1497 1501 tmpname, message, user, date, branch, nodeid, p1, p2 = data
1498 1502
1499 1503 if tmpname is None:
1500 1504 raise util.Abort(_('no diffs found'))
1501 1505
1502 1506 try:
1503 1507 cmdline_message = cmdutil.logmessage(opts)
1504 1508 if cmdline_message:
1505 1509 # pickup the cmdline msg
1506 1510 message = cmdline_message
1507 1511 elif message:
1508 1512 # pickup the patch msg
1509 1513 message = message.strip()
1510 1514 else:
1511 1515 # launch the editor
1512 1516 message = None
1513 1517 ui.debug(_('message:\n%s\n') % message)
1514 1518
1515 1519 wp = repo.workingctx().parents()
1516 1520 if opts.get('exact'):
1517 1521 if not nodeid or not p1:
1518 1522 raise util.Abort(_('not a mercurial patch'))
1519 1523 p1 = repo.lookup(p1)
1520 1524 p2 = repo.lookup(p2 or hex(nullid))
1521 1525
1522 1526 if p1 != wp[0].node():
1523 1527 hg.clean(repo, p1)
1524 1528 repo.dirstate.setparents(p1, p2)
1525 1529 elif p2:
1526 1530 try:
1527 1531 p1 = repo.lookup(p1)
1528 1532 p2 = repo.lookup(p2)
1529 1533 if p1 == wp[0].node():
1530 1534 repo.dirstate.setparents(p1, p2)
1531 1535 except RepoError:
1532 1536 pass
1533 1537 if opts.get('exact') or opts.get('import_branch'):
1534 1538 repo.dirstate.setbranch(branch or 'default')
1535 1539
1536 1540 files = {}
1537 1541 try:
1538 1542 fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root,
1539 1543 files=files)
1540 1544 finally:
1541 1545 files = patch.updatedir(ui, repo, files)
1542 1546 if not opts.get('no_commit'):
1543 1547 n = repo.commit(files, message, opts.get('user') or user,
1544 1548 opts.get('date') or date)
1545 1549 if opts.get('exact'):
1546 1550 if hex(n) != nodeid:
1547 1551 repo.rollback()
1548 1552 raise util.Abort(_('patch is damaged'
1549 1553 ' or loses information'))
1550 1554 # Force a dirstate write so that the next transaction
1551 1555 # backups an up-do-date file.
1552 1556 repo.dirstate.write()
1553 1557 finally:
1554 1558 os.unlink(tmpname)
1555 1559 finally:
1556 1560 del lock, wlock
1557 1561
1558 1562 def incoming(ui, repo, source="default", **opts):
1559 1563 """show new changesets found in source
1560 1564
1561 1565 Show new changesets found in the specified path/URL or the default
1562 1566 pull location. These are the changesets that would be pulled if a pull
1563 1567 was requested.
1564 1568
1565 1569 For remote repository, using --bundle avoids downloading the changesets
1566 1570 twice if the incoming is followed by a pull.
1567 1571
1568 1572 See pull for valid source format details.
1569 1573 """
1570 1574 limit = cmdutil.loglimit(opts)
1571 1575 source, revs, checkout = hg.parseurl(ui.expandpath(source), opts['rev'])
1572 1576 cmdutil.setremoteconfig(ui, opts)
1573 1577
1574 1578 other = hg.repository(ui, source)
1575 1579 ui.status(_('comparing with %s\n') % util.hidepassword(source))
1576 1580 if revs:
1577 1581 revs = [other.lookup(rev) for rev in revs]
1578 1582 incoming = repo.findincoming(other, heads=revs, force=opts["force"])
1579 1583 if not incoming:
1580 1584 try:
1581 1585 os.unlink(opts["bundle"])
1582 1586 except:
1583 1587 pass
1584 1588 ui.status(_("no changes found\n"))
1585 1589 return 1
1586 1590
1587 1591 cleanup = None
1588 1592 try:
1589 1593 fname = opts["bundle"]
1590 1594 if fname or not other.local():
1591 1595 # create a bundle (uncompressed if other repo is not local)
1592 1596 if revs is None:
1593 1597 cg = other.changegroup(incoming, "incoming")
1594 1598 else:
1595 1599 cg = other.changegroupsubset(incoming, revs, 'incoming')
1596 1600 bundletype = other.local() and "HG10BZ" or "HG10UN"
1597 1601 fname = cleanup = changegroup.writebundle(cg, fname, bundletype)
1598 1602 # keep written bundle?
1599 1603 if opts["bundle"]:
1600 1604 cleanup = None
1601 1605 if not other.local():
1602 1606 # use the created uncompressed bundlerepo
1603 1607 other = bundlerepo.bundlerepository(ui, repo.root, fname)
1604 1608
1605 1609 o = other.changelog.nodesbetween(incoming, revs)[0]
1606 1610 if opts['newest_first']:
1607 1611 o.reverse()
1608 1612 displayer = cmdutil.show_changeset(ui, other, opts)
1609 1613 count = 0
1610 1614 for n in o:
1611 1615 if count >= limit:
1612 1616 break
1613 1617 parents = [p for p in other.changelog.parents(n) if p != nullid]
1614 1618 if opts['no_merges'] and len(parents) == 2:
1615 1619 continue
1616 1620 count += 1
1617 1621 displayer.show(changenode=n)
1618 1622 finally:
1619 1623 if hasattr(other, 'close'):
1620 1624 other.close()
1621 1625 if cleanup:
1622 1626 os.unlink(cleanup)
1623 1627
1624 1628 def init(ui, dest=".", **opts):
1625 1629 """create a new repository in the given directory
1626 1630
1627 1631 Initialize a new repository in the given directory. If the given
1628 1632 directory does not exist, it is created.
1629 1633
1630 1634 If no directory is given, the current directory is used.
1631 1635
1632 1636 It is possible to specify an ssh:// URL as the destination.
1633 1637 Look at the help text for the pull command for important details
1634 1638 about ssh:// URLs.
1635 1639 """
1636 1640 cmdutil.setremoteconfig(ui, opts)
1637 1641 hg.repository(ui, dest, create=1)
1638 1642
1639 1643 def locate(ui, repo, *pats, **opts):
1640 1644 """locate files matching specific patterns
1641 1645
1642 1646 Print all files under Mercurial control whose names match the
1643 1647 given patterns.
1644 1648
1645 1649 This command searches the entire repository by default. To search
1646 1650 just the current directory and its subdirectories, use
1647 1651 "--include .".
1648 1652
1649 1653 If no patterns are given to match, this command prints all file
1650 1654 names.
1651 1655
1652 1656 If you want to feed the output of this command into the "xargs"
1653 1657 command, use the "-0" option to both this command and "xargs".
1654 1658 This will avoid the problem of "xargs" treating single filenames
1655 1659 that contain white space as multiple filenames.
1656 1660 """
1657 1661 end = opts['print0'] and '\0' or '\n'
1658 1662 rev = opts['rev']
1659 1663 if rev:
1660 1664 node = repo.lookup(rev)
1661 1665 else:
1662 1666 node = None
1663 1667
1664 1668 ret = 1
1665 1669 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, node=node,
1666 1670 badmatch=util.always,
1667 1671 default='relglob'):
1668 1672 if src == 'b':
1669 1673 continue
1670 1674 if not node and abs not in repo.dirstate:
1671 1675 continue
1672 1676 if opts['fullpath']:
1673 1677 ui.write(os.path.join(repo.root, abs), end)
1674 1678 else:
1675 1679 ui.write(((pats and rel) or abs), end)
1676 1680 ret = 0
1677 1681
1678 1682 return ret
1679 1683
1680 1684 def log(ui, repo, *pats, **opts):
1681 1685 """show revision history of entire repository or files
1682 1686
1683 1687 Print the revision history of the specified files or the entire
1684 1688 project.
1685 1689
1686 1690 File history is shown without following rename or copy history of
1687 1691 files. Use -f/--follow with a file name to follow history across
1688 1692 renames and copies. --follow without a file name will only show
1689 1693 ancestors or descendants of the starting revision. --follow-first
1690 1694 only follows the first parent of merge revisions.
1691 1695
1692 1696 If no revision range is specified, the default is tip:0 unless
1693 1697 --follow is set, in which case the working directory parent is
1694 1698 used as the starting revision.
1695 1699
1696 1700 See 'hg help dates' for a list of formats valid for -d/--date.
1697 1701
1698 1702 By default this command outputs: changeset id and hash, tags,
1699 1703 non-trivial parents, user, date and time, and a summary for each
1700 1704 commit. When the -v/--verbose switch is used, the list of changed
1701 1705 files and full commit message is shown.
1702 1706
1703 1707 NOTE: log -p may generate unexpected diff output for merge
1704 1708 changesets, as it will compare the merge changeset against its
1705 1709 first parent only. Also, the files: list will only reflect files
1706 1710 that are different from BOTH parents.
1707 1711
1708 1712 """
1709 1713
1710 1714 get = util.cachefunc(lambda r: repo.changectx(r).changeset())
1711 1715 changeiter, matchfn = cmdutil.walkchangerevs(ui, repo, pats, get, opts)
1712 1716
1713 1717 limit = cmdutil.loglimit(opts)
1714 1718 count = 0
1715 1719
1716 1720 if opts['copies'] and opts['rev']:
1717 1721 endrev = max(cmdutil.revrange(repo, opts['rev'])) + 1
1718 1722 else:
1719 1723 endrev = repo.changelog.count()
1720 1724 rcache = {}
1721 1725 ncache = {}
1722 1726 def getrenamed(fn, rev):
1723 1727 '''looks up all renames for a file (up to endrev) the first
1724 1728 time the file is given. It indexes on the changerev and only
1725 1729 parses the manifest if linkrev != changerev.
1726 1730 Returns rename info for fn at changerev rev.'''
1727 1731 if fn not in rcache:
1728 1732 rcache[fn] = {}
1729 1733 ncache[fn] = {}
1730 1734 fl = repo.file(fn)
1731 1735 for i in xrange(fl.count()):
1732 1736 node = fl.node(i)
1733 1737 lr = fl.linkrev(node)
1734 1738 renamed = fl.renamed(node)
1735 1739 rcache[fn][lr] = renamed
1736 1740 if renamed:
1737 1741 ncache[fn][node] = renamed
1738 1742 if lr >= endrev:
1739 1743 break
1740 1744 if rev in rcache[fn]:
1741 1745 return rcache[fn][rev]
1742 1746
1743 1747 # If linkrev != rev (i.e. rev not found in rcache) fallback to
1744 1748 # filectx logic.
1745 1749
1746 1750 try:
1747 1751 return repo.changectx(rev).filectx(fn).renamed()
1748 1752 except revlog.LookupError:
1749 1753 pass
1750 1754 return None
1751 1755
1752 1756 df = False
1753 1757 if opts["date"]:
1754 1758 df = util.matchdate(opts["date"])
1755 1759
1756 1760 only_branches = opts['only_branch']
1757 1761
1758 1762 displayer = cmdutil.show_changeset(ui, repo, opts, True, matchfn)
1759 1763 for st, rev, fns in changeiter:
1760 1764 if st == 'add':
1761 1765 changenode = repo.changelog.node(rev)
1762 1766 parents = [p for p in repo.changelog.parentrevs(rev)
1763 1767 if p != nullrev]
1764 1768 if opts['no_merges'] and len(parents) == 2:
1765 1769 continue
1766 1770 if opts['only_merges'] and len(parents) != 2:
1767 1771 continue
1768 1772
1769 1773 if only_branches:
1770 1774 revbranch = get(rev)[5]['branch']
1771 1775 if revbranch not in only_branches:
1772 1776 continue
1773 1777
1774 1778 if df:
1775 1779 changes = get(rev)
1776 1780 if not df(changes[2][0]):
1777 1781 continue
1778 1782
1779 1783 if opts['keyword']:
1780 1784 changes = get(rev)
1781 1785 miss = 0
1782 1786 for k in [kw.lower() for kw in opts['keyword']]:
1783 1787 if not (k in changes[1].lower() or
1784 1788 k in changes[4].lower() or
1785 1789 k in " ".join(changes[3]).lower()):
1786 1790 miss = 1
1787 1791 break
1788 1792 if miss:
1789 1793 continue
1790 1794
1791 1795 copies = []
1792 1796 if opts.get('copies') and rev:
1793 1797 for fn in get(rev)[3]:
1794 1798 rename = getrenamed(fn, rev)
1795 1799 if rename:
1796 1800 copies.append((fn, rename[0]))
1797 1801 displayer.show(rev, changenode, copies=copies)
1798 1802 elif st == 'iter':
1799 1803 if count == limit: break
1800 1804 if displayer.flush(rev):
1801 1805 count += 1
1802 1806
1803 1807 def manifest(ui, repo, node=None, rev=None):
1804 1808 """output the current or given revision of the project manifest
1805 1809
1806 1810 Print a list of version controlled files for the given revision.
1807 1811 If no revision is given, the parent of the working directory is used,
1808 1812 or tip if no revision is checked out.
1809 1813
1810 1814 The manifest is the list of files being version controlled. If no revision
1811 1815 is given then the first parent of the working directory is used.
1812 1816
1813 1817 With -v flag, print file permissions, symlink and executable bits. With
1814 1818 --debug flag, print file revision hashes.
1815 1819 """
1816 1820
1817 1821 if rev and node:
1818 1822 raise util.Abort(_("please specify just one revision"))
1819 1823
1820 1824 if not node:
1821 1825 node = rev
1822 1826
1823 1827 m = repo.changectx(node).manifest()
1824 1828 files = m.keys()
1825 1829 files.sort()
1826 1830
1827 1831 for f in files:
1828 1832 if ui.debugflag:
1829 1833 ui.write("%40s " % hex(m[f]))
1830 1834 if ui.verbose:
1831 1835 type = m.execf(f) and "*" or m.linkf(f) and "@" or " "
1832 1836 perm = m.execf(f) and "755" or "644"
1833 1837 ui.write("%3s %1s " % (perm, type))
1834 1838 ui.write("%s\n" % f)
1835 1839
1836 1840 def merge(ui, repo, node=None, force=None, rev=None):
1837 1841 """merge working directory with another revision
1838 1842
1839 1843 Merge the contents of the current working directory and the
1840 1844 requested revision. Files that changed between either parent are
1841 1845 marked as changed for the next commit and a commit must be
1842 1846 performed before any further updates are allowed.
1843 1847
1844 1848 If no revision is specified, the working directory's parent is a
1845 1849 head revision, and the repository contains exactly one other head,
1846 1850 the other head is merged with by default. Otherwise, an explicit
1847 1851 revision to merge with must be provided.
1848 1852 """
1849 1853
1850 1854 if rev and node:
1851 1855 raise util.Abort(_("please specify just one revision"))
1852 1856 if not node:
1853 1857 node = rev
1854 1858
1855 1859 if not node:
1856 1860 heads = repo.heads()
1857 1861 if len(heads) > 2:
1858 1862 raise util.Abort(_('repo has %d heads - '
1859 1863 'please merge with an explicit rev') %
1860 1864 len(heads))
1861 1865 parent = repo.dirstate.parents()[0]
1862 1866 if len(heads) == 1:
1863 1867 msg = _('there is nothing to merge')
1864 1868 if parent != repo.lookup(repo.workingctx().branch()):
1865 1869 msg = _('%s - use "hg update" instead') % msg
1866 1870 raise util.Abort(msg)
1867 1871
1868 1872 if parent not in heads:
1869 1873 raise util.Abort(_('working dir not at a head rev - '
1870 1874 'use "hg update" or merge with an explicit rev'))
1871 1875 node = parent == heads[0] and heads[-1] or heads[0]
1872 1876 return hg.merge(repo, node, force=force)
1873 1877
1874 1878 def outgoing(ui, repo, dest=None, **opts):
1875 1879 """show changesets not found in destination
1876 1880
1877 1881 Show changesets not found in the specified destination repository or
1878 1882 the default push location. These are the changesets that would be pushed
1879 1883 if a push was requested.
1880 1884
1881 1885 See pull for valid destination format details.
1882 1886 """
1883 1887 limit = cmdutil.loglimit(opts)
1884 1888 dest, revs, checkout = hg.parseurl(
1885 1889 ui.expandpath(dest or 'default-push', dest or 'default'), opts['rev'])
1886 1890 cmdutil.setremoteconfig(ui, opts)
1887 1891 if revs:
1888 1892 revs = [repo.lookup(rev) for rev in revs]
1889 1893
1890 1894 other = hg.repository(ui, dest)
1891 1895 ui.status(_('comparing with %s\n') % util.hidepassword(dest))
1892 1896 o = repo.findoutgoing(other, force=opts['force'])
1893 1897 if not o:
1894 1898 ui.status(_("no changes found\n"))
1895 1899 return 1
1896 1900 o = repo.changelog.nodesbetween(o, revs)[0]
1897 1901 if opts['newest_first']:
1898 1902 o.reverse()
1899 1903 displayer = cmdutil.show_changeset(ui, repo, opts)
1900 1904 count = 0
1901 1905 for n in o:
1902 1906 if count >= limit:
1903 1907 break
1904 1908 parents = [p for p in repo.changelog.parents(n) if p != nullid]
1905 1909 if opts['no_merges'] and len(parents) == 2:
1906 1910 continue
1907 1911 count += 1
1908 1912 displayer.show(changenode=n)
1909 1913
1910 1914 def parents(ui, repo, file_=None, **opts):
1911 1915 """show the parents of the working dir or revision
1912 1916
1913 1917 Print the working directory's parent revisions. If a
1914 1918 revision is given via --rev, the parent of that revision
1915 1919 will be printed. If a file argument is given, revision in
1916 1920 which the file was last changed (before the working directory
1917 1921 revision or the argument to --rev if given) is printed.
1918 1922 """
1919 1923 rev = opts.get('rev')
1920 1924 if rev:
1921 1925 ctx = repo.changectx(rev)
1922 1926 else:
1923 1927 ctx = repo.workingctx()
1924 1928
1925 1929 if file_:
1926 1930 files, match, anypats = cmdutil.matchpats(repo, (file_,), opts)
1927 1931 if anypats or len(files) != 1:
1928 1932 raise util.Abort(_('can only specify an explicit file name'))
1929 1933 file_ = files[0]
1930 1934 filenodes = []
1931 1935 for cp in ctx.parents():
1932 1936 if not cp:
1933 1937 continue
1934 1938 try:
1935 1939 filenodes.append(cp.filenode(file_))
1936 1940 except revlog.LookupError:
1937 1941 pass
1938 1942 if not filenodes:
1939 1943 raise util.Abort(_("'%s' not found in manifest!") % file_)
1940 1944 fl = repo.file(file_)
1941 1945 p = [repo.lookup(fl.linkrev(fn)) for fn in filenodes]
1942 1946 else:
1943 1947 p = [cp.node() for cp in ctx.parents()]
1944 1948
1945 1949 displayer = cmdutil.show_changeset(ui, repo, opts)
1946 1950 for n in p:
1947 1951 if n != nullid:
1948 1952 displayer.show(changenode=n)
1949 1953
1950 1954 def paths(ui, repo, search=None):
1951 1955 """show definition of symbolic path names
1952 1956
1953 1957 Show definition of symbolic path name NAME. If no name is given, show
1954 1958 definition of available names.
1955 1959
1956 1960 Path names are defined in the [paths] section of /etc/mercurial/hgrc
1957 1961 and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.
1958 1962 """
1959 1963 if search:
1960 1964 for name, path in ui.configitems("paths"):
1961 1965 if name == search:
1962 1966 ui.write("%s\n" % util.hidepassword(path))
1963 1967 return
1964 1968 ui.warn(_("not found!\n"))
1965 1969 return 1
1966 1970 else:
1967 1971 for name, path in ui.configitems("paths"):
1968 1972 ui.write("%s = %s\n" % (name, util.hidepassword(path)))
1969 1973
1970 1974 def postincoming(ui, repo, modheads, optupdate, checkout):
1971 1975 if modheads == 0:
1972 1976 return
1973 1977 if optupdate:
1974 1978 if modheads <= 1 or checkout:
1975 1979 return hg.update(repo, checkout)
1976 1980 else:
1977 1981 ui.status(_("not updating, since new heads added\n"))
1978 1982 if modheads > 1:
1979 1983 ui.status(_("(run 'hg heads' to see heads, 'hg merge' to merge)\n"))
1980 1984 else:
1981 1985 ui.status(_("(run 'hg update' to get a working copy)\n"))
1982 1986
1983 1987 def pull(ui, repo, source="default", **opts):
1984 1988 """pull changes from the specified source
1985 1989
1986 1990 Pull changes from a remote repository to a local one.
1987 1991
1988 1992 This finds all changes from the repository at the specified path
1989 1993 or URL and adds them to the local repository. By default, this
1990 1994 does not update the copy of the project in the working directory.
1991 1995
1992 1996 Valid URLs are of the form:
1993 1997
1994 1998 local/filesystem/path (or file://local/filesystem/path)
1995 1999 http://[user@]host[:port]/[path]
1996 2000 https://[user@]host[:port]/[path]
1997 2001 ssh://[user@]host[:port]/[path]
1998 2002 static-http://host[:port]/[path]
1999 2003
2000 2004 Paths in the local filesystem can either point to Mercurial
2001 2005 repositories or to bundle files (as created by 'hg bundle' or
2002 2006 'hg incoming --bundle'). The static-http:// protocol, albeit slow,
2003 2007 allows access to a Mercurial repository where you simply use a web
2004 2008 server to publish the .hg directory as static content.
2005 2009
2006 2010 An optional identifier after # indicates a particular branch, tag,
2007 2011 or changeset to pull.
2008 2012
2009 2013 Some notes about using SSH with Mercurial:
2010 2014 - SSH requires an accessible shell account on the destination machine
2011 2015 and a copy of hg in the remote path or specified with as remotecmd.
2012 2016 - path is relative to the remote user's home directory by default.
2013 2017 Use an extra slash at the start of a path to specify an absolute path:
2014 2018 ssh://example.com//tmp/repository
2015 2019 - Mercurial doesn't use its own compression via SSH; the right thing
2016 2020 to do is to configure it in your ~/.ssh/config, e.g.:
2017 2021 Host *.mylocalnetwork.example.com
2018 2022 Compression no
2019 2023 Host *
2020 2024 Compression yes
2021 2025 Alternatively specify "ssh -C" as your ssh command in your hgrc or
2022 2026 with the --ssh command line option.
2023 2027 """
2024 2028 source, revs, checkout = hg.parseurl(ui.expandpath(source), opts['rev'])
2025 2029 cmdutil.setremoteconfig(ui, opts)
2026 2030
2027 2031 other = hg.repository(ui, source)
2028 2032 ui.status(_('pulling from %s\n') % util.hidepassword(source))
2029 2033 if revs:
2030 2034 try:
2031 2035 revs = [other.lookup(rev) for rev in revs]
2032 2036 except repo.NoCapability:
2033 2037 error = _("Other repository doesn't support revision lookup, "
2034 2038 "so a rev cannot be specified.")
2035 2039 raise util.Abort(error)
2036 2040
2037 2041 modheads = repo.pull(other, heads=revs, force=opts['force'])
2038 2042 return postincoming(ui, repo, modheads, opts['update'], checkout)
2039 2043
2040 2044 def push(ui, repo, dest=None, **opts):
2041 2045 """push changes to the specified destination
2042 2046
2043 2047 Push changes from the local repository to the given destination.
2044 2048
2045 2049 This is the symmetrical operation for pull. It helps to move
2046 2050 changes from the current repository to a different one. If the
2047 2051 destination is local this is identical to a pull in that directory
2048 2052 from the current one.
2049 2053
2050 2054 By default, push will refuse to run if it detects the result would
2051 2055 increase the number of remote heads. This generally indicates the
2052 2056 the client has forgotten to sync and merge before pushing.
2053 2057
2054 2058 Valid URLs are of the form:
2055 2059
2056 2060 local/filesystem/path (or file://local/filesystem/path)
2057 2061 ssh://[user@]host[:port]/[path]
2058 2062 http://[user@]host[:port]/[path]
2059 2063 https://[user@]host[:port]/[path]
2060 2064
2061 2065 An optional identifier after # indicates a particular branch, tag,
2062 2066 or changeset to push.
2063 2067
2064 2068 Look at the help text for the pull command for important details
2065 2069 about ssh:// URLs.
2066 2070
2067 2071 Pushing to http:// and https:// URLs is only possible, if this
2068 2072 feature is explicitly enabled on the remote Mercurial server.
2069 2073 """
2070 2074 dest, revs, checkout = hg.parseurl(
2071 2075 ui.expandpath(dest or 'default-push', dest or 'default'), opts['rev'])
2072 2076 cmdutil.setremoteconfig(ui, opts)
2073 2077
2074 2078 other = hg.repository(ui, dest)
2075 2079 ui.status('pushing to %s\n' % util.hidepassword(dest))
2076 2080 if revs:
2077 2081 revs = [repo.lookup(rev) for rev in revs]
2078 2082 r = repo.push(other, opts['force'], revs=revs)
2079 2083 return r == 0
2080 2084
2081 2085 def rawcommit(ui, repo, *pats, **opts):
2082 2086 """raw commit interface (DEPRECATED)
2083 2087
2084 2088 (DEPRECATED)
2085 2089 Lowlevel commit, for use in helper scripts.
2086 2090
2087 2091 This command is not intended to be used by normal users, as it is
2088 2092 primarily useful for importing from other SCMs.
2089 2093
2090 2094 This command is now deprecated and will be removed in a future
2091 2095 release, please use debugsetparents and commit instead.
2092 2096 """
2093 2097
2094 2098 ui.warn(_("(the rawcommit command is deprecated)\n"))
2095 2099
2096 2100 message = cmdutil.logmessage(opts)
2097 2101
2098 2102 files, match, anypats = cmdutil.matchpats(repo, pats, opts)
2099 2103 if opts['files']:
2100 2104 files += open(opts['files']).read().splitlines()
2101 2105
2102 2106 parents = [repo.lookup(p) for p in opts['parent']]
2103 2107
2104 2108 try:
2105 2109 repo.rawcommit(files, message, opts['user'], opts['date'], *parents)
2106 2110 except ValueError, inst:
2107 2111 raise util.Abort(str(inst))
2108 2112
2109 2113 def recover(ui, repo):
2110 2114 """roll back an interrupted transaction
2111 2115
2112 2116 Recover from an interrupted commit or pull.
2113 2117
2114 2118 This command tries to fix the repository status after an interrupted
2115 2119 operation. It should only be necessary when Mercurial suggests it.
2116 2120 """
2117 2121 if repo.recover():
2118 2122 return hg.verify(repo)
2119 2123 return 1
2120 2124
2121 2125 def remove(ui, repo, *pats, **opts):
2122 2126 """remove the specified files on the next commit
2123 2127
2124 2128 Schedule the indicated files for removal from the repository.
2125 2129
2126 2130 This only removes files from the current branch, not from the
2127 2131 entire project history. If the files still exist in the working
2128 2132 directory, they will be deleted from it. If invoked with --after,
2129 2133 files are marked as removed, but not actually unlinked unless --force
2130 2134 is also given. Without exact file names, --after will only mark
2131 2135 files as removed if they are no longer in the working directory.
2132 2136
2133 2137 This command schedules the files to be removed at the next commit.
2134 2138 To undo a remove before that, see hg revert.
2135 2139
2136 2140 Modified files and added files are not removed by default. To
2137 2141 remove them, use the -f/--force option.
2138 2142 """
2139 2143 if not opts['after'] and not pats:
2140 2144 raise util.Abort(_('no files specified'))
2141 2145 files, matchfn, anypats = cmdutil.matchpats(repo, pats, opts)
2142 2146 exact = dict.fromkeys(files)
2143 2147 mardu = map(dict.fromkeys, repo.status(files=files, match=matchfn))[:5]
2144 2148 modified, added, removed, deleted, unknown = mardu
2145 2149 remove, forget = [], []
2146 2150 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts):
2147 2151 reason = None
2148 2152 if abs in modified and not opts['force']:
2149 2153 reason = _('is modified (use -f to force removal)')
2150 2154 elif abs in added:
2151 2155 if opts['force']:
2152 2156 forget.append(abs)
2153 2157 continue
2154 2158 reason = _('has been marked for add (use -f to force removal)')
2155 2159 exact = 1 # force the message
2156 2160 elif abs not in repo.dirstate:
2157 2161 reason = _('is not managed')
2158 2162 elif opts['after'] and not exact and abs not in deleted:
2159 2163 continue
2160 2164 elif abs in removed:
2161 2165 continue
2162 2166 if reason:
2163 2167 if exact:
2164 2168 ui.warn(_('not removing %s: file %s\n') % (rel, reason))
2165 2169 else:
2166 2170 if ui.verbose or not exact:
2167 2171 ui.status(_('removing %s\n') % rel)
2168 2172 remove.append(abs)
2169 2173 repo.forget(forget)
2170 2174 repo.remove(remove, unlink=opts['force'] or not opts['after'])
2171 2175
2172 2176 def rename(ui, repo, *pats, **opts):
2173 2177 """rename files; equivalent of copy + remove
2174 2178
2175 2179 Mark dest as copies of sources; mark sources for deletion. If
2176 2180 dest is a directory, copies are put in that directory. If dest is
2177 2181 a file, there can only be one source.
2178 2182
2179 2183 By default, this command copies the contents of files as they
2180 2184 stand in the working directory. If invoked with --after, the
2181 2185 operation is recorded, but no copying is performed.
2182 2186
2183 2187 This command takes effect in the next commit. To undo a rename
2184 2188 before that, see hg revert.
2185 2189 """
2186 2190 wlock = repo.wlock(False)
2187 2191 try:
2188 2192 return cmdutil.copy(ui, repo, pats, opts, rename=True)
2189 2193 finally:
2190 2194 del wlock
2191 2195
2192 2196 def revert(ui, repo, *pats, **opts):
2193 2197 """restore individual files or dirs to an earlier state
2194 2198
2195 2199 (use update -r to check out earlier revisions, revert does not
2196 2200 change the working dir parents)
2197 2201
2198 2202 With no revision specified, revert the named files or directories
2199 2203 to the contents they had in the parent of the working directory.
2200 2204 This restores the contents of the affected files to an unmodified
2201 2205 state and unschedules adds, removes, copies, and renames. If the
2202 2206 working directory has two parents, you must explicitly specify the
2203 2207 revision to revert to.
2204 2208
2205 2209 Using the -r option, revert the given files or directories to their
2206 2210 contents as of a specific revision. This can be helpful to "roll
2207 2211 back" some or all of an earlier change.
2208 2212 See 'hg help dates' for a list of formats valid for -d/--date.
2209 2213
2210 2214 Revert modifies the working directory. It does not commit any
2211 2215 changes, or change the parent of the working directory. If you
2212 2216 revert to a revision other than the parent of the working
2213 2217 directory, the reverted files will thus appear modified
2214 2218 afterwards.
2215 2219
2216 2220 If a file has been deleted, it is restored. If the executable
2217 2221 mode of a file was changed, it is reset.
2218 2222
2219 2223 If names are given, all files matching the names are reverted.
2220 2224 If no arguments are given, no files are reverted.
2221 2225
2222 2226 Modified files are saved with a .orig suffix before reverting.
2223 2227 To disable these backups, use --no-backup.
2224 2228 """
2225 2229
2226 2230 if opts["date"]:
2227 2231 if opts["rev"]:
2228 2232 raise util.Abort(_("you can't specify a revision and a date"))
2229 2233 opts["rev"] = cmdutil.finddate(ui, repo, opts["date"])
2230 2234
2231 2235 if not pats and not opts['all']:
2232 2236 raise util.Abort(_('no files or directories specified; '
2233 2237 'use --all to revert the whole repo'))
2234 2238
2235 2239 parent, p2 = repo.dirstate.parents()
2236 2240 if not opts['rev'] and p2 != nullid:
2237 2241 raise util.Abort(_('uncommitted merge - please provide a '
2238 2242 'specific revision'))
2239 2243 ctx = repo.changectx(opts['rev'])
2240 2244 node = ctx.node()
2241 2245 mf = ctx.manifest()
2242 2246 if node == parent:
2243 2247 pmf = mf
2244 2248 else:
2245 2249 pmf = None
2246 2250
2247 2251 # need all matching names in dirstate and manifest of target rev,
2248 2252 # so have to walk both. do not print errors if files exist in one
2249 2253 # but not other.
2250 2254
2251 2255 names = {}
2252 2256
2253 2257 wlock = repo.wlock()
2254 2258 try:
2255 2259 # walk dirstate.
2256 2260 files = []
2257 2261 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts,
2258 2262 badmatch=mf.has_key):
2259 2263 names[abs] = (rel, exact)
2260 2264 if src != 'b':
2261 2265 files.append(abs)
2262 2266
2263 2267 # walk target manifest.
2264 2268
2265 2269 def badmatch(path):
2266 2270 if path in names:
2267 2271 return True
2268 2272 path_ = path + '/'
2269 2273 for f in names:
2270 2274 if f.startswith(path_):
2271 2275 return True
2272 2276 return False
2273 2277
2274 2278 for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, node=node,
2275 2279 badmatch=badmatch):
2276 2280 if abs in names or src == 'b':
2277 2281 continue
2278 2282 names[abs] = (rel, exact)
2279 2283
2280 2284 changes = repo.status(files=files, match=names.has_key)[:4]
2281 2285 modified, added, removed, deleted = map(dict.fromkeys, changes)
2282 2286
2283 2287 # if f is a rename, also revert the source
2284 2288 cwd = repo.getcwd()
2285 2289 for f in added:
2286 2290 src = repo.dirstate.copied(f)
2287 2291 if src and src not in names and repo.dirstate[src] == 'r':
2288 2292 removed[src] = None
2289 2293 names[src] = (repo.pathto(src, cwd), True)
2290 2294
2291 2295 def removeforget(abs):
2292 2296 if repo.dirstate[abs] == 'a':
2293 2297 return _('forgetting %s\n')
2294 2298 return _('removing %s\n')
2295 2299
2296 2300 revert = ([], _('reverting %s\n'))
2297 2301 add = ([], _('adding %s\n'))
2298 2302 remove = ([], removeforget)
2299 2303 undelete = ([], _('undeleting %s\n'))
2300 2304
2301 2305 disptable = (
2302 2306 # dispatch table:
2303 2307 # file state
2304 2308 # action if in target manifest
2305 2309 # action if not in target manifest
2306 2310 # make backup if in target manifest
2307 2311 # make backup if not in target manifest
2308 2312 (modified, revert, remove, True, True),
2309 2313 (added, revert, remove, True, False),
2310 2314 (removed, undelete, None, False, False),
2311 2315 (deleted, revert, remove, False, False),
2312 2316 )
2313 2317
2314 2318 entries = names.items()
2315 2319 entries.sort()
2316 2320
2317 2321 for abs, (rel, exact) in entries:
2318 2322 mfentry = mf.get(abs)
2319 2323 target = repo.wjoin(abs)
2320 2324 def handle(xlist, dobackup):
2321 2325 xlist[0].append(abs)
2322 2326 if dobackup and not opts['no_backup'] and util.lexists(target):
2323 2327 bakname = "%s.orig" % rel
2324 2328 ui.note(_('saving current version of %s as %s\n') %
2325 2329 (rel, bakname))
2326 2330 if not opts.get('dry_run'):
2327 2331 util.copyfile(target, bakname)
2328 2332 if ui.verbose or not exact:
2329 2333 msg = xlist[1]
2330 2334 if not isinstance(msg, basestring):
2331 2335 msg = msg(abs)
2332 2336 ui.status(msg % rel)
2333 2337 for table, hitlist, misslist, backuphit, backupmiss in disptable:
2334 2338 if abs not in table: continue
2335 2339 # file has changed in dirstate
2336 2340 if mfentry:
2337 2341 handle(hitlist, backuphit)
2338 2342 elif misslist is not None:
2339 2343 handle(misslist, backupmiss)
2340 2344 break
2341 2345 else:
2342 2346 if abs not in repo.dirstate:
2343 2347 if mfentry:
2344 2348 handle(add, True)
2345 2349 elif exact:
2346 2350 ui.warn(_('file not managed: %s\n') % rel)
2347 2351 continue
2348 2352 # file has not changed in dirstate
2349 2353 if node == parent:
2350 2354 if exact: ui.warn(_('no changes needed to %s\n') % rel)
2351 2355 continue
2352 2356 if pmf is None:
2353 2357 # only need parent manifest in this unlikely case,
2354 2358 # so do not read by default
2355 2359 pmf = repo.changectx(parent).manifest()
2356 2360 if abs in pmf:
2357 2361 if mfentry:
2358 2362 # if version of file is same in parent and target
2359 2363 # manifests, do nothing
2360 2364 if (pmf[abs] != mfentry or
2361 2365 pmf.flags(abs) != mf.flags(abs)):
2362 2366 handle(revert, False)
2363 2367 else:
2364 2368 handle(remove, False)
2365 2369
2366 2370 if not opts.get('dry_run'):
2367 2371 def checkout(f):
2368 2372 fc = ctx[f]
2369 2373 repo.wwrite(f, fc.data(), fc.fileflags())
2370 2374
2371 2375 audit_path = util.path_auditor(repo.root)
2372 2376 for f in remove[0]:
2373 2377 if repo.dirstate[f] == 'a':
2374 2378 repo.dirstate.forget(f)
2375 2379 continue
2376 2380 audit_path(f)
2377 2381 try:
2378 2382 util.unlink(repo.wjoin(f))
2379 2383 except OSError:
2380 2384 pass
2381 2385 repo.dirstate.remove(f)
2382 2386
2383 2387 normal = None
2384 2388 if node == parent:
2385 2389 # We're reverting to our parent. If possible, we'd like status
2386 2390 # to report the file as clean. We have to use normallookup for
2387 2391 # merges to avoid losing information about merged/dirty files.
2388 2392 if p2 != nullid:
2389 2393 normal = repo.dirstate.normallookup
2390 2394 else:
2391 2395 normal = repo.dirstate.normal
2392 2396 for f in revert[0]:
2393 2397 checkout(f)
2394 2398 if normal:
2395 2399 normal(f)
2396 2400
2397 2401 for f in add[0]:
2398 2402 checkout(f)
2399 2403 repo.dirstate.add(f)
2400 2404
2401 2405 normal = repo.dirstate.normallookup
2402 2406 if node == parent and p2 == nullid:
2403 2407 normal = repo.dirstate.normal
2404 2408 for f in undelete[0]:
2405 2409 checkout(f)
2406 2410 normal(f)
2407 2411
2408 2412 finally:
2409 2413 del wlock
2410 2414
2411 2415 def rollback(ui, repo):
2412 2416 """roll back the last transaction
2413 2417
2414 2418 This command should be used with care. There is only one level of
2415 2419 rollback, and there is no way to undo a rollback. It will also
2416 2420 restore the dirstate at the time of the last transaction, losing
2417 2421 any dirstate changes since that time.
2418 2422
2419 2423 Transactions are used to encapsulate the effects of all commands
2420 2424 that create new changesets or propagate existing changesets into a
2421 2425 repository. For example, the following commands are transactional,
2422 2426 and their effects can be rolled back:
2423 2427
2424 2428 commit
2425 2429 import
2426 2430 pull
2427 2431 push (with this repository as destination)
2428 2432 unbundle
2429 2433
2430 2434 This command is not intended for use on public repositories. Once
2431 2435 changes are visible for pull by other users, rolling a transaction
2432 2436 back locally is ineffective (someone else may already have pulled
2433 2437 the changes). Furthermore, a race is possible with readers of the
2434 2438 repository; for example an in-progress pull from the repository
2435 2439 may fail if a rollback is performed.
2436 2440 """
2437 2441 repo.rollback()
2438 2442
2439 2443 def root(ui, repo):
2440 2444 """print the root (top) of the current working dir
2441 2445
2442 2446 Print the root directory of the current repository.
2443 2447 """
2444 2448 ui.write(repo.root + "\n")
2445 2449
2446 2450 def serve(ui, repo, **opts):
2447 2451 """export the repository via HTTP
2448 2452
2449 2453 Start a local HTTP repository browser and pull server.
2450 2454
2451 2455 By default, the server logs accesses to stdout and errors to
2452 2456 stderr. Use the "-A" and "-E" options to log to files.
2453 2457 """
2454 2458
2455 2459 if opts["stdio"]:
2456 2460 if repo is None:
2457 2461 raise RepoError(_("There is no Mercurial repository here"
2458 2462 " (.hg not found)"))
2459 2463 s = sshserver.sshserver(ui, repo)
2460 2464 s.serve_forever()
2461 2465
2462 2466 parentui = ui.parentui or ui
2463 2467 optlist = ("name templates style address port prefix ipv6"
2464 2468 " accesslog errorlog webdir_conf certificate")
2465 2469 for o in optlist.split():
2466 2470 if opts[o]:
2467 2471 parentui.setconfig("web", o, str(opts[o]))
2468 2472 if (repo is not None) and (repo.ui != parentui):
2469 2473 repo.ui.setconfig("web", o, str(opts[o]))
2470 2474
2471 2475 if repo is None and not ui.config("web", "webdir_conf"):
2472 2476 raise RepoError(_("There is no Mercurial repository here"
2473 2477 " (.hg not found)"))
2474 2478
2475 2479 class service:
2476 2480 def init(self):
2477 2481 util.set_signal_handler()
2478 2482 self.httpd = hgweb.server.create_server(parentui, repo)
2479 2483
2480 2484 if not ui.verbose: return
2481 2485
2482 2486 if self.httpd.prefix:
2483 2487 prefix = self.httpd.prefix.strip('/') + '/'
2484 2488 else:
2485 2489 prefix = ''
2486 2490
2487 2491 port = ':%d' % self.httpd.port
2488 2492 if port == ':80':
2489 2493 port = ''
2490 2494
2491 2495 ui.status(_('listening at http://%s%s/%s (%s:%d)\n') %
2492 2496 (self.httpd.fqaddr, port, prefix, self.httpd.addr, self.httpd.port))
2493 2497
2494 2498 def run(self):
2495 2499 self.httpd.serve_forever()
2496 2500
2497 2501 service = service()
2498 2502
2499 2503 cmdutil.service(opts, initfn=service.init, runfn=service.run)
2500 2504
2501 2505 def status(ui, repo, *pats, **opts):
2502 2506 """show changed files in the working directory
2503 2507
2504 2508 Show status of files in the repository. If names are given, only
2505 2509 files that match are shown. Files that are clean or ignored or
2506 2510 source of a copy/move operation, are not listed unless -c (clean),
2507 2511 -i (ignored), -C (copies) or -A is given. Unless options described
2508 2512 with "show only ..." are given, the options -mardu are used.
2509 2513
2510 2514 Option -q/--quiet hides untracked (unknown and ignored) files
2511 2515 unless explicitly requested with -u/--unknown or -i/-ignored.
2512 2516
2513 2517 NOTE: status may appear to disagree with diff if permissions have
2514 2518 changed or a merge has occurred. The standard diff format does not
2515 2519 report permission changes and diff only reports changes relative
2516 2520 to one merge parent.
2517 2521
2518 2522 If one revision is given, it is used as the base revision.
2519 2523 If two revisions are given, the difference between them is shown.
2520 2524
2521 2525 The codes used to show the status of files are:
2522 2526 M = modified
2523 2527 A = added
2524 2528 R = removed
2525 2529 C = clean
2526 2530 ! = deleted, but still tracked
2527 2531 ? = not tracked
2528 2532 I = ignored
2529 2533 = the previous added file was copied from here
2530 2534 """
2531 2535
2532 2536 all = opts['all']
2533 2537 node1, node2 = cmdutil.revpair(repo, opts.get('rev'))
2534 2538
2535 2539 files, matchfn, anypats = cmdutil.matchpats(repo, pats, opts)
2536 2540 cwd = (pats and repo.getcwd()) or ''
2537 2541 modified, added, removed, deleted, unknown, ignored, clean = [
2538 2542 n for n in repo.status(node1=node1, node2=node2, files=files,
2539 2543 match=matchfn,
2540 2544 list_ignored=opts['ignored']
2541 2545 or all and not ui.quiet,
2542 2546 list_clean=opts['clean'] or all,
2543 2547 list_unknown=opts['unknown']
2544 2548 or not (ui.quiet or
2545 2549 opts['modified'] or
2546 2550 opts['added'] or
2547 2551 opts['removed'] or
2548 2552 opts['deleted'] or
2549 2553 opts['ignored']))]
2550 2554
2551 2555 changetypes = (('modified', 'M', modified),
2552 2556 ('added', 'A', added),
2553 2557 ('removed', 'R', removed),
2554 2558 ('deleted', '!', deleted),
2555 2559 ('unknown', '?', unknown),
2556 2560 ('ignored', 'I', ignored))
2557 2561
2558 2562 explicit_changetypes = changetypes + (('clean', 'C', clean),)
2559 2563
2560 2564 copy = {}
2561 2565 showcopy = {}
2562 2566 if ((all or opts.get('copies')) and not opts.get('no_status')):
2563 2567 if opts.get('rev') == []:
2564 2568 # fast path, more correct with merge parents
2565 2569 showcopy = copy = repo.dirstate.copies().copy()
2566 2570 else:
2567 2571 ctxn = repo.changectx(nullid)
2568 2572 ctx1 = repo.changectx(node1)
2569 2573 ctx2 = repo.changectx(node2)
2570 2574 if node2 is None:
2571 2575 ctx2 = repo.workingctx()
2572 2576 copy, diverge = copies.copies(repo, ctx1, ctx2, ctxn)
2573 2577 for k, v in copy.items():
2574 2578 copy[v] = k
2575 2579
2576 2580 end = opts['print0'] and '\0' or '\n'
2577 2581
2578 2582 for opt, char, changes in ([ct for ct in explicit_changetypes
2579 2583 if all or opts[ct[0]]]
2580 2584 or changetypes):
2581 2585
2582 2586 if opts['no_status']:
2583 2587 format = "%%s%s" % end
2584 2588 else:
2585 2589 format = "%s %%s%s" % (char, end)
2586 2590
2587 2591 for f in changes:
2588 2592 ui.write(format % repo.pathto(f, cwd))
2589 2593 if f in copy and (f in added or f in showcopy):
2590 2594 ui.write(' %s%s' % (repo.pathto(copy[f], cwd), end))
2591 2595
2592 2596 def tag(ui, repo, name1, *names, **opts):
2593 2597 """add one or more tags for the current or given revision
2594 2598
2595 2599 Name a particular revision using <name>.
2596 2600
2597 2601 Tags are used to name particular revisions of the repository and are
2598 2602 very useful to compare different revisions, to go back to significant
2599 2603 earlier versions or to mark branch points as releases, etc.
2600 2604
2601 2605 If no revision is given, the parent of the working directory is used,
2602 2606 or tip if no revision is checked out.
2603 2607
2604 2608 To facilitate version control, distribution, and merging of tags,
2605 2609 they are stored as a file named ".hgtags" which is managed
2606 2610 similarly to other project files and can be hand-edited if
2607 2611 necessary. The file '.hg/localtags' is used for local tags (not
2608 2612 shared among repositories).
2609 2613
2610 2614 See 'hg help dates' for a list of formats valid for -d/--date.
2611 2615 """
2612 2616
2613 2617 rev_ = None
2614 2618 names = (name1,) + names
2615 2619 if len(names) != len(dict.fromkeys(names)):
2616 2620 raise util.Abort(_('tag names must be unique'))
2617 2621 for n in names:
2618 2622 if n in ['tip', '.', 'null']:
2619 2623 raise util.Abort(_('the name \'%s\' is reserved') % n)
2620 2624 if opts['rev'] and opts['remove']:
2621 2625 raise util.Abort(_("--rev and --remove are incompatible"))
2622 2626 if opts['rev']:
2623 2627 rev_ = opts['rev']
2624 2628 message = opts['message']
2625 2629 if opts['remove']:
2626 2630 expectedtype = opts['local'] and 'local' or 'global'
2627 2631 for n in names:
2628 2632 if not repo.tagtype(n):
2629 2633 raise util.Abort(_('tag \'%s\' does not exist') % n)
2630 2634 if repo.tagtype(n) != expectedtype:
2631 2635 raise util.Abort(_('tag \'%s\' is not a %s tag') %
2632 2636 (n, expectedtype))
2633 2637 rev_ = nullid
2634 2638 if not message:
2635 2639 message = _('Removed tag %s') % ', '.join(names)
2636 2640 elif not opts['force']:
2637 2641 for n in names:
2638 2642 if n in repo.tags():
2639 2643 raise util.Abort(_('tag \'%s\' already exists '
2640 2644 '(use -f to force)') % n)
2641 2645 if not rev_ and repo.dirstate.parents()[1] != nullid:
2642 2646 raise util.Abort(_('uncommitted merge - please provide a '
2643 2647 'specific revision'))
2644 2648 r = repo.changectx(rev_).node()
2645 2649
2646 2650 if not message:
2647 2651 message = (_('Added tag %s for changeset %s') %
2648 2652 (', '.join(names), short(r)))
2649 2653
2650 2654 date = opts.get('date')
2651 2655 if date:
2652 2656 date = util.parsedate(date)
2653 2657
2654 2658 repo.tag(names, r, message, opts['local'], opts['user'], date)
2655 2659
2656 2660 def tags(ui, repo):
2657 2661 """list repository tags
2658 2662
2659 2663 List the repository tags.
2660 2664
2661 2665 This lists both regular and local tags. When the -v/--verbose switch
2662 2666 is used, a third column "local" is printed for local tags.
2663 2667 """
2664 2668
2665 2669 l = repo.tagslist()
2666 2670 l.reverse()
2667 2671 hexfunc = ui.debugflag and hex or short
2668 2672 tagtype = ""
2669 2673
2670 2674 for t, n in l:
2671 2675 if ui.quiet:
2672 2676 ui.write("%s\n" % t)
2673 2677 continue
2674 2678
2675 2679 try:
2676 2680 hn = hexfunc(n)
2677 2681 r = "%5d:%s" % (repo.changelog.rev(n), hn)
2678 2682 except revlog.LookupError:
2679 2683 r = " ?:%s" % hn
2680 2684 else:
2681 2685 spaces = " " * (30 - util.locallen(t))
2682 2686 if ui.verbose:
2683 2687 if repo.tagtype(t) == 'local':
2684 2688 tagtype = " local"
2685 2689 else:
2686 2690 tagtype = ""
2687 2691 ui.write("%s%s %s%s\n" % (t, spaces, r, tagtype))
2688 2692
2689 2693 def tip(ui, repo, **opts):
2690 2694 """show the tip revision
2691 2695
2692 2696 Show the tip revision.
2693 2697 """
2694 2698 cmdutil.show_changeset(ui, repo, opts).show(nullrev+repo.changelog.count())
2695 2699
2696 2700 def unbundle(ui, repo, fname1, *fnames, **opts):
2697 2701 """apply one or more changegroup files
2698 2702
2699 2703 Apply one or more compressed changegroup files generated by the
2700 2704 bundle command.
2701 2705 """
2702 2706 fnames = (fname1,) + fnames
2703 2707
2704 2708 lock = None
2705 2709 try:
2706 2710 lock = repo.lock()
2707 2711 for fname in fnames:
2708 2712 if os.path.exists(fname):
2709 2713 f = open(fname, "rb")
2710 2714 else:
2711 2715 f = urllib.urlopen(fname)
2712 2716 gen = changegroup.readbundle(f, fname)
2713 2717 modheads = repo.addchangegroup(gen, 'unbundle', 'bundle:' + fname)
2714 2718 finally:
2715 2719 del lock
2716 2720
2717 2721 return postincoming(ui, repo, modheads, opts['update'], None)
2718 2722
2719 2723 def update(ui, repo, node=None, rev=None, clean=False, date=None):
2720 2724 """update working directory
2721 2725
2722 2726 Update the working directory to the specified revision, or the
2723 2727 tip of the current branch if none is specified.
2724 2728 See 'hg help dates' for a list of formats valid for -d/--date.
2725 2729
2726 2730 If there are no outstanding changes in the working directory and
2727 2731 there is a linear relationship between the current version and the
2728 2732 requested version, the result is the requested version.
2729 2733
2730 2734 To merge the working directory with another revision, use the
2731 2735 merge command.
2732 2736
2733 2737 By default, update will refuse to run if doing so would require
2734 2738 discarding local changes.
2735 2739 """
2736 2740 if rev and node:
2737 2741 raise util.Abort(_("please specify just one revision"))
2738 2742
2739 2743 if not rev:
2740 2744 rev = node
2741 2745
2742 2746 if date:
2743 2747 if rev:
2744 2748 raise util.Abort(_("you can't specify a revision and a date"))
2745 2749 rev = cmdutil.finddate(ui, repo, date)
2746 2750
2747 2751 if clean:
2748 2752 return hg.clean(repo, rev)
2749 2753 else:
2750 2754 return hg.update(repo, rev)
2751 2755
2752 2756 def verify(ui, repo):
2753 2757 """verify the integrity of the repository
2754 2758
2755 2759 Verify the integrity of the current repository.
2756 2760
2757 2761 This will perform an extensive check of the repository's
2758 2762 integrity, validating the hashes and checksums of each entry in
2759 2763 the changelog, manifest, and tracked files, as well as the
2760 2764 integrity of their crosslinks and indices.
2761 2765 """
2762 2766 return hg.verify(repo)
2763 2767
2764 2768 def version_(ui):
2765 2769 """output version and copyright information"""
2766 2770 ui.write(_("Mercurial Distributed SCM (version %s)\n")
2767 2771 % version.get_version())
2768 2772 ui.status(_(
2769 2773 "\nCopyright (C) 2005-2008 Matt Mackall <mpm@selenic.com> and others\n"
2770 2774 "This is free software; see the source for copying conditions. "
2771 2775 "There is NO\nwarranty; "
2772 2776 "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
2773 2777 ))
2774 2778
2775 2779 # Command options and aliases are listed here, alphabetically
2776 2780
2777 2781 globalopts = [
2778 2782 ('R', 'repository', '',
2779 2783 _('repository root directory or symbolic path name')),
2780 2784 ('', 'cwd', '', _('change working directory')),
2781 2785 ('y', 'noninteractive', None,
2782 2786 _('do not prompt, assume \'yes\' for any required answers')),
2783 2787 ('q', 'quiet', None, _('suppress output')),
2784 2788 ('v', 'verbose', None, _('enable additional output')),
2785 2789 ('', 'config', [], _('set/override config option')),
2786 2790 ('', 'debug', None, _('enable debugging output')),
2787 2791 ('', 'debugger', None, _('start debugger')),
2788 2792 ('', 'encoding', util._encoding, _('set the charset encoding')),
2789 2793 ('', 'encodingmode', util._encodingmode, _('set the charset encoding mode')),
2790 2794 ('', 'lsprof', None, _('print improved command execution profile')),
2791 2795 ('', 'traceback', None, _('print traceback on exception')),
2792 2796 ('', 'time', None, _('time how long the command takes')),
2793 2797 ('', 'profile', None, _('print command execution profile')),
2794 2798 ('', 'version', None, _('output version information and exit')),
2795 2799 ('h', 'help', None, _('display help and exit')),
2796 2800 ]
2797 2801
2798 2802 dryrunopts = [('n', 'dry-run', None,
2799 2803 _('do not perform actions, just print output'))]
2800 2804
2801 2805 remoteopts = [
2802 2806 ('e', 'ssh', '', _('specify ssh command to use')),
2803 2807 ('', 'remotecmd', '', _('specify hg command to run on the remote side')),
2804 2808 ]
2805 2809
2806 2810 walkopts = [
2807 2811 ('I', 'include', [], _('include names matching the given patterns')),
2808 2812 ('X', 'exclude', [], _('exclude names matching the given patterns')),
2809 2813 ]
2810 2814
2811 2815 commitopts = [
2812 2816 ('m', 'message', '', _('use <text> as commit message')),
2813 2817 ('l', 'logfile', '', _('read commit message from <file>')),
2814 2818 ]
2815 2819
2816 2820 commitopts2 = [
2817 2821 ('d', 'date', '', _('record datecode as commit date')),
2818 2822 ('u', 'user', '', _('record user as committer')),
2819 2823 ]
2820 2824
2821 2825 templateopts = [
2822 2826 ('', 'style', '', _('display using template map file')),
2823 2827 ('', 'template', '', _('display with template')),
2824 2828 ]
2825 2829
2826 2830 logopts = [
2827 2831 ('p', 'patch', None, _('show patch')),
2828 2832 ('l', 'limit', '', _('limit number of changes displayed')),
2829 2833 ('M', 'no-merges', None, _('do not show merges')),
2830 2834 ] + templateopts
2831 2835
2832 2836 table = {
2833 2837 "^add": (add, walkopts + dryrunopts, _('hg add [OPTION]... [FILE]...')),
2834 2838 "addremove":
2835 2839 (addremove,
2836 2840 [('s', 'similarity', '',
2837 2841 _('guess renamed files by similarity (0<=s<=100)')),
2838 2842 ] + walkopts + dryrunopts,
2839 2843 _('hg addremove [OPTION]... [FILE]...')),
2840 2844 "^annotate|blame":
2841 2845 (annotate,
2842 2846 [('r', 'rev', '', _('annotate the specified revision')),
2843 2847 ('f', 'follow', None, _('follow file copies and renames')),
2844 2848 ('a', 'text', None, _('treat all files as text')),
2845 2849 ('u', 'user', None, _('list the author (long with -v)')),
2846 2850 ('d', 'date', None, _('list the date (short with -q)')),
2847 2851 ('n', 'number', None, _('list the revision number (default)')),
2848 2852 ('c', 'changeset', None, _('list the changeset')),
2849 2853 ('l', 'line-number', None,
2850 2854 _('show line number at the first appearance'))
2851 2855 ] + walkopts,
2852 2856 _('hg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...')),
2853 2857 "archive":
2854 2858 (archive,
2855 2859 [('', 'no-decode', None, _('do not pass files through decoders')),
2856 2860 ('p', 'prefix', '', _('directory prefix for files in archive')),
2857 2861 ('r', 'rev', '', _('revision to distribute')),
2858 2862 ('t', 'type', '', _('type of distribution to create')),
2859 2863 ] + walkopts,
2860 2864 _('hg archive [OPTION]... DEST')),
2861 2865 "backout":
2862 2866 (backout,
2863 2867 [('', 'merge', None,
2864 2868 _('merge with old dirstate parent after backout')),
2865 2869 ('', 'parent', '', _('parent to choose when backing out merge')),
2866 2870 ('r', 'rev', '', _('revision to backout')),
2867 2871 ] + walkopts + commitopts + commitopts2,
2868 2872 _('hg backout [OPTION]... [-r] REV')),
2869 2873 "bisect":
2870 2874 (bisect,
2871 2875 [('r', 'reset', False, _('reset bisect state')),
2872 2876 ('g', 'good', False, _('mark changeset good')),
2873 2877 ('b', 'bad', False, _('mark changeset bad')),
2874 2878 ('s', 'skip', False, _('skip testing changeset')),
2875 2879 ('U', 'noupdate', False, _('do not update to target'))],
2876 2880 _("hg bisect [-gbsr] [REV]")),
2877 2881 "branch":
2878 2882 (branch,
2879 2883 [('f', 'force', None,
2880 2884 _('set branch name even if it shadows an existing branch'))],
2881 2885 _('hg branch [-f] [NAME]')),
2882 2886 "branches":
2883 2887 (branches,
2884 2888 [('a', 'active', False,
2885 2889 _('show only branches that have unmerged heads'))],
2886 2890 _('hg branches [-a]')),
2887 2891 "bundle":
2888 2892 (bundle,
2889 2893 [('f', 'force', None,
2890 2894 _('run even when remote repository is unrelated')),
2891 2895 ('r', 'rev', [],
2892 2896 _('a changeset up to which you would like to bundle')),
2893 2897 ('', 'base', [],
2894 2898 _('a base changeset to specify instead of a destination')),
2895 2899 ('a', 'all', None,
2896 2900 _('bundle all changesets in the repository')),
2897 2901 ] + remoteopts,
2898 2902 _('hg bundle [-f] [-a] [-r REV]... [--base REV]... FILE [DEST]')),
2899 2903 "cat":
2900 2904 (cat,
2901 2905 [('o', 'output', '', _('print output to file with formatted name')),
2902 2906 ('r', 'rev', '', _('print the given revision')),
2903 2907 ('', 'decode', None, _('apply any matching decode filter')),
2904 2908 ] + walkopts,
2905 2909 _('hg cat [OPTION]... FILE...')),
2906 2910 "^clone":
2907 2911 (clone,
2908 2912 [('U', 'noupdate', None, _('do not update the new working directory')),
2909 2913 ('r', 'rev', [],
2910 2914 _('a changeset you would like to have after cloning')),
2911 2915 ('', 'pull', None, _('use pull protocol to copy metadata')),
2912 2916 ('', 'uncompressed', None,
2913 2917 _('use uncompressed transfer (fast over LAN)')),
2914 2918 ] + remoteopts,
2915 2919 _('hg clone [OPTION]... SOURCE [DEST]')),
2916 2920 "^commit|ci":
2917 2921 (commit,
2918 2922 [('A', 'addremove', None,
2919 2923 _('mark new/missing files as added/removed before committing')),
2920 2924 ] + walkopts + commitopts + commitopts2,
2921 2925 _('hg commit [OPTION]... [FILE]...')),
2922 2926 "copy|cp":
2923 2927 (copy,
2924 2928 [('A', 'after', None, _('record a copy that has already occurred')),
2925 2929 ('f', 'force', None,
2926 2930 _('forcibly copy over an existing managed file')),
2927 2931 ] + walkopts + dryrunopts,
2928 2932 _('hg copy [OPTION]... [SOURCE]... DEST')),
2929 2933 "debugancestor": (debugancestor, [],
2930 2934 _('hg debugancestor [INDEX] REV1 REV2')),
2931 2935 "debugcheckstate": (debugcheckstate, [], _('hg debugcheckstate')),
2932 2936 "debugcomplete":
2933 2937 (debugcomplete,
2934 2938 [('o', 'options', None, _('show the command options'))],
2935 2939 _('hg debugcomplete [-o] CMD')),
2936 2940 "debugdate":
2937 2941 (debugdate,
2938 2942 [('e', 'extended', None, _('try extended date formats'))],
2939 2943 _('hg debugdate [-e] DATE [RANGE]')),
2940 2944 "debugdata": (debugdata, [], _('hg debugdata FILE REV')),
2941 2945 "debugfsinfo": (debugfsinfo, [], _('hg debugfsinfo [PATH]')),
2942 2946 "debugindex": (debugindex, [], _('hg debugindex FILE')),
2943 2947 "debugindexdot": (debugindexdot, [], _('hg debugindexdot FILE')),
2944 2948 "debuginstall": (debuginstall, [], _('hg debuginstall')),
2945 2949 "debugrawcommit|rawcommit":
2946 2950 (rawcommit,
2947 2951 [('p', 'parent', [], _('parent')),
2948 2952 ('F', 'files', '', _('file list'))
2949 2953 ] + commitopts + commitopts2,
2950 2954 _('hg debugrawcommit [OPTION]... [FILE]...')),
2951 2955 "debugrebuildstate":
2952 2956 (debugrebuildstate,
2953 2957 [('r', 'rev', '', _('revision to rebuild to'))],
2954 2958 _('hg debugrebuildstate [-r REV] [REV]')),
2955 2959 "debugrename":
2956 2960 (debugrename,
2957 2961 [('r', 'rev', '', _('revision to debug'))],
2958 2962 _('hg debugrename [-r REV] FILE')),
2959 2963 "debugsetparents":
2960 2964 (debugsetparents,
2961 2965 [],
2962 2966 _('hg debugsetparents REV1 [REV2]')),
2963 2967 "debugstate":
2964 2968 (debugstate,
2965 2969 [('', 'nodates', None, _('do not display the saved mtime'))],
2966 2970 _('hg debugstate [OPTS]')),
2967 2971 "debugwalk": (debugwalk, walkopts, _('hg debugwalk [OPTION]... [FILE]...')),
2968 2972 "^diff":
2969 2973 (diff,
2970 2974 [('r', 'rev', [], _('revision')),
2971 2975 ('a', 'text', None, _('treat all files as text')),
2972 2976 ('p', 'show-function', None,
2973 2977 _('show which function each change is in')),
2974 2978 ('g', 'git', None, _('use git extended diff format')),
2975 2979 ('', 'nodates', None, _("don't include dates in diff headers")),
2976 2980 ('w', 'ignore-all-space', None,
2977 2981 _('ignore white space when comparing lines')),
2978 2982 ('b', 'ignore-space-change', None,
2979 2983 _('ignore changes in the amount of white space')),
2980 2984 ('B', 'ignore-blank-lines', None,
2981 2985 _('ignore changes whose lines are all blank')),
2982 2986 ('U', 'unified', 3,
2983 2987 _('number of lines of context to show'))
2984 2988 ] + walkopts,
2985 2989 _('hg diff [OPTION]... [-r REV1 [-r REV2]] [FILE]...')),
2986 2990 "^export":
2987 2991 (export,
2988 2992 [('o', 'output', '', _('print output to file with formatted name')),
2989 2993 ('a', 'text', None, _('treat all files as text')),
2990 2994 ('g', 'git', None, _('use git extended diff format')),
2991 2995 ('', 'nodates', None, _("don't include dates in diff headers")),
2992 2996 ('', 'switch-parent', None, _('diff against the second parent'))],
2993 2997 _('hg export [OPTION]... [-o OUTFILESPEC] REV...')),
2994 2998 "grep":
2995 2999 (grep,
2996 3000 [('0', 'print0', None, _('end fields with NUL')),
2997 3001 ('', 'all', None, _('print all revisions that match')),
2998 3002 ('f', 'follow', None,
2999 3003 _('follow changeset history, or file history across copies and renames')),
3000 3004 ('i', 'ignore-case', None, _('ignore case when matching')),
3001 3005 ('l', 'files-with-matches', None,
3002 3006 _('print only filenames and revs that match')),
3003 3007 ('n', 'line-number', None, _('print matching line numbers')),
3004 3008 ('r', 'rev', [], _('search in given revision range')),
3005 3009 ('u', 'user', None, _('list the author (long with -v)')),
3006 3010 ('d', 'date', None, _('list the date (short with -q)')),
3007 3011 ] + walkopts,
3008 3012 _('hg grep [OPTION]... PATTERN [FILE]...')),
3009 3013 "heads":
3010 3014 (heads,
3011 3015 [('r', 'rev', '', _('show only heads which are descendants of rev')),
3012 3016 ] + templateopts,
3013 3017 _('hg heads [-r REV] [REV]...')),
3014 3018 "help": (help_, [], _('hg help [COMMAND]')),
3015 3019 "identify|id":
3016 3020 (identify,
3017 3021 [('r', 'rev', '', _('identify the specified rev')),
3018 3022 ('n', 'num', None, _('show local revision number')),
3019 3023 ('i', 'id', None, _('show global revision id')),
3020 3024 ('b', 'branch', None, _('show branch')),
3021 3025 ('t', 'tags', None, _('show tags'))],
3022 3026 _('hg identify [-nibt] [-r REV] [SOURCE]')),
3023 3027 "import|patch":
3024 3028 (import_,
3025 3029 [('p', 'strip', 1,
3026 3030 _('directory strip option for patch. This has the same\n'
3027 3031 'meaning as the corresponding patch option')),
3028 3032 ('b', 'base', '', _('base path')),
3029 3033 ('f', 'force', None,
3030 3034 _('skip check for outstanding uncommitted changes')),
3031 3035 ('', 'no-commit', None, _("don't commit, just update the working directory")),
3032 3036 ('', 'exact', None,
3033 3037 _('apply patch to the nodes from which it was generated')),
3034 3038 ('', 'import-branch', None,
3035 3039 _('Use any branch information in patch (implied by --exact)'))] +
3036 3040 commitopts + commitopts2,
3037 3041 _('hg import [OPTION]... PATCH...')),
3038 3042 "incoming|in":
3039 3043 (incoming,
3040 3044 [('f', 'force', None,
3041 3045 _('run even when remote repository is unrelated')),
3042 3046 ('n', 'newest-first', None, _('show newest record first')),
3043 3047 ('', 'bundle', '', _('file to store the bundles into')),
3044 3048 ('r', 'rev', [],
3045 3049 _('a specific revision up to which you would like to pull')),
3046 3050 ] + logopts + remoteopts,
3047 3051 _('hg incoming [-p] [-n] [-M] [-f] [-r REV]...'
3048 3052 ' [--bundle FILENAME] [SOURCE]')),
3049 3053 "^init":
3050 3054 (init,
3051 3055 remoteopts,
3052 3056 _('hg init [-e CMD] [--remotecmd CMD] [DEST]')),
3053 3057 "locate":
3054 3058 (locate,
3055 3059 [('r', 'rev', '', _('search the repository as it stood at rev')),
3056 3060 ('0', 'print0', None,
3057 3061 _('end filenames with NUL, for use with xargs')),
3058 3062 ('f', 'fullpath', None,
3059 3063 _('print complete paths from the filesystem root')),
3060 3064 ] + walkopts,
3061 3065 _('hg locate [OPTION]... [PATTERN]...')),
3062 3066 "^log|history":
3063 3067 (log,
3064 3068 [('f', 'follow', None,
3065 3069 _('follow changeset history, or file history across copies and renames')),
3066 3070 ('', 'follow-first', None,
3067 3071 _('only follow the first parent of merge changesets')),
3068 3072 ('d', 'date', '', _('show revs matching date spec')),
3069 3073 ('C', 'copies', None, _('show copied files')),
3070 3074 ('k', 'keyword', [], _('do case-insensitive search for a keyword')),
3071 3075 ('r', 'rev', [], _('show the specified revision or range')),
3072 3076 ('', 'removed', None, _('include revs where files were removed')),
3073 3077 ('m', 'only-merges', None, _('show only merges')),
3074 3078 ('b', 'only-branch', [],
3075 3079 _('show only changesets within the given named branch')),
3076 3080 ('P', 'prune', [], _('do not display revision or any of its ancestors')),
3077 3081 ] + logopts + walkopts,
3078 3082 _('hg log [OPTION]... [FILE]')),
3079 3083 "manifest":
3080 3084 (manifest,
3081 3085 [('r', 'rev', '', _('revision to display'))],
3082 3086 _('hg manifest [-r REV]')),
3083 3087 "^merge":
3084 3088 (merge,
3085 3089 [('f', 'force', None, _('force a merge with outstanding changes')),
3086 3090 ('r', 'rev', '', _('revision to merge')),
3087 3091 ],
3088 3092 _('hg merge [-f] [[-r] REV]')),
3089 3093 "outgoing|out":
3090 3094 (outgoing,
3091 3095 [('f', 'force', None,
3092 3096 _('run even when remote repository is unrelated')),
3093 3097 ('r', 'rev', [],
3094 3098 _('a specific revision up to which you would like to push')),
3095 3099 ('n', 'newest-first', None, _('show newest record first')),
3096 3100 ] + logopts + remoteopts,
3097 3101 _('hg outgoing [-M] [-p] [-n] [-f] [-r REV]... [DEST]')),
3098 3102 "^parents":
3099 3103 (parents,
3100 3104 [('r', 'rev', '', _('show parents from the specified rev')),
3101 3105 ] + templateopts,
3102 3106 _('hg parents [-r REV] [FILE]')),
3103 3107 "paths": (paths, [], _('hg paths [NAME]')),
3104 3108 "^pull":
3105 3109 (pull,
3106 3110 [('u', 'update', None,
3107 3111 _('update to new tip if changesets were pulled')),
3108 3112 ('f', 'force', None,
3109 3113 _('run even when remote repository is unrelated')),
3110 3114 ('r', 'rev', [],
3111 3115 _('a specific revision up to which you would like to pull')),
3112 3116 ] + remoteopts,
3113 3117 _('hg pull [-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]')),
3114 3118 "^push":
3115 3119 (push,
3116 3120 [('f', 'force', None, _('force push')),
3117 3121 ('r', 'rev', [],
3118 3122 _('a specific revision up to which you would like to push')),
3119 3123 ] + remoteopts,
3120 3124 _('hg push [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]')),
3121 3125 "recover": (recover, [], _('hg recover')),
3122 3126 "^remove|rm":
3123 3127 (remove,
3124 3128 [('A', 'after', None, _('record remove without deleting')),
3125 3129 ('f', 'force', None, _('remove file even if modified')),
3126 3130 ] + walkopts,
3127 3131 _('hg remove [OPTION]... FILE...')),
3128 3132 "rename|mv":
3129 3133 (rename,
3130 3134 [('A', 'after', None, _('record a rename that has already occurred')),
3131 3135 ('f', 'force', None,
3132 3136 _('forcibly copy over an existing managed file')),
3133 3137 ] + walkopts + dryrunopts,
3134 3138 _('hg rename [OPTION]... SOURCE... DEST')),
3135 3139 "revert":
3136 3140 (revert,
3137 3141 [('a', 'all', None, _('revert all changes when no arguments given')),
3138 3142 ('d', 'date', '', _('tipmost revision matching date')),
3139 3143 ('r', 'rev', '', _('revision to revert to')),
3140 3144 ('', 'no-backup', None, _('do not save backup copies of files')),
3141 3145 ] + walkopts + dryrunopts,
3142 3146 _('hg revert [OPTION]... [-r REV] [NAME]...')),
3143 3147 "rollback": (rollback, [], _('hg rollback')),
3144 3148 "root": (root, [], _('hg root')),
3145 3149 "^serve":
3146 3150 (serve,
3147 3151 [('A', 'accesslog', '', _('name of access log file to write to')),
3148 3152 ('d', 'daemon', None, _('run server in background')),
3149 3153 ('', 'daemon-pipefds', '', _('used internally by daemon mode')),
3150 3154 ('E', 'errorlog', '', _('name of error log file to write to')),
3151 3155 ('p', 'port', 0, _('port to listen on (default: 8000)')),
3152 3156 ('a', 'address', '', _('address to listen on (default: all interfaces)')),
3153 3157 ('', 'prefix', '', _('prefix path to serve from (default: server root)')),
3154 3158 ('n', 'name', '',
3155 3159 _('name to show in web pages (default: working dir)')),
3156 3160 ('', 'webdir-conf', '', _('name of the webdir config file'
3157 3161 ' (serve more than one repo)')),
3158 3162 ('', 'pid-file', '', _('name of file to write process ID to')),
3159 3163 ('', 'stdio', None, _('for remote clients')),
3160 3164 ('t', 'templates', '', _('web templates to use')),
3161 3165 ('', 'style', '', _('template style to use')),
3162 3166 ('6', 'ipv6', None, _('use IPv6 in addition to IPv4')),
3163 3167 ('', 'certificate', '', _('SSL certificate file'))],
3164 3168 _('hg serve [OPTION]...')),
3165 3169 "showconfig|debugconfig":
3166 3170 (showconfig,
3167 3171 [('u', 'untrusted', None, _('show untrusted configuration options'))],
3168 3172 _('hg showconfig [-u] [NAME]...')),
3169 3173 "^status|st":
3170 3174 (status,
3171 3175 [('A', 'all', None, _('show status of all files')),
3172 3176 ('m', 'modified', None, _('show only modified files')),
3173 3177 ('a', 'added', None, _('show only added files')),
3174 3178 ('r', 'removed', None, _('show only removed files')),
3175 3179 ('d', 'deleted', None, _('show only deleted (but tracked) files')),
3176 3180 ('c', 'clean', None, _('show only files without changes')),
3177 3181 ('u', 'unknown', None, _('show only unknown (not tracked) files')),
3178 3182 ('i', 'ignored', None, _('show only ignored files')),
3179 3183 ('n', 'no-status', None, _('hide status prefix')),
3180 3184 ('C', 'copies', None, _('show source of copied files')),
3181 3185 ('0', 'print0', None,
3182 3186 _('end filenames with NUL, for use with xargs')),
3183 3187 ('', 'rev', [], _('show difference from revision')),
3184 3188 ] + walkopts,
3185 3189 _('hg status [OPTION]... [FILE]...')),
3186 3190 "tag":
3187 3191 (tag,
3188 3192 [('f', 'force', None, _('replace existing tag')),
3189 3193 ('l', 'local', None, _('make the tag local')),
3190 3194 ('r', 'rev', '', _('revision to tag')),
3191 3195 ('', 'remove', None, _('remove a tag')),
3192 3196 # -l/--local is already there, commitopts cannot be used
3193 3197 ('m', 'message', '', _('use <text> as commit message')),
3194 3198 ] + commitopts2,
3195 3199 _('hg tag [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME...')),
3196 3200 "tags": (tags, [], _('hg tags')),
3197 3201 "tip":
3198 3202 (tip,
3199 3203 [('p', 'patch', None, _('show patch')),
3200 3204 ] + templateopts,
3201 3205 _('hg tip [-p]')),
3202 3206 "unbundle":
3203 3207 (unbundle,
3204 3208 [('u', 'update', None,
3205 3209 _('update to new tip if changesets were unbundled'))],
3206 3210 _('hg unbundle [-u] FILE...')),
3207 3211 "^update|up|checkout|co":
3208 3212 (update,
3209 3213 [('C', 'clean', None, _('overwrite locally modified files')),
3210 3214 ('d', 'date', '', _('tipmost revision matching date')),
3211 3215 ('r', 'rev', '', _('revision'))],
3212 3216 _('hg update [-C] [-d DATE] [[-r] REV]')),
3213 3217 "verify": (verify, [], _('hg verify')),
3214 3218 "version": (version_, [], _('hg version')),
3215 3219 }
3216 3220
3217 3221 norepo = ("clone init version help debugcomplete debugdata"
3218 3222 " debugindex debugindexdot debugdate debuginstall debugfsinfo")
3219 3223 optionalrepo = ("identify paths serve showconfig debugancestor")
@@ -1,38 +1,39 b''
1 1 adding a
2 2 ? a
3 3 adding a
4 4 A a
5 5 A a
6 6 ? b
7 7 A a
8 8 A b
9 9 % should fail
10 10 b already tracked!
11 11 A a
12 12 A b
13 13 % should fail
14 14 a already tracked!
15 15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
16 created new head
16 17 merging a
17 18 warning: conflicts during merge.
18 19 merging a failed!
19 20 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
20 21 There are unresolved merges, you can redo the full merge using:
21 22 hg update -C 2
22 23 hg merge 1
23 24 M a
24 25 ? a.orig
25 26 % should fail
26 27 a already tracked!
27 28 M a
28 29 ? a.orig
29 30 % issue683
30 31 R a
31 32 ? a.orig
32 33 M a
33 34 ? a.orig
34 35 c does not exist!
35 36 d does not exist!
36 37 M a
37 38 A c
38 39 ? a.orig
@@ -1,96 +1,98 b''
1 1 % init
2 2 % commit
3 3 adding a
4 4 % annotate -c
5 5 8435f90966e4: a
6 6 % annotate -cl
7 7 8435f90966e4:1: a
8 8 % annotate -d
9 9 Thu Jan 01 00:00:01 1970 +0000: a
10 10 % annotate -n
11 11 0: a
12 12 % annotate -nl
13 13 0:1: a
14 14 % annotate -u
15 15 nobody: a
16 16 % annotate -cdnu
17 17 nobody 0 8435f90966e4 Thu Jan 01 00:00:01 1970 +0000: a
18 18 % annotate -cdnul
19 19 nobody 0 8435f90966e4 Thu Jan 01 00:00:01 1970 +0000:1: a
20 20 % annotate -n b
21 21 2: a
22 22 2: a
23 23 2: a
24 24 3: b4
25 25 3: b5
26 26 3: b6
27 27 % annotate -nl b
28 28 2:1: a
29 29 2:2: a
30 30 2:3: a
31 31 3:4: b4
32 32 3:5: b5
33 33 3:6: b6
34 34 % annotate -nf b
35 35 0 a: a
36 36 1 a: a
37 37 1 a: a
38 38 3 b: b4
39 39 3 b: b5
40 40 3 b: b6
41 41 % annotate -nlf b
42 42 0 a:1: a
43 43 1 a:2: a
44 44 1 a:3: a
45 45 3 b:4: b4
46 46 3 b:5: b5
47 47 3 b:6: b6
48 48 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
49 created new head
49 50 merging b
50 51 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
51 52 (branch merge, don't forget to commit)
52 53 % annotate after merge
53 54 0 a: a
54 55 1 a: a
55 56 1 a: a
56 57 3 b: b4
57 58 4 b: c
58 59 3 b: b5
59 60 % annotate after merge with -l
60 61 0 a:1: a
61 62 1 a:2: a
62 63 1 a:3: a
63 64 3 b:4: b4
64 65 4 b:5: c
65 66 3 b:5: b5
66 67 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
68 created new head
67 69 merging b
68 70 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
69 71 (branch merge, don't forget to commit)
70 72 % annotate after rename merge
71 73 0 a: a
72 74 6 b: z
73 75 1 a: a
74 76 3 b: b4
75 77 4 b: c
76 78 3 b: b5
77 79 7 b: d
78 80 % annotate after rename merge with -l
79 81 0 a:1: a
80 82 6 b:2: z
81 83 1 a:3: a
82 84 3 b:4: b4
83 85 4 b:5: c
84 86 3 b:5: b5
85 87 7 b:7: d
86 88 % linkrev vs rev
87 89 0: a
88 90 1: a
89 91 1: a
90 92 % linkrev vs rev with -l
91 93 0:1: a
92 94 1:2: a
93 95 1:3: a
94 96 % generate ABA rename configuration
95 97 % annotate after ABA with follow
96 98 foo: foo
@@ -1,89 +1,94 b''
1 1 # should complain
2 2 abort: please specify a revision to backout
3 3 abort: please specify just one revision
4 4 # basic operation
5 5 adding a
6 6 reverting a
7 7 changeset 2:2929462c3dff backs out changeset 1:a820f4f40a57
8 8 a
9 9 # file that was removed is recreated
10 10 adding a
11 11 adding a
12 12 changeset 2:de31bdc76c0d backs out changeset 1:76862dcce372
13 13 content
14 14 # backout of backout is as if nothing happened
15 15 removing a
16 16 changeset 3:7f6d0f120113 backs out changeset 2:de31bdc76c0d
17 17 cat: a: No such file or directory
18 18 # across branch
19 19 adding a
20 20 adding b
21 21 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
22 22 abort: cannot back out change on a different branch
23 23 adding c
24 created new head
24 25 abort: cannot back out change on a different branch
25 26 # backout with merge
26 27 adding a
27 28 reverting a
29 created new head
28 30 changeset 3:26b8ccb9ad91 backs out changeset 1:5a50a024c182
29 31 merging with changeset 3:26b8ccb9ad91
30 32 merging a
31 33 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
32 34 (branch merge, don't forget to commit)
33 35 line 1
34 36 line 2
35 37 line 3
36 38 # backout should not back out subsequent changesets
37 39 adding a
38 40 adding b
39 41 reverting a
42 created new head
40 43 changeset 3:3202beb76721 backs out changeset 1:22bca4c721e5
41 44 the backout changeset is a new head - do not forget to merge
42 45 (use "backout --merge" if you want to auto-merge)
43 46 b
44 47 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
45 48 adding a
46 49 adding b
47 50 adding c
48 51 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
49 52 adding d
53 created new head
50 54 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
51 55 (branch merge, don't forget to commit)
52 56 # backout of merge should fail
53 57 abort: cannot back out a merge changeset without --parent
54 58 # backout of merge with bad parent should fail
55 59 abort: cb9a9f314b8b is not a parent of b2f3bb92043e
56 60 # backout of non-merge with parent should fail
57 61 abort: cannot use --parent on non-merge changeset
58 62 # backout with valid parent should be ok
59 63 removing d
60 64 changeset 5:10e5328c8435 backs out changeset 4:b2f3bb92043e
61 65 rolling back last transaction
62 66 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
63 67 removing c
64 68 changeset 5:033590168430 backs out changeset 4:b2f3bb92043e
65 69 # named branches
66 70 adding default
67 71 marked working directory as branch branch1
68 72 adding file1
69 73 marked working directory as branch branch2
70 74 adding file2
71 75 removing file1
76 created new head
72 77 changeset 3:f1c642b1d8e5 backs out changeset 1:bf1602f437f3
73 78 the backout changeset is a new head - do not forget to merge
74 79 (use "backout --merge" if you want to auto-merge)
75 80 % on branch2 with branch1 not merged, so file1 should still exist:
76 81 45bbcd363bf0 (branch2)
77 82 C default
78 83 C file1
79 84 C file2
80 85 % on branch2 with branch1 merged, so file1 should be gone:
81 86 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
82 87 (branch merge, don't forget to commit)
83 88 21d4dc6f9a41 (branch2) tip
84 89 C default
85 90 C file2
86 91 % on branch1, so no file1 and file2:
87 92 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
88 93 f1c642b1d8e5 (branch1)
89 94 C default
@@ -1,151 +1,154 b''
1 1 0: Adding root node
2 2 -------
3 3 0: Adding root node
4 4 =======
5 5 marked working directory as branch a
6 6 1: Adding a branch
7 7 -------
8 8 1: Adding a branch
9 9 =======
10 10 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
11 11 marked working directory as branch b
12 created new head
12 13 2: Adding b branch
13 14 1: Adding a branch
14 15 -------
15 16 2: Adding b branch
16 17 =======
17 18 3: Adding b branch head 1
18 19 1: Adding a branch
19 20 -------
20 21 3: Adding b branch head 1
21 22 =======
22 23 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
24 created new head
23 25 4: Adding b branch head 2
24 26 3: Adding b branch head 1
25 27 1: Adding a branch
26 28 -------
27 29 4: Adding b branch head 2
28 30 3: Adding b branch head 1
29 31 =======
30 32 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
33 created new head
31 34 5: Adding b branch head 3
32 35 4: Adding b branch head 2
33 36 3: Adding b branch head 1
34 37 1: Adding a branch
35 38 -------
36 39 5: Adding b branch head 3
37 40 4: Adding b branch head 2
38 41 3: Adding b branch head 1
39 42 =======
40 43 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
41 44 (branch merge, don't forget to commit)
42 45 6: Merging b branch head 2 and b branch head 3
43 46 3: Adding b branch head 1
44 47 1: Adding a branch
45 48 -------
46 49 6: Merging b branch head 2 and b branch head 3
47 50 3: Adding b branch head 1
48 51 =======
49 52 marked working directory as branch c
50 53 7: Adding c branch
51 54 3: Adding b branch head 1
52 55 1: Adding a branch
53 56 -------
54 57 7: Adding c branch
55 58 =======
56 59 no changes on branch c containing . are reachable from 3
57 60 1
58 61 -------
59 62 7: Adding c branch
60 63 0
61 64 -------
62 65 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
63 66 0
64 67 -------
65 68 3: Adding b branch head 1
66 69 0
67 70 -------
68 71 3: Adding b branch head 1
69 72 6: Merging b branch head 2 and b branch head 3
70 73 0
71 74 -------
72 75 no changes on branch b containing . are reachable from 7
73 76 1
74 77 =======
75 78 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
76 79 7: Adding c branch
77 80 3: Adding b branch head 1
78 81 1: Adding a branch
79 82 -------
80 83 0: Adding root node
81 84 -------
82 85 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
83 86 7: Adding c branch
84 87 3: Adding b branch head 1
85 88 1: Adding a branch
86 89 -------
87 90 1: Adding a branch
88 91 -------
89 92 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
90 93 7: Adding c branch
91 94 3: Adding b branch head 1
92 95 1: Adding a branch
93 96 -------
94 97 6: Merging b branch head 2 and b branch head 3
95 98 3: Adding b branch head 1
96 99 -------
97 100 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
98 101 7: Adding c branch
99 102 3: Adding b branch head 1
100 103 1: Adding a branch
101 104 -------
102 105 6: Merging b branch head 2 and b branch head 3
103 106 3: Adding b branch head 1
104 107 -------
105 108 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
106 109 7: Adding c branch
107 110 3: Adding b branch head 1
108 111 1: Adding a branch
109 112 -------
110 113 6: Merging b branch head 2 and b branch head 3
111 114 3: Adding b branch head 1
112 115 -------
113 116 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
114 117 7: Adding c branch
115 118 3: Adding b branch head 1
116 119 1: Adding a branch
117 120 -------
118 121 6: Merging b branch head 2 and b branch head 3
119 122 3: Adding b branch head 1
120 123 -------
121 124 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
122 125 7: Adding c branch
123 126 3: Adding b branch head 1
124 127 1: Adding a branch
125 128 -------
126 129 6: Merging b branch head 2 and b branch head 3
127 130 3: Adding b branch head 1
128 131 -------
129 132 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
130 133 7: Adding c branch
131 134 3: Adding b branch head 1
132 135 1: Adding a branch
133 136 -------
134 137 7: Adding c branch
135 138 -------
136 139 =======
137 140 1: Adding a branch
138 141 -------
139 142 6: Merging b branch head 2 and b branch head 3
140 143 3: Adding b branch head 1
141 144 -------
142 145 7: Adding c branch
143 146 -------
144 147 abort: unknown revision 'z'!
145 148 -------
146 149 =======
147 150 0: Adding root node
148 151 1: Adding a branch
149 152 6: Merging b branch head 2 and b branch head 3
150 153 3: Adding b branch head 1
151 154 7: Adding c branch
@@ -1,40 +1,42 b''
1 1 marked working directory as branch a
2 2 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3 3 marked working directory as branch b
4 created new head
4 5 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
6 created new head
5 7 marked working directory as branch c
6 8 c 5:5ca481e59b8c
7 9 a 1:dd6b440dd85a
8 10 b 4:22df7444f7c1 (inactive)
9 11 default 0:19709c5a4e75 (inactive)
10 12 -------
11 13 c 5:5ca481e59b8c
12 14 a 1:dd6b440dd85a
13 15 --- Branch a
14 16 changeset: 1:dd6b440dd85a
15 17 branch: a
16 18 user: test
17 19 date: Thu Jan 01 00:00:01 1970 +0000
18 20 summary: Adding a branch
19 21
20 22 ---- Branch b
21 23 changeset: 4:22df7444f7c1
22 24 branch: b
23 25 parent: 2:ac22033332d1
24 26 user: test
25 27 date: Thu Jan 01 00:00:04 1970 +0000
26 28 summary: Adding b branch head 2
27 29
28 30 changeset: 3:aee39cd168d0
29 31 branch: b
30 32 user: test
31 33 date: Thu Jan 01 00:00:03 1970 +0000
32 34 summary: Adding b branch head 1
33 35
34 36 changeset: 2:ac22033332d1
35 37 branch: b
36 38 parent: 0:19709c5a4e75
37 39 user: test
38 40 date: Thu Jan 01 00:00:02 1970 +0000
39 41 summary: Adding b branch
40 42
@@ -1,232 +1,233 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 3 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 4 rev offset length base linkrev nodeid p1 p2
4 5 0 0 3 0 0 362fef284ce2 000000000000 000000000000
5 6 1 3 5 1 1 125144f7e028 362fef284ce2 000000000000
6 7 2 8 7 2 2 4c982badb186 125144f7e028 000000000000
7 8 3 15 9 3 3 19b1fc555737 4c982badb186 000000000000
8 9 rev offset length base linkrev nodeid p1 p2
9 10 0 0 75 0 7 905359268f77 000000000000 000000000000
10 11 rev offset length base linkrev nodeid p1 p2
11 12 0 0 75 0 8 905359268f77 000000000000 000000000000
12 13 rev offset length base linkrev nodeid p1 p2
13 14 0 0 8 0 6 12ab3bcc5ea4 000000000000 000000000000
14 15 rev offset length base linkrev nodeid p1 p2
15 16 0 0 48 0 0 43eadb1d2d06 000000000000 000000000000
16 17 1 48 48 1 1 8b89697eba2c 43eadb1d2d06 000000000000
17 18 2 96 48 2 2 626a32663c2f 8b89697eba2c 000000000000
18 19 3 144 48 3 3 f54c32f13478 626a32663c2f 000000000000
19 20 4 192 58 3 6 de68e904d169 626a32663c2f 000000000000
20 21 5 250 68 3 7 3b45cc2ab868 de68e904d169 000000000000
21 22 6 318 54 6 8 24d86153a002 f54c32f13478 000000000000
22 23 checking changesets
23 24 checking manifests
24 25 crosschecking files in changesets and manifests
25 26 checking files
26 27 4 files, 9 changesets, 7 total revisions
27 28 searching for changes
28 29 1 changesets found
29 30 adding changesets
30 31 adding manifests
31 32 adding file changes
32 33 added 1 changesets with 1 changes to 1 files
33 34 (run 'hg update' to get a working copy)
34 35 checking changesets
35 36 checking manifests
36 37 crosschecking files in changesets and manifests
37 38 checking files
38 39 1 files, 1 changesets, 1 total revisions
39 40 0:5649c9d34dd8
40 41 searching for changes
41 42 2 changesets found
42 43 adding changesets
43 44 adding manifests
44 45 adding file changes
45 46 added 2 changesets with 2 changes to 1 files
46 47 (run 'hg update' to get a working copy)
47 48 checking changesets
48 49 checking manifests
49 50 crosschecking files in changesets and manifests
50 51 checking files
51 52 1 files, 2 changesets, 2 total revisions
52 53 1:10b2180f755b
53 54 searching for changes
54 55 3 changesets found
55 56 adding changesets
56 57 adding manifests
57 58 adding file changes
58 59 added 3 changesets with 3 changes to 1 files
59 60 (run 'hg update' to get a working copy)
60 61 checking changesets
61 62 checking manifests
62 63 crosschecking files in changesets and manifests
63 64 checking files
64 65 1 files, 3 changesets, 3 total revisions
65 66 2:d62976ca1e50
66 67 searching for changes
67 68 4 changesets found
68 69 adding changesets
69 70 adding manifests
70 71 adding file changes
71 72 added 4 changesets with 4 changes to 1 files
72 73 (run 'hg update' to get a working copy)
73 74 checking changesets
74 75 checking manifests
75 76 crosschecking files in changesets and manifests
76 77 checking files
77 78 1 files, 4 changesets, 4 total revisions
78 79 3:ac69c658229d
79 80 searching for changes
80 81 2 changesets found
81 82 adding changesets
82 83 adding manifests
83 84 adding file changes
84 85 added 2 changesets with 2 changes to 1 files
85 86 (run 'hg update' to get a working copy)
86 87 checking changesets
87 88 checking manifests
88 89 crosschecking files in changesets and manifests
89 90 checking files
90 91 1 files, 2 changesets, 2 total revisions
91 92 1:5f4f3ceb285e
92 93 searching for changes
93 94 3 changesets found
94 95 adding changesets
95 96 adding manifests
96 97 adding file changes
97 98 added 3 changesets with 3 changes to 1 files
98 99 (run 'hg update' to get a working copy)
99 100 checking changesets
100 101 checking manifests
101 102 crosschecking files in changesets and manifests
102 103 checking files
103 104 1 files, 3 changesets, 3 total revisions
104 105 2:024e4e7df376
105 106 searching for changes
106 107 4 changesets found
107 108 adding changesets
108 109 adding manifests
109 110 adding file changes
110 111 added 4 changesets with 5 changes to 2 files
111 112 (run 'hg update' to get a working copy)
112 113 checking changesets
113 114 checking manifests
114 115 crosschecking files in changesets and manifests
115 116 checking files
116 117 2 files, 4 changesets, 5 total revisions
117 118 3:1e3f6b843bd6
118 119 searching for changes
119 120 5 changesets found
120 121 adding changesets
121 122 adding manifests
122 123 adding file changes
123 124 added 5 changesets with 6 changes to 3 files
124 125 (run 'hg update' to get a working copy)
125 126 checking changesets
126 127 checking manifests
127 128 crosschecking files in changesets and manifests
128 129 checking files
129 130 3 files, 5 changesets, 6 total revisions
130 131 4:80fe151401c2
131 132 searching for changes
132 133 5 changesets found
133 134 adding changesets
134 135 adding manifests
135 136 adding file changes
136 137 added 5 changesets with 5 changes to 2 files
137 138 (run 'hg update' to get a working copy)
138 139 checking changesets
139 140 checking manifests
140 141 crosschecking files in changesets and manifests
141 142 checking files
142 143 2 files, 5 changesets, 5 total revisions
143 144 4:836ac62537ab
144 145 pulling from ../test-7
145 146 searching for changes
146 147 adding changesets
147 148 adding manifests
148 149 adding file changes
149 150 added 4 changesets with 2 changes to 3 files (+1 heads)
150 151 (run 'hg heads' to see heads, 'hg merge' to merge)
151 152 checking changesets
152 153 checking manifests
153 154 crosschecking files in changesets and manifests
154 155 checking files
155 156 4 files, 9 changesets, 7 total revisions
156 157 rolling back last transaction
157 158 % should fail
158 159 abort: --base is incompatible with specifiying a destination
159 160 abort: repository default-push not found!
160 161 2 changesets found
161 162 4 changesets found
162 163 6 changesets found
163 164 1 changesets found
164 165 1 changesets found
165 166 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
166 167 % 2
167 168 2:d62976ca1e50
168 169 adding changesets
169 170 transaction abort!
170 171 rollback completed
171 172 abort: 00changelog.i@ac69c658229d: unknown parent!
172 173 % 2
173 174 2:d62976ca1e50
174 175 adding changesets
175 176 adding manifests
176 177 adding file changes
177 178 added 6 changesets with 4 changes to 4 files (+1 heads)
178 179 (run 'hg heads' to see heads, 'hg merge' to merge)
179 180 % 8
180 181 8:836ac62537ab
181 182 checking changesets
182 183 checking manifests
183 184 crosschecking files in changesets and manifests
184 185 checking files
185 186 4 files, 9 changesets, 7 total revisions
186 187 rolling back last transaction
187 188 % 2
188 189 2:d62976ca1e50
189 190 adding changesets
190 191 adding manifests
191 192 adding file changes
192 193 added 2 changesets with 2 changes to 2 files
193 194 (run 'hg update' to get a working copy)
194 195 % 4
195 196 4:836ac62537ab
196 197 checking changesets
197 198 checking manifests
198 199 crosschecking files in changesets and manifests
199 200 checking files
200 201 2 files, 5 changesets, 5 total revisions
201 202 rolling back last transaction
202 203 adding changesets
203 204 adding manifests
204 205 adding file changes
205 206 added 4 changesets with 3 changes to 3 files (+1 heads)
206 207 (run 'hg heads' to see heads, 'hg merge' to merge)
207 208 % 6
208 209 6:80fe151401c2
209 210 checking changesets
210 211 checking manifests
211 212 crosschecking files in changesets and manifests
212 213 checking files
213 214 3 files, 7 changesets, 6 total revisions
214 215 warning: detected divergent renames of afile to:
215 216 anotherfile
216 217 adifferentfile
217 218 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
218 219 (branch merge, don't forget to commit)
219 220 7 changesets found
220 221 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
221 222 adding changesets
222 223 adding manifests
223 224 adding file changes
224 225 added 7 changesets with 4 changes to 4 files
225 226 (run 'hg update' to get a working copy)
226 227 % 9
227 228 9:607fe5912aad
228 229 checking changesets
229 230 checking manifests
230 231 crosschecking files in changesets and manifests
231 232 checking files
232 233 4 files, 10 changesets, 7 total revisions
@@ -1,306 +1,307 b''
1 1 ====== Setting up test
2 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 created new head
3 4 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
4 5 checking changesets
5 6 checking manifests
6 7 crosschecking files in changesets and manifests
7 8 checking files
8 9 4 files, 9 changesets, 7 total revisions
9 10 ====== Bundle --all
10 11 9 changesets found
11 12 ====== Bundle test to full.hg
12 13 searching for changes
13 14 9 changesets found
14 15 ====== Unbundle full.hg in test
15 16 adding changesets
16 17 adding manifests
17 18 adding file changes
18 19 added 0 changesets with 0 changes to 4 files
19 20 (run 'hg update' to get a working copy)
20 21 ====== Verify empty
21 22 changeset: -1:000000000000
22 23 tag: tip
23 24 user:
24 25 date: Thu Jan 01 00:00:00 1970 +0000
25 26
26 27 checking changesets
27 28 checking manifests
28 29 crosschecking files in changesets and manifests
29 30 checking files
30 31 0 files, 0 changesets, 0 total revisions
31 32 ====== Pull full.hg into test (using --cwd)
32 33 pulling from ../full.hg
33 34 searching for changes
34 35 no changes found
35 36 ====== Pull full.hg into empty (using --cwd)
36 37 pulling from ../full.hg
37 38 requesting all changes
38 39 adding changesets
39 40 adding manifests
40 41 adding file changes
41 42 added 9 changesets with 7 changes to 4 files (+1 heads)
42 43 (run 'hg heads' to see heads, 'hg merge' to merge)
43 44 ====== Rollback empty
44 45 rolling back last transaction
45 46 ====== Pull full.hg into empty again (using --cwd)
46 47 pulling from ../full.hg
47 48 requesting all changes
48 49 adding changesets
49 50 adding manifests
50 51 adding file changes
51 52 added 9 changesets with 7 changes to 4 files (+1 heads)
52 53 (run 'hg heads' to see heads, 'hg merge' to merge)
53 54 ====== Pull full.hg into test (using -R)
54 55 pulling from full.hg
55 56 searching for changes
56 57 no changes found
57 58 ====== Pull full.hg into empty (using -R)
58 59 pulling from full.hg
59 60 searching for changes
60 61 no changes found
61 62 ====== Rollback empty
62 63 rolling back last transaction
63 64 ====== Pull full.hg into empty again (using -R)
64 65 pulling from full.hg
65 66 requesting all changes
66 67 adding changesets
67 68 adding manifests
68 69 adding file changes
69 70 added 9 changesets with 7 changes to 4 files (+1 heads)
70 71 (run 'hg heads' to see heads, 'hg merge' to merge)
71 72 ====== Log -R full.hg in fresh empty
72 73 changeset: 8:836ac62537ab
73 74 tag: tip
74 75 parent: 3:ac69c658229d
75 76 user: test
76 77 date: Mon Jan 12 13:46:40 1970 +0000
77 78 summary: 0.3m
78 79
79 80 changeset: 7:80fe151401c2
80 81 user: test
81 82 date: Mon Jan 12 13:46:40 1970 +0000
82 83 summary: 1.3m
83 84
84 85 changeset: 6:1e3f6b843bd6
85 86 user: test
86 87 date: Mon Jan 12 13:46:40 1970 +0000
87 88 summary: 1.3
88 89
89 90 changeset: 5:024e4e7df376
90 91 user: test
91 92 date: Mon Jan 12 13:46:40 1970 +0000
92 93 summary: 1.2
93 94
94 95 changeset: 4:5f4f3ceb285e
95 96 parent: 0:5649c9d34dd8
96 97 user: test
97 98 date: Mon Jan 12 13:46:40 1970 +0000
98 99 summary: 1.1
99 100
100 101 changeset: 3:ac69c658229d
101 102 user: test
102 103 date: Mon Jan 12 13:46:40 1970 +0000
103 104 summary: 0.3
104 105
105 106 changeset: 2:d62976ca1e50
106 107 user: test
107 108 date: Mon Jan 12 13:46:40 1970 +0000
108 109 summary: 0.2
109 110
110 111 changeset: 1:10b2180f755b
111 112 user: test
112 113 date: Mon Jan 12 13:46:40 1970 +0000
113 114 summary: 0.1
114 115
115 116 changeset: 0:5649c9d34dd8
116 117 user: test
117 118 date: Mon Jan 12 13:46:40 1970 +0000
118 119 summary: 0.0
119 120
120 121 ====== Pull ../full.hg into empty (with hook)
121 122 changegroup hook: HG_NODE=5649c9d34dd87d0ecb5fd39672128376e83b22e1 HG_SOURCE=pull HG_URL=bundle:../full.hg
122 123 pulling from bundle://../full.hg
123 124 requesting all changes
124 125 adding changesets
125 126 adding manifests
126 127 adding file changes
127 128 added 9 changesets with 7 changes to 4 files (+1 heads)
128 129 (run 'hg heads' to see heads, 'hg merge' to merge)
129 130 ====== Rollback empty
130 131 rolling back last transaction
131 132 ====== Log -R bundle:empty+full.hg
132 133 8 7 6 5 4 3 2 1 0
133 134 ====== Pull full.hg into empty again (using -R; with hook)
134 135 changegroup hook: HG_NODE=5649c9d34dd87d0ecb5fd39672128376e83b22e1 HG_SOURCE=pull HG_URL=bundle:empty+full.hg
135 136 pulling from full.hg
136 137 requesting all changes
137 138 adding changesets
138 139 adding manifests
139 140 adding file changes
140 141 added 9 changesets with 7 changes to 4 files (+1 heads)
141 142 (run 'hg heads' to see heads, 'hg merge' to merge)
142 143 ====== Create partial clones
143 144 requesting all changes
144 145 adding changesets
145 146 adding manifests
146 147 adding file changes
147 148 added 4 changesets with 4 changes to 1 files
148 149 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 150 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
150 151 ====== Log -R full.hg in partial
151 152 changeset: 8:836ac62537ab
152 153 tag: tip
153 154 parent: 3:ac69c658229d
154 155 user: test
155 156 date: Mon Jan 12 13:46:40 1970 +0000
156 157 summary: 0.3m
157 158
158 159 changeset: 7:80fe151401c2
159 160 user: test
160 161 date: Mon Jan 12 13:46:40 1970 +0000
161 162 summary: 1.3m
162 163
163 164 changeset: 6:1e3f6b843bd6
164 165 user: test
165 166 date: Mon Jan 12 13:46:40 1970 +0000
166 167 summary: 1.3
167 168
168 169 changeset: 5:024e4e7df376
169 170 user: test
170 171 date: Mon Jan 12 13:46:40 1970 +0000
171 172 summary: 1.2
172 173
173 174 changeset: 4:5f4f3ceb285e
174 175 parent: 0:5649c9d34dd8
175 176 user: test
176 177 date: Mon Jan 12 13:46:40 1970 +0000
177 178 summary: 1.1
178 179
179 180 changeset: 3:ac69c658229d
180 181 user: test
181 182 date: Mon Jan 12 13:46:40 1970 +0000
182 183 summary: 0.3
183 184
184 185 changeset: 2:d62976ca1e50
185 186 user: test
186 187 date: Mon Jan 12 13:46:40 1970 +0000
187 188 summary: 0.2
188 189
189 190 changeset: 1:10b2180f755b
190 191 user: test
191 192 date: Mon Jan 12 13:46:40 1970 +0000
192 193 summary: 0.1
193 194
194 195 changeset: 0:5649c9d34dd8
195 196 user: test
196 197 date: Mon Jan 12 13:46:40 1970 +0000
197 198 summary: 0.0
198 199
199 200 ====== Incoming full.hg in partial
200 201 comparing with bundle://../full.hg
201 202 searching for changes
202 203 changeset: 4:5f4f3ceb285e
203 204 parent: 0:5649c9d34dd8
204 205 user: test
205 206 date: Mon Jan 12 13:46:40 1970 +0000
206 207 summary: 1.1
207 208
208 209 changeset: 5:024e4e7df376
209 210 user: test
210 211 date: Mon Jan 12 13:46:40 1970 +0000
211 212 summary: 1.2
212 213
213 214 changeset: 6:1e3f6b843bd6
214 215 user: test
215 216 date: Mon Jan 12 13:46:40 1970 +0000
216 217 summary: 1.3
217 218
218 219 changeset: 7:80fe151401c2
219 220 user: test
220 221 date: Mon Jan 12 13:46:40 1970 +0000
221 222 summary: 1.3m
222 223
223 224 changeset: 8:836ac62537ab
224 225 tag: tip
225 226 parent: 3:ac69c658229d
226 227 user: test
227 228 date: Mon Jan 12 13:46:40 1970 +0000
228 229 summary: 0.3m
229 230
230 231 ====== Outgoing -R full.hg vs partial2 in partial
231 232 comparing with ../partial2
232 233 searching for changes
233 234 changeset: 4:5f4f3ceb285e
234 235 parent: 0:5649c9d34dd8
235 236 user: test
236 237 date: Mon Jan 12 13:46:40 1970 +0000
237 238 summary: 1.1
238 239
239 240 changeset: 5:024e4e7df376
240 241 user: test
241 242 date: Mon Jan 12 13:46:40 1970 +0000
242 243 summary: 1.2
243 244
244 245 changeset: 6:1e3f6b843bd6
245 246 user: test
246 247 date: Mon Jan 12 13:46:40 1970 +0000
247 248 summary: 1.3
248 249
249 250 changeset: 7:80fe151401c2
250 251 user: test
251 252 date: Mon Jan 12 13:46:40 1970 +0000
252 253 summary: 1.3m
253 254
254 255 changeset: 8:836ac62537ab
255 256 tag: tip
256 257 parent: 3:ac69c658229d
257 258 user: test
258 259 date: Mon Jan 12 13:46:40 1970 +0000
259 260 summary: 0.3m
260 261
261 262 ====== Outgoing -R does-not-exist.hg vs partial2 in partial
262 263 abort: No such file or directory: ../does-not-exist.hg
263 264 ====== Direct clone from bundle (all-history)
264 265 requesting all changes
265 266 adding changesets
266 267 adding manifests
267 268 adding file changes
268 269 added 9 changesets with 7 changes to 4 files (+1 heads)
269 270 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
270 271 changeset: 8:836ac62537ab
271 272 tag: tip
272 273 parent: 3:ac69c658229d
273 274 user: test
274 275 date: Mon Jan 12 13:46:40 1970 +0000
275 276 summary: 0.3m
276 277
277 278 changeset: 7:80fe151401c2
278 279 user: test
279 280 date: Mon Jan 12 13:46:40 1970 +0000
280 281 summary: 1.3m
281 282
282 283 ====== Unbundle incremental bundles into fresh empty in one go
283 284 1 changesets found
284 285 1 changesets found
285 286 adding changesets
286 287 adding manifests
287 288 adding file changes
288 289 added 1 changesets with 1 changes to 1 files
289 290 adding changesets
290 291 adding manifests
291 292 adding file changes
292 293 added 1 changesets with 1 changes to 1 files
293 294 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
294 295 ====== test for 540d1059c802
295 296 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
296 297 searching for changes
297 298 1 changesets found
298 299 comparing with ../bundle.hg
299 300 searching for changes
300 301 changeset: 2:ed1b79f46b9a
301 302 tag: tip
302 303 parent: 0:bbd179dfa0a7
303 304 user: test
304 305 date: Thu Jan 01 00:00:00 1970 +0000
305 306 summary: change foo
306 307
@@ -1,21 +1,22 b''
1 1 % manifest of p2:
2 2 bar
3 3 foo
4 4
5 created new head
5 6 % manifest of p1:
6 7 foo
7 8 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
8 9 (branch merge, don't forget to commit)
9 10 % this should not mention bar:
10 11 changeset: 3:ef2fc9b4a51b
11 12 tag: tip
12 13 parent: 2:ed1b79f46b9a
13 14 parent: 1:d394a8db219b
14 15 user: test
15 16 date: Thu Jan 01 00:00:00 1970 +0000
16 17 description:
17 18 merge
18 19
19 20
20 21 rev offset length base linkrev nodeid p1 p2
21 22 0 0 5 0 1 b004912a8510 000000000000 000000000000
@@ -1,137 +1,138 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 3 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 4 rev offset length base linkrev nodeid p1 p2
4 5 0 0 3 0 0 362fef284ce2 000000000000 000000000000
5 6 1 3 5 1 1 125144f7e028 362fef284ce2 000000000000
6 7 2 8 7 2 2 4c982badb186 125144f7e028 000000000000
7 8 3 15 9 3 3 19b1fc555737 4c982badb186 000000000000
8 9 rev offset length base linkrev nodeid p1 p2
9 10 0 0 75 0 7 905359268f77 000000000000 000000000000
10 11 rev offset length base linkrev nodeid p1 p2
11 12 0 0 75 0 8 905359268f77 000000000000 000000000000
12 13 rev offset length base linkrev nodeid p1 p2
13 14 0 0 8 0 6 12ab3bcc5ea4 000000000000 000000000000
14 15 rev offset length base linkrev nodeid p1 p2
15 16 0 0 48 0 0 43eadb1d2d06 000000000000 000000000000
16 17 1 48 48 1 1 8b89697eba2c 43eadb1d2d06 000000000000
17 18 2 96 48 2 2 626a32663c2f 8b89697eba2c 000000000000
18 19 3 144 48 3 3 f54c32f13478 626a32663c2f 000000000000
19 20 4 192 58 3 6 de68e904d169 626a32663c2f 000000000000
20 21 5 250 68 3 7 3b45cc2ab868 de68e904d169 000000000000
21 22 6 318 54 6 8 24d86153a002 f54c32f13478 000000000000
22 23 checking changesets
23 24 checking manifests
24 25 crosschecking files in changesets and manifests
25 26 checking files
26 27 4 files, 9 changesets, 7 total revisions
27 28 requesting all changes
28 29 adding changesets
29 30 adding manifests
30 31 adding file changes
31 32 added 1 changesets with 1 changes to 1 files
32 33 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
33 34 checking changesets
34 35 checking manifests
35 36 crosschecking files in changesets and manifests
36 37 checking files
37 38 1 files, 1 changesets, 1 total revisions
38 39 requesting all changes
39 40 adding changesets
40 41 adding manifests
41 42 adding file changes
42 43 added 2 changesets with 2 changes to 1 files
43 44 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
44 45 checking changesets
45 46 checking manifests
46 47 crosschecking files in changesets and manifests
47 48 checking files
48 49 1 files, 2 changesets, 2 total revisions
49 50 requesting all changes
50 51 adding changesets
51 52 adding manifests
52 53 adding file changes
53 54 added 3 changesets with 3 changes to 1 files
54 55 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
55 56 checking changesets
56 57 checking manifests
57 58 crosschecking files in changesets and manifests
58 59 checking files
59 60 1 files, 3 changesets, 3 total revisions
60 61 requesting all changes
61 62 adding changesets
62 63 adding manifests
63 64 adding file changes
64 65 added 4 changesets with 4 changes to 1 files
65 66 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
66 67 checking changesets
67 68 checking manifests
68 69 crosschecking files in changesets and manifests
69 70 checking files
70 71 1 files, 4 changesets, 4 total revisions
71 72 requesting all changes
72 73 adding changesets
73 74 adding manifests
74 75 adding file changes
75 76 added 2 changesets with 2 changes to 1 files
76 77 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
77 78 checking changesets
78 79 checking manifests
79 80 crosschecking files in changesets and manifests
80 81 checking files
81 82 1 files, 2 changesets, 2 total revisions
82 83 requesting all changes
83 84 adding changesets
84 85 adding manifests
85 86 adding file changes
86 87 added 3 changesets with 3 changes to 1 files
87 88 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
88 89 checking changesets
89 90 checking manifests
90 91 crosschecking files in changesets and manifests
91 92 checking files
92 93 1 files, 3 changesets, 3 total revisions
93 94 requesting all changes
94 95 adding changesets
95 96 adding manifests
96 97 adding file changes
97 98 added 4 changesets with 5 changes to 2 files
98 99 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
99 100 checking changesets
100 101 checking manifests
101 102 crosschecking files in changesets and manifests
102 103 checking files
103 104 2 files, 4 changesets, 5 total revisions
104 105 requesting all changes
105 106 adding changesets
106 107 adding manifests
107 108 adding file changes
108 109 added 5 changesets with 6 changes to 3 files
109 110 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
110 111 checking changesets
111 112 checking manifests
112 113 crosschecking files in changesets and manifests
113 114 checking files
114 115 3 files, 5 changesets, 6 total revisions
115 116 requesting all changes
116 117 adding changesets
117 118 adding manifests
118 119 adding file changes
119 120 added 5 changesets with 5 changes to 2 files
120 121 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
121 122 checking changesets
122 123 checking manifests
123 124 crosschecking files in changesets and manifests
124 125 checking files
125 126 2 files, 5 changesets, 5 total revisions
126 127 pulling from ../test-7
127 128 searching for changes
128 129 adding changesets
129 130 adding manifests
130 131 adding file changes
131 132 added 4 changesets with 2 changes to 3 files (+1 heads)
132 133 (run 'hg heads' to see heads, 'hg merge' to merge)
133 134 checking changesets
134 135 checking manifests
135 136 crosschecking files in changesets and manifests
136 137 checking files
137 138 4 files, 9 changesets, 7 total revisions
@@ -1,571 +1,573 b''
1 created new head
1 2 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
3 created new head
2 4 # default style is like normal output
3 5 # normal
4 6 # verbose
5 7 # debug
6 8 # revision with no copies (used to print a traceback)
7 9
8 10 # compact style works
9 11 7[tip]:-1 29114dbae42b 1970-01-12 13:46 +0000 user
10 12 second
11 13
12 14 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
13 15 merge
14 16
15 17 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
16 18 new head
17 19
18 20 4 32a18f097fcc 1970-01-17 04:53 +0000 person
19 21 new branch
20 22
21 23 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
22 24 no user, no domain
23 25
24 26 2 97054abb4ab8 1970-01-14 21:20 +0000 other
25 27 no person
26 28
27 29 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
28 30 other 1
29 31
30 32 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
31 33 line 1
32 34
33 35 7[tip]:-1 29114dbae42b 1970-01-12 13:46 +0000 user
34 36 second
35 37
36 38 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
37 39 merge
38 40
39 41 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
40 42 new head
41 43
42 44 4 32a18f097fcc 1970-01-17 04:53 +0000 person
43 45 new branch
44 46
45 47 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
46 48 no user, no domain
47 49
48 50 2 97054abb4ab8 1970-01-14 21:20 +0000 other
49 51 no person
50 52
51 53 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
52 54 other 1
53 55
54 56 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
55 57 line 1
56 58
57 59 7[tip]:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 user
58 60 second
59 61
60 62 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
61 63 merge
62 64
63 65 5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
64 66 new head
65 67
66 68 4:3,-1 32a18f097fcc 1970-01-17 04:53 +0000 person
67 69 new branch
68 70
69 71 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
70 72 no user, no domain
71 73
72 74 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other
73 75 no person
74 76
75 77 1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
76 78 other 1
77 79
78 80 0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
79 81 line 1
80 82
81 83 # error if style not readable
82 84 abort: Permission denied: ./q
83 85 # error if no style
84 86 abort: No such file or directory: notexist
85 87 # error if style missing key
86 88 abort: ./t: no key named 'changeset'
87 89 # error if include fails
88 90 abort: template file ./q: Permission denied
89 91 # include works
90 92 7
91 93 6
92 94 5
93 95 4
94 96 3
95 97 2
96 98 1
97 99 0
98 100 # ui.style works
99 101 7
100 102 6
101 103 5
102 104 4
103 105 3
104 106 2
105 107 1
106 108 0
107 109 # issue338
108 110 1970-01-12 User Name <user@hostname>
109 111
110 112 * second:
111 113 second
112 114 [29114dbae42b] [tip]
113 115
114 116 1970-01-18 person <person>
115 117
116 118 * merge
117 119 [c7b487c6c50e]
118 120
119 121 * d:
120 122 new head
121 123 [13207e5a10d9]
122 124
123 125 1970-01-17 person <person>
124 126
125 127 * new branch
126 128 [32a18f097fcc]
127 129
128 130 1970-01-16 person <person>
129 131
130 132 * c:
131 133 no user, no domain
132 134 [10e46f2dcbf4]
133 135
134 136 1970-01-14 other <other@place>
135 137
136 138 * c:
137 139 no person
138 140 [97054abb4ab8]
139 141
140 142 1970-01-13 A. N. Other <other@place>
141 143
142 144 * b:
143 145 other 1 other 2
144 146
145 147 other 3
146 148 [b608e9d1a3f0]
147 149
148 150 1970-01-12 User Name <user@hostname>
149 151
150 152 * a:
151 153 line 1 line 2
152 154 [1e4e1b8f71e0]
153 155
154 156 # keys work
155 157 author: User Name <user@hostname>
156 158 author: person
157 159 author: person
158 160 author: person
159 161 author: person
160 162 author: other@place
161 163 author: A. N. Other <other@place>
162 164 author: User Name <user@hostname>
163 165 author--verbose: User Name <user@hostname>
164 166 author--verbose: person
165 167 author--verbose: person
166 168 author--verbose: person
167 169 author--verbose: person
168 170 author--verbose: other@place
169 171 author--verbose: A. N. Other <other@place>
170 172 author--verbose: User Name <user@hostname>
171 173 author--debug: User Name <user@hostname>
172 174 author--debug: person
173 175 author--debug: person
174 176 author--debug: person
175 177 author--debug: person
176 178 author--debug: other@place
177 179 author--debug: A. N. Other <other@place>
178 180 author--debug: User Name <user@hostname>
179 181 branches:
180 182 branches:
181 183 branches:
182 184 branches: foo
183 185 branches:
184 186 branches:
185 187 branches:
186 188 branches:
187 189 branches--verbose:
188 190 branches--verbose:
189 191 branches--verbose:
190 192 branches--verbose: foo
191 193 branches--verbose:
192 194 branches--verbose:
193 195 branches--verbose:
194 196 branches--verbose:
195 197 branches--debug:
196 198 branches--debug:
197 199 branches--debug:
198 200 branches--debug: foo
199 201 branches--debug:
200 202 branches--debug:
201 203 branches--debug:
202 204 branches--debug:
203 205 date: 1000000.00
204 206 date: 1500001.00
205 207 date: 1500000.00
206 208 date: 1400000.00
207 209 date: 1300000.00
208 210 date: 1200000.00
209 211 date: 1100000.00
210 212 date: 1000000.00
211 213 date--verbose: 1000000.00
212 214 date--verbose: 1500001.00
213 215 date--verbose: 1500000.00
214 216 date--verbose: 1400000.00
215 217 date--verbose: 1300000.00
216 218 date--verbose: 1200000.00
217 219 date--verbose: 1100000.00
218 220 date--verbose: 1000000.00
219 221 date--debug: 1000000.00
220 222 date--debug: 1500001.00
221 223 date--debug: 1500000.00
222 224 date--debug: 1400000.00
223 225 date--debug: 1300000.00
224 226 date--debug: 1200000.00
225 227 date--debug: 1100000.00
226 228 date--debug: 1000000.00
227 229 desc: second
228 230 desc: merge
229 231 desc: new head
230 232 desc: new branch
231 233 desc: no user, no domain
232 234 desc: no person
233 235 desc: other 1
234 236 other 2
235 237
236 238 other 3
237 239 desc: line 1
238 240 line 2
239 241 desc--verbose: second
240 242 desc--verbose: merge
241 243 desc--verbose: new head
242 244 desc--verbose: new branch
243 245 desc--verbose: no user, no domain
244 246 desc--verbose: no person
245 247 desc--verbose: other 1
246 248 other 2
247 249
248 250 other 3
249 251 desc--verbose: line 1
250 252 line 2
251 253 desc--debug: second
252 254 desc--debug: merge
253 255 desc--debug: new head
254 256 desc--debug: new branch
255 257 desc--debug: no user, no domain
256 258 desc--debug: no person
257 259 desc--debug: other 1
258 260 other 2
259 261
260 262 other 3
261 263 desc--debug: line 1
262 264 line 2
263 265 file_adds: second
264 266 file_adds:
265 267 file_adds: d
266 268 file_adds:
267 269 file_adds:
268 270 file_adds: c
269 271 file_adds: b
270 272 file_adds: a
271 273 file_adds--verbose: second
272 274 file_adds--verbose:
273 275 file_adds--verbose: d
274 276 file_adds--verbose:
275 277 file_adds--verbose:
276 278 file_adds--verbose: c
277 279 file_adds--verbose: b
278 280 file_adds--verbose: a
279 281 file_adds--debug: second
280 282 file_adds--debug:
281 283 file_adds--debug: d
282 284 file_adds--debug:
283 285 file_adds--debug:
284 286 file_adds--debug: c
285 287 file_adds--debug: b
286 288 file_adds--debug: a
287 289 file_dels:
288 290 file_dels:
289 291 file_dels:
290 292 file_dels:
291 293 file_dels:
292 294 file_dels:
293 295 file_dels:
294 296 file_dels:
295 297 file_dels--verbose:
296 298 file_dels--verbose:
297 299 file_dels--verbose:
298 300 file_dels--verbose:
299 301 file_dels--verbose:
300 302 file_dels--verbose:
301 303 file_dels--verbose:
302 304 file_dels--verbose:
303 305 file_dels--debug:
304 306 file_dels--debug:
305 307 file_dels--debug:
306 308 file_dels--debug:
307 309 file_dels--debug:
308 310 file_dels--debug:
309 311 file_dels--debug:
310 312 file_dels--debug:
311 313 file_mods:
312 314 file_mods:
313 315 file_mods:
314 316 file_mods:
315 317 file_mods: c
316 318 file_mods:
317 319 file_mods:
318 320 file_mods:
319 321 file_mods--verbose:
320 322 file_mods--verbose:
321 323 file_mods--verbose:
322 324 file_mods--verbose:
323 325 file_mods--verbose: c
324 326 file_mods--verbose:
325 327 file_mods--verbose:
326 328 file_mods--verbose:
327 329 file_mods--debug:
328 330 file_mods--debug:
329 331 file_mods--debug:
330 332 file_mods--debug:
331 333 file_mods--debug: c
332 334 file_mods--debug:
333 335 file_mods--debug:
334 336 file_mods--debug:
335 337 files: second
336 338 files:
337 339 files: d
338 340 files:
339 341 files: c
340 342 files: c
341 343 files: b
342 344 files: a
343 345 files--verbose: second
344 346 files--verbose:
345 347 files--verbose: d
346 348 files--verbose:
347 349 files--verbose: c
348 350 files--verbose: c
349 351 files--verbose: b
350 352 files--verbose: a
351 353 files--debug: second
352 354 files--debug:
353 355 files--debug: d
354 356 files--debug:
355 357 files--debug: c
356 358 files--debug: c
357 359 files--debug: b
358 360 files--debug: a
359 361 manifest: 7:f2dbc354b94e
360 362 manifest: 6:91015e9dbdd7
361 363 manifest: 5:4dc3def4f9b4
362 364 manifest: 4:90ae8dda64e1
363 365 manifest: 3:cb5a1327723b
364 366 manifest: 2:6e0e82995c35
365 367 manifest: 1:4e8d705b1e53
366 368 manifest: 0:a0c8bcbbb45c
367 369 manifest--verbose: 7:f2dbc354b94e
368 370 manifest--verbose: 6:91015e9dbdd7
369 371 manifest--verbose: 5:4dc3def4f9b4
370 372 manifest--verbose: 4:90ae8dda64e1
371 373 manifest--verbose: 3:cb5a1327723b
372 374 manifest--verbose: 2:6e0e82995c35
373 375 manifest--verbose: 1:4e8d705b1e53
374 376 manifest--verbose: 0:a0c8bcbbb45c
375 377 manifest--debug: 7:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
376 378 manifest--debug: 6:91015e9dbdd76a6791085d12b0a0ec7fcd22ffbf
377 379 manifest--debug: 5:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
378 380 manifest--debug: 4:90ae8dda64e1a876c792bccb9af66284f6018363
379 381 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
380 382 manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
381 383 manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
382 384 manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
383 385 node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
384 386 node: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
385 387 node: 13207e5a10d9fd28ec424934298e176197f2c67f
386 388 node: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
387 389 node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
388 390 node: 97054abb4ab824450e9164180baf491ae0078465
389 391 node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
390 392 node: 1e4e1b8f71e05681d422154f5421e385fec3454f
391 393 node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
392 394 node--verbose: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
393 395 node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
394 396 node--verbose: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
395 397 node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
396 398 node--verbose: 97054abb4ab824450e9164180baf491ae0078465
397 399 node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
398 400 node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
399 401 node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
400 402 node--debug: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
401 403 node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
402 404 node--debug: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
403 405 node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
404 406 node--debug: 97054abb4ab824450e9164180baf491ae0078465
405 407 node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
406 408 node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
407 409 parents: -1:000000000000
408 410 parents: 5:13207e5a10d9 4:32a18f097fcc
409 411 parents: 3:10e46f2dcbf4
410 412 parents:
411 413 parents:
412 414 parents:
413 415 parents:
414 416 parents:
415 417 parents--verbose: -1:000000000000
416 418 parents--verbose: 5:13207e5a10d9 4:32a18f097fcc
417 419 parents--verbose: 3:10e46f2dcbf4
418 420 parents--verbose:
419 421 parents--verbose:
420 422 parents--verbose:
421 423 parents--verbose:
422 424 parents--verbose:
423 425 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
424 426 parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:32a18f097fcccf76ef282f62f8a85b3adf8d13c4
425 427 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
426 428 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
427 429 parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
428 430 parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
429 431 parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
430 432 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
431 433 rev: 7
432 434 rev: 6
433 435 rev: 5
434 436 rev: 4
435 437 rev: 3
436 438 rev: 2
437 439 rev: 1
438 440 rev: 0
439 441 rev--verbose: 7
440 442 rev--verbose: 6
441 443 rev--verbose: 5
442 444 rev--verbose: 4
443 445 rev--verbose: 3
444 446 rev--verbose: 2
445 447 rev--verbose: 1
446 448 rev--verbose: 0
447 449 rev--debug: 7
448 450 rev--debug: 6
449 451 rev--debug: 5
450 452 rev--debug: 4
451 453 rev--debug: 3
452 454 rev--debug: 2
453 455 rev--debug: 1
454 456 rev--debug: 0
455 457 tags: tip
456 458 tags:
457 459 tags:
458 460 tags:
459 461 tags:
460 462 tags:
461 463 tags:
462 464 tags:
463 465 tags--verbose: tip
464 466 tags--verbose:
465 467 tags--verbose:
466 468 tags--verbose:
467 469 tags--verbose:
468 470 tags--verbose:
469 471 tags--verbose:
470 472 tags--verbose:
471 473 tags--debug: tip
472 474 tags--debug:
473 475 tags--debug:
474 476 tags--debug:
475 477 tags--debug:
476 478 tags--debug:
477 479 tags--debug:
478 480 tags--debug:
479 481 # filters work
480 482 hostname
481 483
482 484
483 485
484 486
485 487 place
486 488 place
487 489 hostname
488 490 User Name
489 491 person
490 492 person
491 493 person
492 494 person
493 495 other
494 496 A. N. Other
495 497 User Name
496 498 user
497 499 person
498 500 person
499 501 person
500 502 person
501 503 other
502 504 other
503 505 user
504 506 Mon Jan 12 13:46:40 1970 +0000
505 507 Sun Jan 18 08:40:01 1970 +0000
506 508 Sun Jan 18 08:40:00 1970 +0000
507 509 Sat Jan 17 04:53:20 1970 +0000
508 510 Fri Jan 16 01:06:40 1970 +0000
509 511 Wed Jan 14 21:20:00 1970 +0000
510 512 Tue Jan 13 17:33:20 1970 +0000
511 513 Mon Jan 12 13:46:40 1970 +0000
512 514 1970-01-12 13:46 +0000
513 515 1970-01-18 08:40 +0000
514 516 1970-01-18 08:40 +0000
515 517 1970-01-17 04:53 +0000
516 518 1970-01-16 01:06 +0000
517 519 1970-01-14 21:20 +0000
518 520 1970-01-13 17:33 +0000
519 521 1970-01-12 13:46 +0000
520 522 1970-01-12 13:46:40 +0000
521 523 1970-01-18 08:40:01 +0000
522 524 1970-01-18 08:40:00 +0000
523 525 1970-01-17 04:53:20 +0000
524 526 1970-01-16 01:06:40 +0000
525 527 1970-01-14 21:20:00 +0000
526 528 1970-01-13 17:33:20 +0000
527 529 1970-01-12 13:46:40 +0000
528 530 Mon, 12 Jan 1970 13:46:40 +0000
529 531 Sun, 18 Jan 1970 08:40:01 +0000
530 532 Sun, 18 Jan 1970 08:40:00 +0000
531 533 Sat, 17 Jan 1970 04:53:20 +0000
532 534 Fri, 16 Jan 1970 01:06:40 +0000
533 535 Wed, 14 Jan 1970 21:20:00 +0000
534 536 Tue, 13 Jan 1970 17:33:20 +0000
535 537 Mon, 12 Jan 1970 13:46:40 +0000
536 538 second
537 539 merge
538 540 new head
539 541 new branch
540 542 no user, no domain
541 543 no person
542 544 other 1
543 545 line 1
544 546 29114dbae42b
545 547 c7b487c6c50e
546 548 13207e5a10d9
547 549 32a18f097fcc
548 550 10e46f2dcbf4
549 551 97054abb4ab8
550 552 b608e9d1a3f0
551 553 1e4e1b8f71e0
552 554 <changeset author="User Name &lt;user@hostname&gt;"/>
553 555 <changeset author="person"/>
554 556 <changeset author="person"/>
555 557 <changeset author="person"/>
556 558 <changeset author="person"/>
557 559 <changeset author="other@place"/>
558 560 <changeset author="A. N. Other &lt;other@place&gt;"/>
559 561 <changeset author="User Name &lt;user@hostname&gt;"/>
560 562 # formatnode filter works
561 563 # quiet
562 564 1e4e1b8f71e0
563 565 # normal
564 566 1e4e1b8f71e0
565 567 # verbose
566 568 1e4e1b8f71e0
567 569 # debug
568 570 1e4e1b8f71e05681d422154f5421e385fec3454f
569 571 # error on syntax
570 572 abort: t:3: unmatched quotes
571 573 # done
@@ -1,16 +1,17 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 3 merging a
3 4 warning: conflicts during merge.
4 5 merging a failed!
5 6 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
6 7 There are unresolved merges, you can redo the full merge using:
7 8 hg update -C 2
8 9 hg merge 1
9 10 e7fe8eb3e180+0d24b7662d3e+ tip
10 11 <<<<<<< local
11 12 something else
12 13 =======
13 14 something
14 15 >>>>>>> other
15 16 M a
16 17 ? a.orig
@@ -1,28 +1,29 b''
1 1 %%% should show a removed and b added
2 2 A b
3 3 R a
4 4 reverting...
5 5 undeleting a
6 6 forgetting b
7 7 %%% should show b unknown and a back to normal
8 8 ? b
9 9 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
10 10 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
11 created new head
11 12 merging a
12 13 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
13 14 (branch merge, don't forget to commit)
14 15 %%% should show foo-b
15 16 foo-b
16 17 %%% should show a removed and b added
17 18 A b
18 19 R a
19 20 %%% revert should fail
20 21 abort: uncommitted merge - please provide a specific revision
21 22 %%% revert should be ok now
22 23 undeleting a
23 24 forgetting b
24 25 %%% should show b unknown and a marked modified (merged)
25 26 M a
26 27 ? b
27 28 %%% should show foo-b
28 29 foo-b
@@ -1,40 +1,41 b''
1 1 adding a
2 2 marked working directory as branch brancha
3 3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 4 marked working directory as branch branchb
5 5 adding b
6 created new head
6 7 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
7 8 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
8 9 % convert with datesort
9 10 initializing destination t2 repository
10 11 scanning source...
11 12 sorting...
12 13 converting...
13 14 8 a0
14 15 7 a1
15 16 6 a2
16 17 5 a3
17 18 4 b0
18 19 3 a4
19 20 2 a5
20 21 1 a6
21 22 0 b1
22 23 % graph converted repo
23 24 o 8 "b1"
24 25 |
25 26 | o 7 "a6"
26 27 | |
27 28 | o 6 "a5"
28 29 | |
29 30 | o 5 "a4"
30 31 | |
31 32 o | 4 "b0"
32 33 | |
33 34 | o 3 "a3"
34 35 | |
35 36 | o 2 "a2"
36 37 | |
37 38 | o 1 "a1"
38 39 |/
39 40 o 0 "a0"
40 41
@@ -1,154 +1,156 b''
1 created new head
2 created new head
1 3 @ 8 "8: change foo" files: foo
2 4 |
3 5 o 7 "7: second merge; change bar" files: bar baz
4 6 |\
5 7 | o 6 "6: change foo baz" files: baz foo
6 8 | |
7 9 o | 5 "5: change bar baz quux" files: bar baz quux
8 10 |/
9 11 o 4 "4: first merge; change bar baz" files: bar baz
10 12 |\
11 13 | o 3 "3: change bar quux" files: bar quux
12 14 | |
13 15 o | 2 "2: change foo" files: foo
14 16 |/
15 17 o 1 "1: add bar quux; copy foo to copied" files: bar copied quux
16 18 |
17 19 o 0 "0: add foo baz dir/" files: baz dir/file dir/file2 foo
18 20
19 21 % final file versions in this repo:
20 22 9463f52fe115e377cf2878d4fc548117211063f2 644 bar
21 23 94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644 baz
22 24 6ca237634e1f6bee1b6db94292fb44f092a25842 644 copied
23 25 3e20847584beff41d7cd16136b7331ab3d754be0 644 dir/file
24 26 75e6d3f8328f5f6ace6bf10b98df793416a09dca 644 dir/file2
25 27 9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo
26 28 bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644 quux
27 29 copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
28 30
29 31 % foo: skip unwanted merges; use 1st parent in 1st merge, 2nd in 2nd
30 32 o 3 "8: change foo" files: foo
31 33 |
32 34 o 2 "6: change foo baz" files: foo
33 35 |
34 36 o 1 "2: change foo" files: foo
35 37 |
36 38 o 0 "0: add foo baz dir/" files: foo
37 39
38 40 9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo
39 41 % bar: merges are not merges anymore
40 42 o 4 "7: second merge; change bar" files: bar
41 43 |
42 44 o 3 "5: change bar baz quux" files: bar
43 45 |
44 46 o 2 "4: first merge; change bar baz" files: bar
45 47 |
46 48 o 1 "3: change bar quux" files: bar
47 49 |
48 50 o 0 "1: add bar quux; copy foo to copied" files: bar
49 51
50 52 9463f52fe115e377cf2878d4fc548117211063f2 644 bar
51 53 % baz: 1st merge is not a merge anymore; 2nd still is
52 54 o 4 "7: second merge; change bar" files: baz
53 55 |\
54 56 | o 3 "6: change foo baz" files: baz
55 57 | |
56 58 o | 2 "5: change bar baz quux" files: baz
57 59 |/
58 60 o 1 "4: first merge; change bar baz" files: baz
59 61 |
60 62 o 0 "0: add foo baz dir/" files: baz
61 63
62 64 94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644 baz
63 65 % foo quux: we add additional merges when they are interesting
64 66 o 8 "8: change foo" files: foo
65 67 |
66 68 o 7 "7: second merge; change bar" files:
67 69 |\
68 70 | o 6 "6: change foo baz" files: foo
69 71 | |
70 72 o | 5 "5: change bar baz quux" files: quux
71 73 |/
72 74 o 4 "4: first merge; change bar baz" files:
73 75 |\
74 76 | o 3 "3: change bar quux" files: quux
75 77 | |
76 78 o | 2 "2: change foo" files: foo
77 79 |/
78 80 o 1 "1: add bar quux; copy foo to copied" files: quux
79 81 |
80 82 o 0 "0: add foo baz dir/" files: foo
81 83
82 84 9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo
83 85 bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644 quux
84 86 % bar quux: partial conversion
85 87 o 1 "3: change bar quux" files: bar quux
86 88 |
87 89 o 0 "1: add bar quux; copy foo to copied" files: bar quux
88 90
89 91 b79105bedc55102f394e90a789c9c380117c1b4a 644 bar
90 92 db0421cc6b685a458c8d86c7d5c004f94429ea23 644 quux
91 93 % bar quux: complete the partial conversion
92 94 o 4 "7: second merge; change bar" files: bar
93 95 |
94 96 o 3 "5: change bar baz quux" files: bar quux
95 97 |
96 98 o 2 "4: first merge; change bar baz" files: bar
97 99 |
98 100 o 1 "3: change bar quux" files: bar quux
99 101 |
100 102 o 0 "1: add bar quux; copy foo to copied" files: bar quux
101 103
102 104 9463f52fe115e377cf2878d4fc548117211063f2 644 bar
103 105 bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644 quux
104 106 % foo: partial conversion
105 107 o 0 "0: add foo baz dir/" files: foo
106 108
107 109 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 foo
108 110 % foo: complete the partial conversion
109 111 o 3 "8: change foo" files: foo
110 112 |
111 113 o 2 "6: change foo baz" files: foo
112 114 |
113 115 o 1 "2: change foo" files: foo
114 116 |
115 117 o 0 "0: add foo baz dir/" files: foo
116 118
117 119 9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo
118 120 % copied: copied file; source not included in new repo
119 121 o 0 "1: add bar quux; copy foo to copied" files: copied
120 122
121 123 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 copied
122 124 copied not renamed
123 125 % foo copied: copied file; source included in new repo
124 126 o 4 "8: change foo" files: foo
125 127 |
126 128 o 3 "6: change foo baz" files: foo
127 129 |
128 130 o 2 "2: change foo" files: foo
129 131 |
130 132 o 1 "1: add bar quux; copy foo to copied" files: copied
131 133 |
132 134 o 0 "0: add foo baz dir/" files: foo
133 135
134 136 6ca237634e1f6bee1b6db94292fb44f092a25842 644 copied
135 137 9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo
136 138 copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
137 139 o 4 "8: change foo" files: foo2
138 140 |
139 141 o 3 "6: change foo baz" files: foo2
140 142 |
141 143 o 2 "2: change foo" files: foo2
142 144 |
143 145 o 1 "1: add bar quux; copy foo to copied" files: copied2
144 146 |
145 147 o 0 "0: add foo baz dir/" files: dir2/file foo2
146 148
147 149 e5e3d520be9be45937d0b06b004fadcd6c221fa2 644 copied2
148 150 3e20847584beff41d7cd16136b7331ab3d754be0 644 dir2/file
149 151 9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo2
150 152 copied2 renamed from foo2:2ed2a3912a0b24502043eae84ee4b279c18b90dd
151 153 copied:
152 154 foo
153 155 copied2:
154 156 foo
@@ -1,20 +1,22 b''
1 created new head
1 2 merging baz and foo
2 3 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
3 4 (branch merge, don't forget to commit)
4 5 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
5 6 merging foo and baz
6 7 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
7 8 (branch merge, don't forget to commit)
9 created new head
8 10 initializing destination new repository
9 11 scanning source...
10 12 sorting...
11 13 converting...
12 14 5 add foo bar
13 15 4 change foo
14 16 3 make bar and baz copies of foo
15 17 2 merge local copy
16 18 1 merge remote copy
17 19 0 mark baz executable
18 20 comparing with ../orig
19 21 searching for changes
20 22 no changes found
@@ -1,338 +1,339 b''
1 1 % add
2 2 adding a
3 3 adding d1/d2/b
4 4 % modify
5 5 1:e0e2b8a9156b
6 6 assuming destination a-hg
7 7 initializing svn repo 'a-hg'
8 8 initializing svn wc 'a-hg-wc'
9 9 scanning source...
10 10 sorting...
11 11 converting...
12 12 1 add a file
13 13 0 modify a file
14 14 At revision 2.
15 15 2 2 test .
16 16 2 2 test a
17 17 2 1 test d1
18 18 2 1 test d1/d2
19 19 2 1 test d1/d2/b
20 20 <?xml version="1.0"?>
21 21 <log>
22 22 <logentry
23 23 revision="2">
24 24 <author>test</author>
25 25 <date/>
26 26 <paths>
27 27 <path
28 28 action="M">/a</path>
29 29 </paths>
30 30 <msg>modify a file</msg>
31 31 </logentry>
32 32 <logentry
33 33 revision="1">
34 34 <author>test</author>
35 35 <date/>
36 36 <paths>
37 37 <path
38 38 action="A">/a</path>
39 39 <path
40 40 action="A">/d1</path>
41 41 <path
42 42 action="A">/d1/d2</path>
43 43 <path
44 44 action="A">/d1/d2/b</path>
45 45 </paths>
46 46 <msg>add a file</msg>
47 47 </logentry>
48 48 </log>
49 49 a:
50 50 a
51 51 d1
52 52
53 53 a-hg-wc:
54 54 a
55 55 d1
56 56 same
57 57 % rename
58 58 2:7009fc4efb34
59 59 assuming destination a-hg
60 60 initializing svn wc 'a-hg-wc'
61 61 scanning source...
62 62 sorting...
63 63 converting...
64 64 0 rename a file
65 65 At revision 3.
66 66 3 3 test .
67 67 3 3 test b
68 68 3 1 test d1
69 69 3 1 test d1/d2
70 70 3 1 test d1/d2/b
71 71 <?xml version="1.0"?>
72 72 <log>
73 73 <logentry
74 74 revision="3">
75 75 <author>test</author>
76 76 <date/>
77 77 <paths>
78 78 <path
79 79 action="D">/a</path>
80 80 <path
81 81 copyfrom-path="/a"
82 82 copyfrom-rev="2"
83 83 action="A">/b</path>
84 84 </paths>
85 85 <msg>rename a file</msg>
86 86 </logentry>
87 87 </log>
88 88 a:
89 89 b
90 90 d1
91 91
92 92 a-hg-wc:
93 93 b
94 94 d1
95 95 % copy
96 96 3:56c519973ce6
97 97 assuming destination a-hg
98 98 initializing svn wc 'a-hg-wc'
99 99 scanning source...
100 100 sorting...
101 101 converting...
102 102 0 copy a file
103 103 At revision 4.
104 104 4 4 test .
105 105 4 3 test b
106 106 4 4 test c
107 107 4 1 test d1
108 108 4 1 test d1/d2
109 109 4 1 test d1/d2/b
110 110 <?xml version="1.0"?>
111 111 <log>
112 112 <logentry
113 113 revision="4">
114 114 <author>test</author>
115 115 <date/>
116 116 <paths>
117 117 <path
118 118 copyfrom-path="/b"
119 119 copyfrom-rev="3"
120 120 action="A">/c</path>
121 121 </paths>
122 122 <msg>copy a file</msg>
123 123 </logentry>
124 124 </log>
125 125 a:
126 126 b
127 127 c
128 128 d1
129 129
130 130 a-hg-wc:
131 131 b
132 132 c
133 133 d1
134 134 % remove
135 135 4:ed4dc9a6f585
136 136 assuming destination a-hg
137 137 initializing svn wc 'a-hg-wc'
138 138 scanning source...
139 139 sorting...
140 140 converting...
141 141 0 remove a file
142 142 At revision 5.
143 143 5 5 test .
144 144 5 4 test c
145 145 5 1 test d1
146 146 5 1 test d1/d2
147 147 5 1 test d1/d2/b
148 148 <?xml version="1.0"?>
149 149 <log>
150 150 <logentry
151 151 revision="5">
152 152 <author>test</author>
153 153 <date/>
154 154 <paths>
155 155 <path
156 156 action="D">/b</path>
157 157 </paths>
158 158 <msg>remove a file</msg>
159 159 </logentry>
160 160 </log>
161 161 a:
162 162 c
163 163 d1
164 164
165 165 a-hg-wc:
166 166 c
167 167 d1
168 168 % executable
169 169 5:f205b3636d77
170 170 assuming destination a-hg
171 171 initializing svn wc 'a-hg-wc'
172 172 scanning source...
173 173 sorting...
174 174 converting...
175 175 0 make a file executable
176 176 At revision 6.
177 177 6 6 test .
178 178 6 6 test c
179 179 6 1 test d1
180 180 6 1 test d1/d2
181 181 6 1 test d1/d2/b
182 182 <?xml version="1.0"?>
183 183 <log>
184 184 <logentry
185 185 revision="6">
186 186 <author>test</author>
187 187 <date/>
188 188 <paths>
189 189 <path
190 190 action="M">/c</path>
191 191 </paths>
192 192 <msg>make a file executable</msg>
193 193 </logentry>
194 194 </log>
195 195 executable
196 196 % executable in new directory
197 197 adding d1/a
198 198 assuming destination a-hg
199 199 initializing svn repo 'a-hg'
200 200 initializing svn wc 'a-hg-wc'
201 201 scanning source...
202 202 sorting...
203 203 converting...
204 204 0 add executable file in new directory
205 205 At revision 1.
206 206 1 1 test .
207 207 1 1 test d1
208 208 1 1 test d1/a
209 209 <?xml version="1.0"?>
210 210 <log>
211 211 <logentry
212 212 revision="1">
213 213 <author>test</author>
214 214 <date/>
215 215 <paths>
216 216 <path
217 217 action="A">/d1</path>
218 218 <path
219 219 action="A">/d1/a</path>
220 220 </paths>
221 221 <msg>add executable file in new directory</msg>
222 222 </logentry>
223 223 </log>
224 224 executable
225 225 % copy to new directory
226 226 assuming destination a-hg
227 227 initializing svn wc 'a-hg-wc'
228 228 scanning source...
229 229 sorting...
230 230 converting...
231 231 0 copy file to new directory
232 232 At revision 2.
233 233 2 2 test .
234 234 2 1 test d1
235 235 2 1 test d1/a
236 236 2 2 test d2
237 237 2 2 test d2/a
238 238 <?xml version="1.0"?>
239 239 <log>
240 240 <logentry
241 241 revision="2">
242 242 <author>test</author>
243 243 <date/>
244 244 <paths>
245 245 <path
246 246 action="A">/d2</path>
247 247 <path
248 248 copyfrom-path="/d1/a"
249 249 copyfrom-rev="1"
250 250 action="A">/d2/a</path>
251 251 </paths>
252 252 <msg>copy file to new directory</msg>
253 253 </logentry>
254 254 </log>
255 255 % branchy history
256 256 adding b
257 257 adding left-1
258 258 adding left-2
259 259 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
260 260 adding right-1
261 created new head
261 262 adding right-2
262 263 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
263 264 merging b
264 265 warning: conflicts during merge.
265 266 merging b failed!
266 267 2 files updated, 0 files merged, 0 files removed, 1 files unresolved
267 268 There are unresolved merges, you can redo the full merge using:
268 269 hg update -C 2
269 270 hg merge 4
270 271 assuming destination b-hg
271 272 initializing svn repo 'b-hg'
272 273 initializing svn wc 'b-hg-wc'
273 274 scanning source...
274 275 sorting...
275 276 converting...
276 277 5 base
277 278 4 left-1
278 279 3 left-2
279 280 2 right-1
280 281 1 right-2
281 282 0 merge
282 283 % expect 4 changes
283 284 At revision 4.
284 285 4 4 test .
285 286 4 3 test b
286 287 4 2 test left-1
287 288 4 3 test left-2
288 289 4 4 test right-1
289 290 4 4 test right-2
290 291 <?xml version="1.0"?>
291 292 <log>
292 293 <logentry
293 294 revision="4">
294 295 <author>test</author>
295 296 <date/>
296 297 <paths>
297 298 <path
298 299 action="A">/right-1</path>
299 300 <path
300 301 action="A">/right-2</path>
301 302 </paths>
302 303 <msg>merge</msg>
303 304 </logentry>
304 305 <logentry
305 306 revision="3">
306 307 <author>test</author>
307 308 <date/>
308 309 <paths>
309 310 <path
310 311 action="M">/b</path>
311 312 <path
312 313 action="A">/left-2</path>
313 314 </paths>
314 315 <msg>left-2</msg>
315 316 </logentry>
316 317 <logentry
317 318 revision="2">
318 319 <author>test</author>
319 320 <date/>
320 321 <paths>
321 322 <path
322 323 action="M">/b</path>
323 324 <path
324 325 action="A">/left-1</path>
325 326 </paths>
326 327 <msg>left-1</msg>
327 328 </logentry>
328 329 <logentry
329 330 revision="1">
330 331 <author>test</author>
331 332 <date/>
332 333 <paths>
333 334 <path
334 335 action="A">/b</path>
335 336 </paths>
336 337 <msg>base</msg>
337 338 </logentry>
338 339 </log>
@@ -1,7 +1,8 b''
1 created new head
1 2 digraph G {
2 3 -1 -> 0
3 4 0 -> 1
4 5 0 -> 2
5 6 2 -> 3
6 7 1 -> 3
7 8 }
@@ -1,30 +1,31 b''
1 created new head
1 2 resolving manifests
2 3 overwrite None partial False
3 4 ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9
4 5 searching for copies back to rev 1
5 6 unmatched files in other:
6 7 bar
7 8 all copies found (* = to merge, ! = divergent):
8 9 bar -> foo *
9 10 checking for directory renames
10 11 foo: versions differ -> m
11 12 foo: remote copied to bar -> m
12 13 copying foo to bar
13 14 picked tool 'internal:merge' for foo (binary False symlink False)
14 15 merging foo and bar
15 16 my foo@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da
16 17 premerge successful
17 18 picked tool 'internal:merge' for foo (binary False symlink False)
18 19 merging foo
19 20 my foo@2092631ce82b+ other foo@7731dad1c2b9 ancestor foo@310fd17130da
20 21 premerge successful
21 22 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
22 23 (branch merge, don't forget to commit)
23 24 -- foo --
24 25 line 0
25 26 line 1
26 27 line 2-1
27 28 -- bar --
28 29 line 0
29 30 line 1
30 31 line 2-2
@@ -1,19 +1,20 b''
1 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2 created new head
2 3 changeset: 2:62ec0e86d1e5
3 4 tag: tip
4 5 parent: 0:567dde5e6e98
5 6 user: test
6 7 date: Mon Jan 12 13:46:40 1970 +0000
7 8 summary: add empty3
8 9
9 10 changeset: 1:41ab7b321727
10 11 user: test
11 12 date: Mon Jan 12 13:46:40 1970 +0000
12 13 summary: add empty2
13 14
14 15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
15 16 (branch merge, don't forget to commit)
16 17 M empty2
17 18 b80de5d138758541c5f05265ad144ab9fa86d1db 644 empty1
18 19 b80de5d138758541c5f05265ad144ab9fa86d1db 644 empty2
19 20 b80de5d138758541c5f05265ad144ab9fa86d1db 644 empty3
@@ -1,76 +1,78 b''
1 1 adding init
2 2 adding x
3 3 adding y
4 4 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
5 5 adding x
6 6 adding y
7 created new head
7 8 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
8 9 (branch merge, don't forget to commit)
9 10 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
10 11 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
11 12 (branch merge, don't forget to commit)
13 created new head
12 14 requesting all changes
13 15 adding changesets
14 16 adding manifests
15 17 adding file changes
16 18 added 4 changesets with 3 changes to 3 files
17 19 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
18 20 requesting all changes
19 21 adding changesets
20 22 adding manifests
21 23 adding file changes
22 24 added 4 changesets with 3 changes to 3 files
23 25 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
24 26 comparing with b
25 27 searching for changes
26 28 changeset: 4:fdb3c546e859
27 29 tag: tip
28 30 parent: 1:1f703b3fcbc6
29 31 parent: 2:de997049e034
30 32 user: test
31 33 date: Mon Jan 12 13:46:40 1970 +0000
32 34 summary: m2
33 35
34 36 comparing with c
35 37 searching for changes
36 38 changeset: 3:f40f830c0024
37 39 parent: 2:de997049e034
38 40 parent: 1:1f703b3fcbc6
39 41 user: test
40 42 date: Mon Jan 12 13:46:40 1970 +0000
41 43 summary: m1
42 44
43 45 comparing with c
44 46 searching for changes
45 47 changeset: 3:f40f830c0024
46 48 tag: tip
47 49 parent: 2:de997049e034
48 50 parent: 1:1f703b3fcbc6
49 51 user: test
50 52 date: Mon Jan 12 13:46:40 1970 +0000
51 53 summary: m1
52 54
53 55 comparing with b
54 56 searching for changes
55 57 changeset: 3:fdb3c546e859
56 58 tag: tip
57 59 parent: 1:1f703b3fcbc6
58 60 parent: 2:de997049e034
59 61 user: test
60 62 date: Mon Jan 12 13:46:40 1970 +0000
61 63 summary: m2
62 64
63 65 pulling from a
64 66 searching for changes
65 67 adding changesets
66 68 adding manifests
67 69 adding file changes
68 70 added 1 changesets with 0 changes to 0 files (+1 heads)
69 71 (run 'hg heads' to see heads, 'hg merge' to merge)
70 72 pulling from a
71 73 searching for changes
72 74 adding changesets
73 75 adding manifests
74 76 adding file changes
75 77 added 1 changesets with 0 changes to 0 files (+1 heads)
76 78 (run 'hg heads' to see heads, 'hg merge' to merge)
@@ -1,65 +1,67 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 4 (branch merge, don't forget to commit)
4 5 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 6 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
6 7 (branch merge, don't forget to commit)
8 created new head
7 9 changeset: 4:f6c172c6198c
8 10 tag: tip
9 11 parent: 1:448a8c5e42f1
10 12 parent: 2:7c5dc2e857f2
11 13 user: test
12 14 date: Mon Jan 12 13:46:40 1970 +0000
13 15 summary: merge a/b -> blah
14 16
15 17 changeset: 3:13d875a22764
16 18 parent: 2:7c5dc2e857f2
17 19 parent: 1:448a8c5e42f1
18 20 user: test
19 21 date: Mon Jan 12 13:46:40 1970 +0000
20 22 summary: merge b/a -> blah
21 23
22 24 changeset: 2:7c5dc2e857f2
23 25 parent: 0:dc1751ec2e9d
24 26 user: test
25 27 date: Mon Jan 12 13:46:40 1970 +0000
26 28 summary: branch b
27 29
28 30 changeset: 1:448a8c5e42f1
29 31 user: test
30 32 date: Mon Jan 12 13:46:40 1970 +0000
31 33 summary: branch a
32 34
33 35 changeset: 0:dc1751ec2e9d
34 36 user: test
35 37 date: Mon Jan 12 13:46:40 1970 +0000
36 38 summary: test
37 39
38 40 rev offset length base linkrev nodeid p1 p2
39 41 0 0 64 0 0 dc1751ec2e9d 000000000000 000000000000
40 42 1 64 68 1 1 448a8c5e42f1 dc1751ec2e9d 000000000000
41 43 2 132 68 2 2 7c5dc2e857f2 dc1751ec2e9d 000000000000
42 44 3 200 75 3 3 13d875a22764 7c5dc2e857f2 448a8c5e42f1
43 45 4 275 29 3 4 f6c172c6198c 448a8c5e42f1 7c5dc2e857f2
44 46
45 47 1
46 48 79d7492df40aa0fa093ec4209be78043c181f094 644 a
47 49 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 b
48 50 2
49 51 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 a
50 52 79d7492df40aa0fa093ec4209be78043c181f094 644 b
51 53 3
52 54 79d7492df40aa0fa093ec4209be78043c181f094 644 a
53 55 79d7492df40aa0fa093ec4209be78043c181f094 644 b
54 56 4
55 57 79d7492df40aa0fa093ec4209be78043c181f094 644 a
56 58 79d7492df40aa0fa093ec4209be78043c181f094 644 b
57 59
58 60 rev offset length base linkrev nodeid p1 p2
59 61 0 0 5 0 0 2ed2a3912a0b 000000000000 000000000000
60 62 1 5 6 1 1 79d7492df40a 2ed2a3912a0b 000000000000
61 63 checking changesets
62 64 checking manifests
63 65 crosschecking files in changesets and manifests
64 66 checking files
65 67 2 files, 5 changesets, 4 total revisions
@@ -1,33 +1,34 b''
1 1 adding a
2 2 adding b
3 3 Only in a: a
4 4 Only in a: b
5 5 diffing a.000000000000 a
6 6 hg falabala [OPTION]... [FILE]...
7 7
8 8 use 'echo' to diff repository (or selected files)
9 9
10 10 Show differences between revisions for the specified
11 11 files, using the 'echo' program.
12 12
13 13 When two revision arguments are given, then changes are
14 14 shown between those revisions. If only one revision is
15 15 specified then that revision is compared to the working
16 16 directory, and, when no revisions are specified, the
17 17 working directory files are compared to its parent.
18 18
19 19 options:
20 20
21 21 -o --option pass option to comparison program
22 22 -r --rev revision
23 23 -I --include include names matching the given patterns
24 24 -X --exclude exclude names matching the given patterns
25 25
26 26 use "hg -v help falabala" to show global options
27 27 diffing a.8a5febb7f867/a a.34eed99112ab/a
28 28 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
29 created new head
29 30 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
30 31 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
31 32 (branch merge, don't forget to commit)
32 33 diff-like tools yield a non-zero exit code
33 34 diffing a.34eed99112ab/c [tmp]/test-extdiff/a/c
@@ -1,323 +1,328 b''
1 1 % init
2 2 % empty repo
3 3 % building tree
4 created new head
5 created new head
6 created new head
7 created new head
8 created new head
4 9 % glog -q
5 10 @ 34:0eed7cd895e0
6 11 |
7 12 | o 33:2e9d1b521374
8 13 | |
9 14 o | 32:77f7d8438a3c
10 15 |\ \
11 16 | o \ 31:82ee55204a79
12 17 | |\ \
13 18 | | o \ 30:777dfc428649
14 19 | | |\ \
15 20 | | | o | 29:f8e7fee63353
16 21 | | | | |
17 22 | | o | | 28:4b6e9bd48cf9
18 23 | | |\ \ \
19 24 o | | | | | 27:e9e08174cd30
20 25 |/ / / / /
21 26 | | o---+ 26:720dc079a855
22 27 | | | | |
23 28 +---o | | 25:9d4ed048d013
24 29 | | | | |
25 30 | | o | | 24:4a68967db00d
26 31 | | |\| |
27 32 | | o | | 23:bc31393cabdf
28 33 | |/| | |
29 34 +---o---+ 22:a37f2ea6ebc6
30 35 | | / /
31 36 o | | | 21:e758e8f4ace9
32 37 |\ \ \ \
33 38 | o---+-+ 20:aeccadad74b4
34 39 | / / /
35 40 o | | | 19:138069b5dad7
36 41 |\ \ \ \
37 42 +---+---o 18:5a8c9a29ef81
38 43 | | | |
39 44 | o | | 17:43e52b935494
40 45 | |\ \ \
41 46 | | o---+ 16:449a2f9562a4
42 47 | | |/ /
43 48 o | | | 15:c0b4283d4c1d
44 49 |\ \ \ \
45 50 | o-----+ 14:9d533950abf0
46 51 | |/ / /
47 52 o | | | 13:c39d0a2b8165
48 53 |\ \ \ \
49 54 +---o | | 12:74dc7aea4494
50 55 | | |/ /
51 56 | o | | 11:c3c395dd8b98
52 57 | |\ \ \
53 58 | | o---+ 10:8094c50149ef
54 59 | |/ / /
55 60 o | | | 9:79ab1812f961
56 61 |\ \ \ \
57 62 | o-----+ 8:d7aa38594334
58 63 |/ / / /
59 64 o | | | 7:699392d1259e
60 65 |\ \ \ \
61 66 +---o | | 6:0ca7c061cf45
62 67 | |/ / /
63 68 | o | | 5:3589c3c477ab
64 69 | |\ \ \
65 70 | | o | | 4:e2cad8233c77
66 71 | |/|/ /
67 72 | o / / 3:02173ffbf857
68 73 |/ / /
69 74 o / / 2:e8ea2256f9ec
70 75 |/ /
71 76 o / 1:3cae7826a707
72 77 |/
73 78 o 0:7aa22e58e8c1
74 79
75 80 % glog
76 81 @ changeset: 34:0eed7cd895e0
77 82 | tag: tip
78 83 | parent: 32:77f7d8438a3c
79 84 | user: test
80 85 | date: Thu Jan 01 00:00:34 1970 +0000
81 86 | summary: (34) head
82 87 |
83 88 | o changeset: 33:2e9d1b521374
84 89 | | parent: 18:5a8c9a29ef81
85 90 | | user: test
86 91 | | date: Thu Jan 01 00:00:33 1970 +0000
87 92 | | summary: (33) head
88 93 | |
89 94 o | changeset: 32:77f7d8438a3c
90 95 |\ \ parent: 27:e9e08174cd30
91 96 | | | parent: 31:82ee55204a79
92 97 | | | user: test
93 98 | | | date: Thu Jan 01 00:00:32 1970 +0000
94 99 | | | summary: (32) expand
95 100 | | |
96 101 | o | changeset: 31:82ee55204a79
97 102 | |\ \ parent: 21:e758e8f4ace9
98 103 | | | | parent: 30:777dfc428649
99 104 | | | | user: test
100 105 | | | | date: Thu Jan 01 00:00:31 1970 +0000
101 106 | | | | summary: (31) expand
102 107 | | | |
103 108 | | o | changeset: 30:777dfc428649
104 109 | | |\ \ parent: 28:4b6e9bd48cf9
105 110 | | | | | parent: 29:f8e7fee63353
106 111 | | | | | user: test
107 112 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
108 113 | | | | | summary: (30) expand
109 114 | | | | |
110 115 | | | o | changeset: 29:f8e7fee63353
111 116 | | | | | parent: 0:7aa22e58e8c1
112 117 | | | | | user: test
113 118 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
114 119 | | | | | summary: (29) regular commit
115 120 | | | | |
116 121 | | o | | changeset: 28:4b6e9bd48cf9
117 122 | | |\ \ \ parent: 1:3cae7826a707
118 123 | | | | | | parent: 26:720dc079a855
119 124 | | | | | | user: test
120 125 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
121 126 | | | | | | summary: (28) merge zero known
122 127 | | | | | |
123 128 o | | | | | changeset: 27:e9e08174cd30
124 129 |/ / / / / parent: 21:e758e8f4ace9
125 130 | | | | | user: test
126 131 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
127 132 | | | | | summary: (27) collapse
128 133 | | | | |
129 134 | | o---+ changeset: 26:720dc079a855
130 135 | | | | | parent: 18:5a8c9a29ef81
131 136 | | | | | parent: 25:9d4ed048d013
132 137 | | | | | user: test
133 138 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
134 139 | | | | | summary: (26) merge one known; far right
135 140 | | | | |
136 141 +---o | | changeset: 25:9d4ed048d013
137 142 | | | | | parent: 21:e758e8f4ace9
138 143 | | | | | parent: 24:4a68967db00d
139 144 | | | | | user: test
140 145 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
141 146 | | | | | summary: (25) merge one known; far left
142 147 | | | | |
143 148 | | o | | changeset: 24:4a68967db00d
144 149 | | |\| | parent: 0:7aa22e58e8c1
145 150 | | | | | parent: 23:bc31393cabdf
146 151 | | | | | user: test
147 152 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
148 153 | | | | | summary: (24) merge one known; immediate right
149 154 | | | | |
150 155 | | o | | changeset: 23:bc31393cabdf
151 156 | |/| | | parent: 1:3cae7826a707
152 157 | | | | | parent: 22:a37f2ea6ebc6
153 158 | | | | | user: test
154 159 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
155 160 | | | | | summary: (23) merge one known; immediate left
156 161 | | | | |
157 162 +---o---+ changeset: 22:a37f2ea6ebc6
158 163 | | | | parent: 18:5a8c9a29ef81
159 164 | | / / parent: 21:e758e8f4ace9
160 165 | | | | user: test
161 166 | | | | date: Thu Jan 01 00:00:22 1970 +0000
162 167 | | | | summary: (22) merge two known; one far left, one far right
163 168 | | | |
164 169 o | | | changeset: 21:e758e8f4ace9
165 170 |\ \ \ \ parent: 19:138069b5dad7
166 171 | | | | | parent: 20:aeccadad74b4
167 172 | | | | | user: test
168 173 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
169 174 | | | | | summary: (21) expand
170 175 | | | | |
171 176 | o---+-+ changeset: 20:aeccadad74b4
172 177 | | | | parent: 0:7aa22e58e8c1
173 178 | / / / parent: 18:5a8c9a29ef81
174 179 | | | | user: test
175 180 | | | | date: Thu Jan 01 00:00:20 1970 +0000
176 181 | | | | summary: (20) merge two known; two far right
177 182 | | | |
178 183 o | | | changeset: 19:138069b5dad7
179 184 |\ \ \ \ parent: 15:c0b4283d4c1d
180 185 | | | | | parent: 17:43e52b935494
181 186 | | | | | user: test
182 187 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
183 188 | | | | | summary: (19) expand
184 189 | | | | |
185 190 +---+---o changeset: 18:5a8c9a29ef81
186 191 | | | | parent: 1:3cae7826a707
187 192 | | | | parent: 15:c0b4283d4c1d
188 193 | | | | user: test
189 194 | | | | date: Thu Jan 01 00:00:18 1970 +0000
190 195 | | | | summary: (18) merge two known; two far left
191 196 | | | |
192 197 | o | | changeset: 17:43e52b935494
193 198 | |\ \ \ parent: 12:74dc7aea4494
194 199 | | | | | parent: 16:449a2f9562a4
195 200 | | | | | user: test
196 201 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
197 202 | | | | | summary: (17) expand
198 203 | | | | |
199 204 | | o---+ changeset: 16:449a2f9562a4
200 205 | | | | | parent: 0:7aa22e58e8c1
201 206 | | |/ / parent: 1:3cae7826a707
202 207 | | | | user: test
203 208 | | | | date: Thu Jan 01 00:00:16 1970 +0000
204 209 | | | | summary: (16) merge two known; one immediate right, one near right
205 210 | | | |
206 211 o | | | changeset: 15:c0b4283d4c1d
207 212 |\ \ \ \ parent: 13:c39d0a2b8165
208 213 | | | | | parent: 14:9d533950abf0
209 214 | | | | | user: test
210 215 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
211 216 | | | | | summary: (15) expand
212 217 | | | | |
213 218 | o-----+ changeset: 14:9d533950abf0
214 219 | | | | | parent: 0:7aa22e58e8c1
215 220 | |/ / / parent: 12:74dc7aea4494
216 221 | | | | user: test
217 222 | | | | date: Thu Jan 01 00:00:14 1970 +0000
218 223 | | | | summary: (14) merge two known; one immediate right, one far right
219 224 | | | |
220 225 o | | | changeset: 13:c39d0a2b8165
221 226 |\ \ \ \ parent: 9:79ab1812f961
222 227 | | | | | parent: 11:c3c395dd8b98
223 228 | | | | | user: test
224 229 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
225 230 | | | | | summary: (13) expand
226 231 | | | | |
227 232 +---o | | changeset: 12:74dc7aea4494
228 233 | | |/ / parent: 1:3cae7826a707
229 234 | | | | parent: 9:79ab1812f961
230 235 | | | | user: test
231 236 | | | | date: Thu Jan 01 00:00:12 1970 +0000
232 237 | | | | summary: (12) merge two known; one immediate right, one far left
233 238 | | | |
234 239 | o | | changeset: 11:c3c395dd8b98
235 240 | |\ \ \ parent: 6:0ca7c061cf45
236 241 | | | | | parent: 10:8094c50149ef
237 242 | | | | | user: test
238 243 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
239 244 | | | | | summary: (11) expand
240 245 | | | | |
241 246 | | o---+ changeset: 10:8094c50149ef
242 247 | | | | | parent: 0:7aa22e58e8c1
243 248 | |/ / / parent: 6:0ca7c061cf45
244 249 | | | | user: test
245 250 | | | | date: Thu Jan 01 00:00:10 1970 +0000
246 251 | | | | summary: (10) merge two known; one immediate left, one near right
247 252 | | | |
248 253 o | | | changeset: 9:79ab1812f961
249 254 |\ \ \ \ parent: 7:699392d1259e
250 255 | | | | | parent: 8:d7aa38594334
251 256 | | | | | user: test
252 257 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
253 258 | | | | | summary: (9) expand
254 259 | | | | |
255 260 | o-----+ changeset: 8:d7aa38594334
256 261 | | | | | parent: 0:7aa22e58e8c1
257 262 |/ / / / parent: 7:699392d1259e
258 263 | | | | user: test
259 264 | | | | date: Thu Jan 01 00:00:08 1970 +0000
260 265 | | | | summary: (8) merge two known; one immediate left, one far right
261 266 | | | |
262 267 o | | | changeset: 7:699392d1259e
263 268 |\ \ \ \ parent: 2:e8ea2256f9ec
264 269 | | | | | parent: 5:3589c3c477ab
265 270 | | | | | user: test
266 271 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
267 272 | | | | | summary: (7) expand
268 273 | | | | |
269 274 +---o | | changeset: 6:0ca7c061cf45
270 275 | |/ / / parent: 2:e8ea2256f9ec
271 276 | | | | parent: 5:3589c3c477ab
272 277 | | | | user: test
273 278 | | | | date: Thu Jan 01 00:00:06 1970 +0000
274 279 | | | | summary: (6) merge two known; one immediate left, one far left
275 280 | | | |
276 281 | o | | changeset: 5:3589c3c477ab
277 282 | |\ \ \ parent: 3:02173ffbf857
278 283 | | | | | parent: 4:e2cad8233c77
279 284 | | | | | user: test
280 285 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
281 286 | | | | | summary: (5) expand
282 287 | | | | |
283 288 | | o | | changeset: 4:e2cad8233c77
284 289 | |/|/ / parent: 1:3cae7826a707
285 290 | | | | parent: 3:02173ffbf857
286 291 | | | | user: test
287 292 | | | | date: Thu Jan 01 00:00:04 1970 +0000
288 293 | | | | summary: (4) merge two known; one immediate left, one immediate right
289 294 | | | |
290 295 | o | | changeset: 3:02173ffbf857
291 296 |/ / / user: test
292 297 | | | date: Thu Jan 01 00:00:03 1970 +0000
293 298 | | | summary: (3) collapse
294 299 | | |
295 300 o | | changeset: 2:e8ea2256f9ec
296 301 |/ / user: test
297 302 | | date: Thu Jan 01 00:00:02 1970 +0000
298 303 | | summary: (2) collapse
299 304 | |
300 305 o | changeset: 1:3cae7826a707
301 306 |/ user: test
302 307 | date: Thu Jan 01 00:00:01 1970 +0000
303 308 | summary: (1) collapse
304 309 |
305 310 o changeset: 0:7aa22e58e8c1
306 311 user: test
307 312 date: Thu Jan 01 00:00:00 1970 +0000
308 313 summary: (0) root
309 314
310 315 % file glog
311 316 o changeset: 5:3589c3c477ab
312 317 parent: 3:02173ffbf857
313 318 parent: 4:e2cad8233c77
314 319 user: test
315 320 date: Thu Jan 01 00:00:05 1970 +0000
316 321 summary: (5) expand
317 322
318 323 % unused arguments
319 324 hg glog: invalid arguments
320 325 hg glog [OPTION]... [FILE]
321 326
322 327 show revision history alongside an ASCII revision graph
323 328 failed
@@ -1,151 +1,152 b''
1 1 precommit hook: HG_PARENT1=0000000000000000000000000000000000000000
2 2 pretxncommit hook: HG_NODE=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b HG_PARENT1=0000000000000000000000000000000000000000
3 3 0:29b62aeb769f
4 4 commit hook: HG_NODE=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b HG_PARENT1=0000000000000000000000000000000000000000
5 5 commit.b hook: HG_NODE=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b HG_PARENT1=0000000000000000000000000000000000000000
6 6 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
7 7 precommit hook: HG_PARENT1=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b
8 8 pretxncommit hook: HG_NODE=b702efe9688826e3a91283852b328b84dbf37bc2 HG_PARENT1=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b
9 9 1:b702efe96888
10 10 commit hook: HG_NODE=b702efe9688826e3a91283852b328b84dbf37bc2 HG_PARENT1=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b
11 11 commit.b hook: HG_NODE=b702efe9688826e3a91283852b328b84dbf37bc2 HG_PARENT1=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b
12 12 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
13 13 precommit hook: HG_PARENT1=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b
14 14 pretxncommit hook: HG_NODE=1324a5531bac09b329c3845d35ae6a7526874edb HG_PARENT1=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b
15 15 2:1324a5531bac
16 16 commit hook: HG_NODE=1324a5531bac09b329c3845d35ae6a7526874edb HG_PARENT1=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b
17 17 commit.b hook: HG_NODE=1324a5531bac09b329c3845d35ae6a7526874edb HG_PARENT1=29b62aeb769fdf78d8d9c5f28b017f76d7ef824b
18 created new head
18 19 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
19 20 (branch merge, don't forget to commit)
20 21 precommit hook: HG_PARENT1=1324a5531bac09b329c3845d35ae6a7526874edb HG_PARENT2=b702efe9688826e3a91283852b328b84dbf37bc2
21 22 pretxncommit hook: HG_NODE=4c52fb2e402287dd5dc052090682536c8406c321 HG_PARENT1=1324a5531bac09b329c3845d35ae6a7526874edb HG_PARENT2=b702efe9688826e3a91283852b328b84dbf37bc2
22 23 3:4c52fb2e4022
23 24 commit hook: HG_NODE=4c52fb2e402287dd5dc052090682536c8406c321 HG_PARENT1=1324a5531bac09b329c3845d35ae6a7526874edb HG_PARENT2=b702efe9688826e3a91283852b328b84dbf37bc2
24 25 commit.b hook: HG_NODE=4c52fb2e402287dd5dc052090682536c8406c321 HG_PARENT1=1324a5531bac09b329c3845d35ae6a7526874edb HG_PARENT2=b702efe9688826e3a91283852b328b84dbf37bc2
25 26 pre-identify hook: HG_ARGS=id
26 27 warning: pre-identify hook exited with status 1
27 28 pre-cat hook: HG_ARGS=cat b
28 29 post-cat hook: HG_ARGS=cat b HG_RESULT=0
29 30 b
30 31 prechangegroup hook: HG_SOURCE=pull HG_URL=file:
31 32 changegroup hook: HG_NODE=b702efe9688826e3a91283852b328b84dbf37bc2 HG_SOURCE=pull HG_URL=file:
32 33 incoming hook: HG_NODE=b702efe9688826e3a91283852b328b84dbf37bc2 HG_SOURCE=pull HG_URL=file:
33 34 incoming hook: HG_NODE=1324a5531bac09b329c3845d35ae6a7526874edb HG_SOURCE=pull HG_URL=file:
34 35 incoming hook: HG_NODE=4c52fb2e402287dd5dc052090682536c8406c321 HG_SOURCE=pull HG_URL=file:
35 36 pulling from ../a
36 37 searching for changes
37 38 adding changesets
38 39 adding manifests
39 40 adding file changes
40 41 added 3 changesets with 2 changes to 2 files
41 42 (run 'hg update' to get a working copy)
42 43 pretag hook: HG_LOCAL=0 HG_NODE=4c52fb2e402287dd5dc052090682536c8406c321 HG_TAG=a
43 44 precommit hook: HG_PARENT1=4c52fb2e402287dd5dc052090682536c8406c321
44 45 pretxncommit hook: HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_PARENT1=4c52fb2e402287dd5dc052090682536c8406c321
45 46 4:8ea2ef7ad3e8
46 47 commit hook: HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_PARENT1=4c52fb2e402287dd5dc052090682536c8406c321
47 48 commit.b hook: HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_PARENT1=4c52fb2e402287dd5dc052090682536c8406c321
48 49 tag hook: HG_LOCAL=0 HG_NODE=4c52fb2e402287dd5dc052090682536c8406c321 HG_TAG=a
49 50 pretag hook: HG_LOCAL=1 HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_TAG=la
50 51 tag hook: HG_LOCAL=1 HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_TAG=la
51 52 pretag hook: HG_LOCAL=0 HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_TAG=fa
52 53 pretag.forbid hook: HG_LOCAL=0 HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_TAG=fa
53 54 abort: pretag.forbid hook exited with status 1
54 55 pretag hook: HG_LOCAL=1 HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_TAG=fla
55 56 pretag.forbid hook: HG_LOCAL=1 HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_TAG=fla
56 57 abort: pretag.forbid hook exited with status 1
57 58 4:8ea2ef7ad3e8
58 59 precommit hook: HG_PARENT1=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198
59 60 pretxncommit hook: HG_NODE=fad284daf8c032148abaffcd745dafeceefceb61 HG_PARENT1=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198
60 61 5:fad284daf8c0
61 62 pretxncommit.forbid hook: HG_NODE=fad284daf8c032148abaffcd745dafeceefceb61 HG_PARENT1=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198
62 63 transaction abort!
63 64 rollback completed
64 65 abort: pretxncommit.forbid1 hook exited with status 1
65 66 4:8ea2ef7ad3e8
66 67 precommit hook: HG_PARENT1=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198
67 68 precommit.forbid hook: HG_PARENT1=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198
68 69 abort: precommit.forbid hook exited with status 1
69 70 4:8ea2ef7ad3e8
70 71 preupdate hook: HG_PARENT1=b702efe96888
71 72 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
72 73 preupdate hook: HG_PARENT1=8ea2ef7ad3e8
73 74 update hook: HG_ERROR=0 HG_PARENT1=8ea2ef7ad3e8
74 75 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
75 76 3:4c52fb2e4022
76 77 prechangegroup.forbid hook: HG_SOURCE=pull HG_URL=file:
77 78 pulling from ../a
78 79 searching for changes
79 80 abort: prechangegroup.forbid hook exited with status 1
80 81 4:8ea2ef7ad3e8
81 82 pretxnchangegroup.forbid hook: HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_SOURCE=pull HG_URL=file:
82 83 pulling from ../a
83 84 searching for changes
84 85 adding changesets
85 86 adding manifests
86 87 adding file changes
87 88 added 1 changesets with 1 changes to 1 files
88 89 transaction abort!
89 90 rollback completed
90 91 abort: pretxnchangegroup.forbid1 hook exited with status 1
91 92 3:4c52fb2e4022
92 93 preoutgoing hook: HG_SOURCE=pull
93 94 outgoing hook: HG_NODE=8ea2ef7ad3e8cac946c72f1e0c79d6aebc301198 HG_SOURCE=pull
94 95 pulling from ../a
95 96 searching for changes
96 97 adding changesets
97 98 adding manifests
98 99 adding file changes
99 100 added 1 changesets with 1 changes to 1 files
100 101 (run 'hg update' to get a working copy)
101 102 rolling back last transaction
102 103 preoutgoing hook: HG_SOURCE=pull
103 104 preoutgoing.forbid hook: HG_SOURCE=pull
104 105 pulling from ../a
105 106 searching for changes
106 107 abort: preoutgoing.forbid hook exited with status 1
107 108 # test python hooks
108 109 error: preoutgoing.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
109 110 error: preoutgoing.raise hook raised an exception: exception from hook
110 111 pulling from ../a
111 112 searching for changes
112 113 error: preoutgoing.abort hook failed: raise abort from hook
113 114 abort: raise abort from hook
114 115 pulling from ../a
115 116 searching for changes
116 117 hook args:
117 118 hooktype preoutgoing
118 119 source pull
119 120 abort: preoutgoing.fail hook failed
120 121 pulling from ../a
121 122 searching for changes
122 123 abort: preoutgoing.uncallable hook is invalid ("hooktests.uncallable" is not callable)
123 124 pulling from ../a
124 125 searching for changes
125 126 abort: preoutgoing.nohook hook is invalid ("hooktests.nohook" is not defined)
126 127 pulling from ../a
127 128 searching for changes
128 129 abort: preoutgoing.nomodule hook is invalid ("nomodule" not in a module)
129 130 pulling from ../a
130 131 searching for changes
131 132 abort: preoutgoing.badmodule hook is invalid (import of "nomodule" failed)
132 133 pulling from ../a
133 134 searching for changes
134 135 abort: preoutgoing.unreachable hook is invalid (import of "hooktests.container" failed)
135 136 pulling from ../a
136 137 searching for changes
137 138 hook args:
138 139 hooktype preoutgoing
139 140 source pull
140 141 adding changesets
141 142 adding manifests
142 143 adding file changes
143 144 added 1 changesets with 1 changes to 1 files
144 145 (run 'hg update' to get a working copy)
145 146 # make sure --traceback works
146 147 Traceback (most recent call last):
147 148 Automatically installed hook
148 149 foo
149 150 calling hook commit.auto: <function autohook>
150 151 Automatically installed hook
151 152 hooks.commit.auto=<function autohook>
@@ -1,183 +1,184 b''
1 1 # creating 'remote'
2 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 created new head
3 4 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
4 5 rev offset length base linkrev nodeid p1 p2
5 6 0 0 3 0 0 362fef284ce2 000000000000 000000000000
6 7 1 3 5 1 1 125144f7e028 362fef284ce2 000000000000
7 8 2 8 7 2 2 4c982badb186 125144f7e028 000000000000
8 9 3 15 9 3 3 19b1fc555737 4c982badb186 000000000000
9 10 rev offset length base linkrev nodeid p1 p2
10 11 0 0 75 0 7 905359268f77 000000000000 000000000000
11 12 rev offset length base linkrev nodeid p1 p2
12 13 0 0 75 0 8 905359268f77 000000000000 000000000000
13 14 rev offset length base linkrev nodeid p1 p2
14 15 0 0 8 0 6 12ab3bcc5ea4 000000000000 000000000000
15 16 rev offset length base linkrev nodeid p1 p2
16 17 0 0 48 0 0 43eadb1d2d06 000000000000 000000000000
17 18 1 48 48 1 1 8b89697eba2c 43eadb1d2d06 000000000000
18 19 2 96 48 2 2 626a32663c2f 8b89697eba2c 000000000000
19 20 3 144 48 3 3 f54c32f13478 626a32663c2f 000000000000
20 21 4 192 58 3 6 de68e904d169 626a32663c2f 000000000000
21 22 5 250 68 3 7 3b45cc2ab868 de68e904d169 000000000000
22 23 6 318 54 6 8 24d86153a002 f54c32f13478 000000000000
23 24 checking changesets
24 25 checking manifests
25 26 crosschecking files in changesets and manifests
26 27 checking files
27 28 4 files, 9 changesets, 7 total revisions
28 29 # Starting server
29 30 # clone remote via stream
30 31 requesting all changes
31 32 adding changesets
32 33 adding manifests
33 34 adding file changes
34 35 added 1 changesets with 1 changes to 1 files
35 36 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
36 37 checking changesets
37 38 checking manifests
38 39 crosschecking files in changesets and manifests
39 40 checking files
40 41 1 files, 1 changesets, 1 total revisions
41 42 requesting all changes
42 43 adding changesets
43 44 adding manifests
44 45 adding file changes
45 46 added 2 changesets with 2 changes to 1 files
46 47 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
47 48 checking changesets
48 49 checking manifests
49 50 crosschecking files in changesets and manifests
50 51 checking files
51 52 1 files, 2 changesets, 2 total revisions
52 53 requesting all changes
53 54 adding changesets
54 55 adding manifests
55 56 adding file changes
56 57 added 3 changesets with 3 changes to 1 files
57 58 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
58 59 checking changesets
59 60 checking manifests
60 61 crosschecking files in changesets and manifests
61 62 checking files
62 63 1 files, 3 changesets, 3 total revisions
63 64 requesting all changes
64 65 adding changesets
65 66 adding manifests
66 67 adding file changes
67 68 added 4 changesets with 4 changes to 1 files
68 69 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
69 70 checking changesets
70 71 checking manifests
71 72 crosschecking files in changesets and manifests
72 73 checking files
73 74 1 files, 4 changesets, 4 total revisions
74 75 requesting all changes
75 76 adding changesets
76 77 adding manifests
77 78 adding file changes
78 79 added 2 changesets with 2 changes to 1 files
79 80 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
80 81 checking changesets
81 82 checking manifests
82 83 crosschecking files in changesets and manifests
83 84 checking files
84 85 1 files, 2 changesets, 2 total revisions
85 86 requesting all changes
86 87 adding changesets
87 88 adding manifests
88 89 adding file changes
89 90 added 3 changesets with 3 changes to 1 files
90 91 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
91 92 checking changesets
92 93 checking manifests
93 94 crosschecking files in changesets and manifests
94 95 checking files
95 96 1 files, 3 changesets, 3 total revisions
96 97 requesting all changes
97 98 adding changesets
98 99 adding manifests
99 100 adding file changes
100 101 added 4 changesets with 5 changes to 2 files
101 102 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
102 103 checking changesets
103 104 checking manifests
104 105 crosschecking files in changesets and manifests
105 106 checking files
106 107 2 files, 4 changesets, 5 total revisions
107 108 requesting all changes
108 109 adding changesets
109 110 adding manifests
110 111 adding file changes
111 112 added 5 changesets with 6 changes to 3 files
112 113 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
113 114 checking changesets
114 115 checking manifests
115 116 crosschecking files in changesets and manifests
116 117 checking files
117 118 3 files, 5 changesets, 6 total revisions
118 119 requesting all changes
119 120 adding changesets
120 121 adding manifests
121 122 adding file changes
122 123 added 5 changesets with 5 changes to 2 files
123 124 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
124 125 checking changesets
125 126 checking manifests
126 127 crosschecking files in changesets and manifests
127 128 checking files
128 129 2 files, 5 changesets, 5 total revisions
129 130 pulling from ../test-7
130 131 searching for changes
131 132 adding changesets
132 133 adding manifests
133 134 adding file changes
134 135 added 4 changesets with 2 changes to 3 files (+1 heads)
135 136 (run 'hg heads' to see heads, 'hg merge' to merge)
136 137 checking changesets
137 138 checking manifests
138 139 crosschecking files in changesets and manifests
139 140 checking files
140 141 4 files, 9 changesets, 7 total revisions
141 142 pulling from http://localhost/
142 143 searching for changes
143 144 adding changesets
144 145 adding manifests
145 146 adding file changes
146 147 added 1 changesets with 0 changes to 1 files (+1 heads)
147 148 (run 'hg heads' to see heads, 'hg merge' to merge)
148 149 checking changesets
149 150 checking manifests
150 151 crosschecking files in changesets and manifests
151 152 checking files
152 153 1 files, 3 changesets, 2 total revisions
153 154 pulling from http://localhost/
154 155 searching for changes
155 156 adding changesets
156 157 adding manifests
157 158 adding file changes
158 159 added 6 changesets with 5 changes to 4 files
159 160 (run 'hg update' to get a working copy)
160 161 pulling from http://localhost/
161 162 searching for changes
162 163 adding changesets
163 164 adding manifests
164 165 adding file changes
165 166 added 2 changesets with 0 changes to 1 files (+1 heads)
166 167 (run 'hg heads' to see heads, 'hg merge' to merge)
167 168 checking changesets
168 169 checking manifests
169 170 crosschecking files in changesets and manifests
170 171 checking files
171 172 1 files, 5 changesets, 3 total revisions
172 173 pulling from http://localhost/
173 174 searching for changes
174 175 adding changesets
175 176 adding manifests
176 177 adding file changes
177 178 added 4 changesets with 4 changes to 4 files
178 179 (run 'hg update' to get a working copy)
179 180 checking changesets
180 181 checking manifests
181 182 crosschecking files in changesets and manifests
182 183 checking files
183 184 4 files, 9 changesets, 7 total revisions
@@ -1,50 +1,51 b''
1 1 adding bar
2 2 adding foo
3 3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
4 created new head
4 5 % start imerge
5 6 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
6 7 (branch merge, don't forget to commit)
7 8 U foo
8 9 foo
9 10 bar
10 11 bar
11 12 bar
12 13 % status -v
13 14 merging e6da46716401 and 30d266f502e7
14 15 U foo (foo2)
15 16 % next
16 17 foo
17 18 % merge next
18 19 merging foo and foo2
19 20 all conflicts resolved
20 21 % unresolve
21 22 % merge foo
22 23 merging foo and foo2
23 24 all conflicts resolved
24 25 % save
25 26 % load
26 27 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
27 28 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
28 29 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
29 30 (branch merge, don't forget to commit)
30 31 R foo
31 32 all conflicts resolved
32 33 foo
33 34 changeset: 3:fa9a6defdcaf
34 35 tag: tip
35 36 parent: 2:e6da46716401
36 37 parent: 1:30d266f502e7
37 38 user: test
38 39 date: Thu Jan 01 00:00:03 1970 +0000
39 40 files: foo foo2
40 41 description:
41 42 merged
42 43
43 44
44 45 % nothing to merge -- tip
45 46 abort: there is nothing to merge
46 47 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
47 48 % nothing to merge
48 49 abort: there is nothing to merge - use "hg update" instead
49 50 % load unknown parent
50 51 abort: merge parent e6da46716401 not in repository
@@ -1,242 +1,243 b''
1 1 adding a
2 2 adding d1/d2/a
3 3 % import exported patch
4 4 requesting all changes
5 5 adding changesets
6 6 adding manifests
7 7 adding file changes
8 8 added 1 changesets with 2 changes to 2 files
9 9 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
10 10 applying ../tip.patch
11 11 % message should be same
12 12 summary: second change
13 13 % committer should be same
14 14 user: someone
15 15 % import of plain diff should fail without message
16 16 requesting all changes
17 17 adding changesets
18 18 adding manifests
19 19 adding file changes
20 20 added 1 changesets with 2 changes to 2 files
21 21 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
22 22 applying ../tip.patch
23 23 transaction abort!
24 24 rollback completed
25 25 abort: empty commit message
26 26 % import of plain diff should be ok with message
27 27 requesting all changes
28 28 adding changesets
29 29 adding manifests
30 30 adding file changes
31 31 added 1 changesets with 2 changes to 2 files
32 32 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
33 33 applying ../tip.patch
34 34 % import of plain diff with specific date and user
35 35 requesting all changes
36 36 adding changesets
37 37 adding manifests
38 38 adding file changes
39 39 added 1 changesets with 2 changes to 2 files
40 40 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
41 41 applying ../tip.patch
42 42 changeset: 1:ca68f19f3a40
43 43 tag: tip
44 44 user: user@nowhere.net
45 45 date: Thu Jan 01 00:00:01 1970 +0000
46 46 files: a
47 47 description:
48 48 patch
49 49
50 50
51 51 diff -r 80971e65b431 -r ca68f19f3a40 a
52 52 --- a/a Thu Jan 01 00:00:00 1970 +0000
53 53 +++ b/a Thu Jan 01 00:00:01 1970 +0000
54 54 @@ -1,1 +1,2 @@
55 55 line 1
56 56 +line 2
57 57
58 58 % import of plain diff should be ok with --no-commit
59 59 requesting all changes
60 60 adding changesets
61 61 adding manifests
62 62 adding file changes
63 63 added 1 changesets with 2 changes to 2 files
64 64 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
65 65 applying ../tip.patch
66 66 diff -r 80971e65b431 a
67 67 --- a/a
68 68 +++ b/a
69 69 @@ -1,1 +1,2 @@
70 70 line 1
71 71 +line 2
72 72 % hg -R repo import
73 73 requesting all changes
74 74 adding changesets
75 75 adding manifests
76 76 adding file changes
77 77 added 1 changesets with 2 changes to 2 files
78 78 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
79 79 applying tip.patch
80 80 % import from stdin
81 81 requesting all changes
82 82 adding changesets
83 83 adding manifests
84 84 adding file changes
85 85 added 1 changesets with 2 changes to 2 files
86 86 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
87 87 applying patch from stdin
88 88 % override commit message
89 89 requesting all changes
90 90 adding changesets
91 91 adding manifests
92 92 adding file changes
93 93 added 1 changesets with 2 changes to 2 files
94 94 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
95 95 applying patch from stdin
96 96 summary: override
97 97 % plain diff in email, subject, message body
98 98 requesting all changes
99 99 adding changesets
100 100 adding manifests
101 101 adding file changes
102 102 added 1 changesets with 2 changes to 2 files
103 103 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
104 104 applying ../msg.patch
105 105 user: email patcher
106 106 summary: email patch
107 107 % plain diff in email, no subject, message body
108 108 requesting all changes
109 109 adding changesets
110 110 adding manifests
111 111 adding file changes
112 112 added 1 changesets with 2 changes to 2 files
113 113 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
114 114 applying patch from stdin
115 115 % plain diff in email, subject, no message body
116 116 requesting all changes
117 117 adding changesets
118 118 adding manifests
119 119 adding file changes
120 120 added 1 changesets with 2 changes to 2 files
121 121 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
122 122 applying patch from stdin
123 123 % plain diff in email, no subject, no message body, should fail
124 124 requesting all changes
125 125 adding changesets
126 126 adding manifests
127 127 adding file changes
128 128 added 1 changesets with 2 changes to 2 files
129 129 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
130 130 applying patch from stdin
131 131 transaction abort!
132 132 rollback completed
133 133 abort: empty commit message
134 134 % hg export in email, should use patch header
135 135 requesting all changes
136 136 adding changesets
137 137 adding manifests
138 138 adding file changes
139 139 added 1 changesets with 2 changes to 2 files
140 140 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
141 141 applying patch from stdin
142 142 summary: second change
143 143 % plain diff in email, [PATCH] subject, message body with subject
144 144 requesting all changes
145 145 adding changesets
146 146 adding manifests
147 147 adding file changes
148 148 added 1 changesets with 2 changes to 2 files
149 149 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
150 150 applying patch from stdin
151 151 email patch
152 152
153 153 next line
154 154 ---
155 155 % import patch1 patch2; rollback
156 156 parent: 0
157 157 applying ../patch1
158 158 applying ../patch2
159 159 rolling back last transaction
160 160 parent: 1
161 161 % hg import in a subdirectory
162 162 requesting all changes
163 163 adding changesets
164 164 adding manifests
165 165 adding file changes
166 166 added 1 changesets with 2 changes to 2 files
167 167 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
168 168 applying ../../../tip.patch
169 169 % message should be 'subdir change'
170 170 summary: subdir change
171 171 % committer should be 'someoneelse'
172 172 user: someoneelse
173 173 % should be empty
174 174 % test fuzziness
175 175 adding a
176 176 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
177 created new head
177 178 applying tip.patch
178 179 patching file a
179 180 Hunk #1 succeeded at 1 with fuzz 2 (offset -2 lines).
180 181 a
181 182 adding a
182 183 adding b1
183 184 adding c1
184 185 adding d
185 186 diff --git a/a b/a
186 187 --- a/a
187 188 +++ b/a
188 189 @@ -0,0 +1,1 @@
189 190 +a
190 191 diff --git a/b1 b/b2
191 192 rename from b1
192 193 rename to b2
193 194 --- a/b1
194 195 +++ b/b2
195 196 @@ -0,0 +1,1 @@
196 197 +b
197 198 diff --git a/c1 b/c1
198 199 --- a/c1
199 200 +++ b/c1
200 201 @@ -0,0 +1,1 @@
201 202 +c
202 203 diff --git a/c1 b/c2
203 204 copy from c1
204 205 copy to c2
205 206 --- a/c1
206 207 +++ b/c2
207 208 @@ -0,0 +1,1 @@
208 209 +c
209 210 diff --git a/d b/d
210 211 --- a/d
211 212 +++ b/d
212 213 @@ -1,1 +0,0 @@
213 214 -d
214 215 4 files updated, 0 files merged, 2 files removed, 0 files unresolved
215 216 applying empty.diff
216 217 % a file
217 218 a
218 219 % b1 file
219 220 % b2 file
220 221 b
221 222 % c1 file
222 223 c
223 224 % c2 file
224 225 c
225 226 % d file
226 227 % test trailing binary removal
227 228 adding a
228 229 adding b
229 230 R a
230 231 R b
231 232 diff --git a/a b/a
232 233 diff --git a/b b/b
233 234 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
234 235 applying remove.diff
235 236 % test update+rename with common name (issue 927)
236 237 adding a
237 238 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
238 239 applying copy.diff
239 240 % view a
240 241 a
241 242 % view a2
242 243 a
@@ -1,10 +1,11 b''
1 1 adding src/a.c
2 2 moving src/a.c to source/a.c
3 3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
4 created new head
4 5 ? src/a.o
5 6 merging src/a.c and source/a.c
6 7 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
7 8 (branch merge, don't forget to commit)
8 9 M source/a.c
9 10 R src/a.c
10 11 ? source/a.o
@@ -1,55 +1,57 b''
1 1 adding 1
2 2 adding 2
3 3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
4 created new head
4 5 resolving manifests
5 6 overwrite None partial False
6 7 ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c
7 8 searching for copies back to rev 1
8 9 unmatched files in other:
9 10 1a
10 11 all copies found (* = to merge, ! = divergent):
11 12 1a -> 1
12 13 checking for directory renames
13 14 1: other deleted -> r
14 15 1a: remote created -> g
15 16 removing 1
16 17 getting 1a
17 18 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
18 19 (branch merge, don't forget to commit)
19 20 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
21 created new head
20 22 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
21 23 resolving manifests
22 24 overwrite None partial False
23 25 ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96
24 26 searching for copies back to rev 1
25 27 unmatched files in local:
26 28 1a
27 29 all copies found (* = to merge, ! = divergent):
28 30 1a -> 1 *
29 31 checking for directory renames
30 32 1a: local moved to 1 -> m
31 33 picked tool 'internal:merge' for 1a (binary False symlink False)
32 34 merging 1a and 1
33 35 my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d
34 36 premerge successful
35 37 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
36 38 (branch merge, don't forget to commit)
37 39 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
38 40 resolving manifests
39 41 overwrite None partial False
40 42 ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052
41 43 searching for copies back to rev 1
42 44 unmatched files in other:
43 45 1a
44 46 all copies found (* = to merge, ! = divergent):
45 47 1a -> 1 *
46 48 checking for directory renames
47 49 1: remote moved to 1a -> m
48 50 copying 1 to 1a
49 51 picked tool 'internal:merge' for 1 (binary False symlink False)
50 52 merging 1 and 1a
51 53 my 1@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d
52 54 premerge successful
53 55 removing 1
54 56 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
55 57 (branch merge, don't forget to commit)
@@ -1,223 +1,226 b''
1 1 adding a
2 2 changeset: 0:8580ff50825a
3 3 user: test
4 4 date: Thu Jan 01 00:00:01 1970 +0000
5 5 summary: a
6 6
7 7 % -f, directory
8 8 abort: can only follow copies/renames for explicit file names
9 9 % -f, but no args
10 10 changeset: 4:b30c444c7c84
11 11 tag: tip
12 12 user: test
13 13 date: Thu Jan 01 00:00:05 1970 +0000
14 14 summary: e
15 15
16 16 changeset: 3:16b60bf3f99a
17 17 user: test
18 18 date: Thu Jan 01 00:00:04 1970 +0000
19 19 summary: d
20 20
21 21 changeset: 2:21fba396af4c
22 22 user: test
23 23 date: Thu Jan 01 00:00:03 1970 +0000
24 24 summary: c
25 25
26 26 changeset: 1:c0296dabce9b
27 27 user: test
28 28 date: Thu Jan 01 00:00:02 1970 +0000
29 29 summary: b
30 30
31 31 changeset: 0:8580ff50825a
32 32 user: test
33 33 date: Thu Jan 01 00:00:01 1970 +0000
34 34 summary: a
35 35
36 36 % one rename
37 37 changeset: 0:8580ff50825a
38 38 user: test
39 39 date: Thu Jan 01 00:00:01 1970 +0000
40 40 files: a
41 41 description:
42 42 a
43 43
44 44
45 45 % many renames
46 46 changeset: 4:b30c444c7c84
47 47 tag: tip
48 48 user: test
49 49 date: Thu Jan 01 00:00:05 1970 +0000
50 50 files: dir/b e
51 51 description:
52 52 e
53 53
54 54
55 55 changeset: 2:21fba396af4c
56 56 user: test
57 57 date: Thu Jan 01 00:00:03 1970 +0000
58 58 files: b dir/b
59 59 description:
60 60 c
61 61
62 62
63 63 changeset: 1:c0296dabce9b
64 64 user: test
65 65 date: Thu Jan 01 00:00:02 1970 +0000
66 66 files: b
67 67 description:
68 68 b
69 69
70 70
71 71 changeset: 0:8580ff50825a
72 72 user: test
73 73 date: Thu Jan 01 00:00:01 1970 +0000
74 74 files: a
75 75 description:
76 76 a
77 77
78 78
79 79 % log copies
80 80 4 e (dir/b)
81 81 3 b (a)
82 82 2 dir/b (b)
83 83 1 b (a)
84 84 0
85 85 % log copies, non-linear manifest
86 86 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
87 87 adding foo
88 created new head
88 89 5 e (dir/b)
89 90 % log copies, execute bit set
90 91 6
91 92 % log -p d
92 93 changeset: 3:16b60bf3f99a
93 94 user: test
94 95 date: Thu Jan 01 00:00:04 1970 +0000
95 96 files: a b d
96 97 description:
97 98 d
98 99
99 100
100 101 diff -r 21fba396af4c -r 16b60bf3f99a d
101 102 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
102 103 +++ b/d Thu Jan 01 00:00:04 1970 +0000
103 104 @@ -0,0 +1,1 @@
104 105 +a
105 106
106 107 adding base
107 108 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
108 109 adding b1
110 created new head
109 111 % log -f
110 112 changeset: 3:e62f78d544b4
111 113 tag: tip
112 114 parent: 1:3d5bf5654eda
113 115 user: test
114 116 date: Thu Jan 01 00:00:01 1970 +0000
115 117 summary: b1
116 118
117 119 changeset: 1:3d5bf5654eda
118 120 user: test
119 121 date: Thu Jan 01 00:00:01 1970 +0000
120 122 summary: r1
121 123
122 124 changeset: 0:67e992f2c4f3
123 125 user: test
124 126 date: Thu Jan 01 00:00:01 1970 +0000
125 127 summary: base
126 128
127 129 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
128 130 adding b2
131 created new head
129 132 % log -f -r 1:tip
130 133 changeset: 1:3d5bf5654eda
131 134 user: test
132 135 date: Thu Jan 01 00:00:01 1970 +0000
133 136 summary: r1
134 137
135 138 changeset: 2:60c670bf5b30
136 139 user: test
137 140 date: Thu Jan 01 00:00:01 1970 +0000
138 141 summary: r2
139 142
140 143 changeset: 3:e62f78d544b4
141 144 parent: 1:3d5bf5654eda
142 145 user: test
143 146 date: Thu Jan 01 00:00:01 1970 +0000
144 147 summary: b1
145 148
146 149 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
147 150 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
148 151 (branch merge, don't forget to commit)
149 152 % log -r . with two parents
150 153 warning: working directory has two parents, tag '.' uses the first
151 154 changeset: 3:e62f78d544b4
152 155 parent: 1:3d5bf5654eda
153 156 user: test
154 157 date: Thu Jan 01 00:00:01 1970 +0000
155 158 summary: b1
156 159
157 160 % log -r . with one parent
158 161 changeset: 5:302e9dd6890d
159 162 tag: tip
160 163 parent: 3:e62f78d544b4
161 164 parent: 4:ddb82e70d1a1
162 165 user: test
163 166 date: Thu Jan 01 00:00:01 1970 +0000
164 167 summary: m12
165 168
166 169 % log --follow-first
167 170 changeset: 6:2404bbcab562
168 171 tag: tip
169 172 user: test
170 173 date: Thu Jan 01 00:00:01 1970 +0000
171 174 summary: b1.1
172 175
173 176 changeset: 5:302e9dd6890d
174 177 parent: 3:e62f78d544b4
175 178 parent: 4:ddb82e70d1a1
176 179 user: test
177 180 date: Thu Jan 01 00:00:01 1970 +0000
178 181 summary: m12
179 182
180 183 changeset: 3:e62f78d544b4
181 184 parent: 1:3d5bf5654eda
182 185 user: test
183 186 date: Thu Jan 01 00:00:01 1970 +0000
184 187 summary: b1
185 188
186 189 changeset: 1:3d5bf5654eda
187 190 user: test
188 191 date: Thu Jan 01 00:00:01 1970 +0000
189 192 summary: r1
190 193
191 194 changeset: 0:67e992f2c4f3
192 195 user: test
193 196 date: Thu Jan 01 00:00:01 1970 +0000
194 197 summary: base
195 198
196 199 % log -P 2
197 200 changeset: 6:2404bbcab562
198 201 tag: tip
199 202 user: test
200 203 date: Thu Jan 01 00:00:01 1970 +0000
201 204 summary: b1.1
202 205
203 206 changeset: 5:302e9dd6890d
204 207 parent: 3:e62f78d544b4
205 208 parent: 4:ddb82e70d1a1
206 209 user: test
207 210 date: Thu Jan 01 00:00:01 1970 +0000
208 211 summary: m12
209 212
210 213 changeset: 4:ddb82e70d1a1
211 214 parent: 0:67e992f2c4f3
212 215 user: test
213 216 date: Thu Jan 01 00:00:01 1970 +0000
214 217 summary: b2
215 218
216 219 changeset: 3:e62f78d544b4
217 220 parent: 1:3d5bf5654eda
218 221 user: test
219 222 date: Thu Jan 01 00:00:01 1970 +0000
220 223 summary: b1
221 224
222 225 % log -r ""
223 226 abort: 00changelog.i@: ambiguous identifier!
@@ -1,89 +1,92 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 3 merging bar and foo
3 4 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
4 5 (branch merge, don't forget to commit)
5 6 % contents of bar should be line0 line1 line2
6 7 line0
7 8 line1
8 9 line2
9 10 rev offset length base linkrev nodeid p1 p2
10 11 0 0 77 0 2 da78c0659611 000000000000 000000000000
11 12 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
12 13 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
13 14 rev offset length base linkrev nodeid p1 p2
14 15 0 0 7 0 0 690b295714ae 000000000000 000000000000
15 16 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
16 17 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
18 created new head
17 19 4:2d2f9a22c82b 2:0a3ab4856510
18 20 3:7d3b554bfdf1 2:0a3ab4856510 1:5cd961e4045d
19 21 2:0a3ab4856510 0:2665aaee66e9
20 22 1:5cd961e4045d
21 23 0:2665aaee66e9
22 24 % this should use bar@rev2 as the ancestor
23 25 resolving manifests
24 26 overwrite None partial False
25 27 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1
26 28 searching for copies back to rev 1
27 29 bar: versions differ -> m
28 30 picked tool 'internal:merge' for bar (binary False symlink False)
29 31 merging bar
30 32 my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510
31 33 premerge successful
32 34 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
33 35 (branch merge, don't forget to commit)
34 36 % contents of bar should be line1 line2
35 37 line1
36 38 line2
37 39 rev offset length base linkrev nodeid p1 p2
38 40 0 0 77 0 2 da78c0659611 000000000000 000000000000
39 41 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
40 42 2 153 7 2 4 4defe5eec418 da78c0659611 000000000000
41 43 3 160 13 3 5 4663501da27b 4defe5eec418 4b358025380b
42 44
43 45
44 46 requesting all changes
45 47 adding changesets
46 48 adding manifests
47 49 adding file changes
48 50 added 3 changesets with 3 changes to 2 files (+1 heads)
49 51 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
50 52 merging foo and bar
51 53 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
52 54 (branch merge, don't forget to commit)
53 55 % contents of bar should be line0 line1 line2
54 56 line0
55 57 line1
56 58 line2
57 59 rev offset length base linkrev nodeid p1 p2
58 60 0 0 77 0 2 da78c0659611 000000000000 000000000000
59 61 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
60 62 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
61 63 rev offset length base linkrev nodeid p1 p2
62 64 0 0 7 0 0 690b295714ae 000000000000 000000000000
63 65 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
64 66 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
67 created new head
65 68 4:2d2f9a22c82b 2:0a3ab4856510
66 69 3:96ab80c60897 1:5cd961e4045d 2:0a3ab4856510
67 70 2:0a3ab4856510 0:2665aaee66e9
68 71 1:5cd961e4045d
69 72 0:2665aaee66e9
70 73 % this should use bar@rev2 as the ancestor
71 74 resolving manifests
72 75 overwrite None partial False
73 76 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897
74 77 searching for copies back to rev 1
75 78 bar: versions differ -> m
76 79 picked tool 'internal:merge' for bar (binary False symlink False)
77 80 merging bar
78 81 my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510
79 82 premerge successful
80 83 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
81 84 (branch merge, don't forget to commit)
82 85 % contents of bar should be line1 line2
83 86 line1
84 87 line2
85 88 rev offset length base linkrev nodeid p1 p2
86 89 0 0 77 0 2 da78c0659611 000000000000 000000000000
87 90 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
88 91 2 153 7 2 4 4defe5eec418 da78c0659611 000000000000
89 92 3 160 13 3 5 4663501da27b 4defe5eec418 4b358025380b
@@ -1,20 +1,22 b''
1 1 adding a
2 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 created new head
3 4 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 created new head
4 6 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 7 % should fail because not at a head
6 8 abort: repo has 3 heads - please merge with an explicit rev
7 9 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
8 10 % should fail because > 2 heads
9 11 abort: repo has 3 heads - please merge with an explicit rev
10 12 % should succeed
11 13 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
12 14 (branch merge, don't forget to commit)
13 15 % should succeed - 2 heads
14 16 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
15 17 (branch merge, don't forget to commit)
16 18 % should fail because at tip
17 19 abort: there is nothing to merge
18 20 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
19 21 % should fail because 1 head
20 22 abort: there is nothing to merge - use "hg update" instead
@@ -1,10 +1,11 b''
1 created new head
1 2 % local deleted a file, remote removed
2 3 abort: outstanding uncommitted changes
3 4 resolving manifests
4 5 removing a
5 6 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
6 7 (branch merge, don't forget to commit)
7 8 % should show a as removed
8 9 R a
9 10 % manifest. should not have a:
10 11 b
@@ -1,64 +1,65 b''
1 1 adding file1
2 2 adding file2
3 3 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 created new head
4 5
5 6 # non-interactive merge
6 7 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
7 8 (branch merge, don't forget to commit)
8 9 status:
9 10 M file2
10 11 C file1
11 12 file1:
12 13 1
13 14 changed
14 15 file2:
15 16 2
16 17 changed
17 18
18 19 # interactive merge
19 20 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
20 21 local changed file1 which remote deleted
21 22 use (c)hanged version or (d)elete? remote changed file2 which local deleted
22 23 use (c)hanged version or leave (d)eleted? 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
23 24 (branch merge, don't forget to commit)
24 25 status:
25 26 file2: No such file or directory
26 27 C file1
27 28 file1:
28 29 1
29 30 changed
30 31 file2 does not exist
31 32
32 33 # interactive merge with bad input
33 34 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
34 35 local changed file1 which remote deleted
35 36 use (c)hanged version or (d)elete? unrecognized response
36 37 local changed file1 which remote deleted
37 38 use (c)hanged version or (d)elete? unrecognized response
38 39 local changed file1 which remote deleted
39 40 use (c)hanged version or (d)elete? remote changed file2 which local deleted
40 41 use (c)hanged version or leave (d)eleted? unrecognized response
41 42 remote changed file2 which local deleted
42 43 use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
43 44 (branch merge, don't forget to commit)
44 45 status:
45 46 M file2
46 47 R file1
47 48 file1 does not exist
48 49 file2:
49 50 2
50 51 changed
51 52
52 53 # interactive merge with not enough input
53 54 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
54 55 local changed file1 which remote deleted
55 56 use (c)hanged version or (d)elete? remote changed file2 which local deleted
56 57 use (c)hanged version or leave (d)eleted? abort: response expected
57 58 failed
58 59 status:
59 60 file2: No such file or directory
60 61 C file1
61 62 file1:
62 63 1
63 64 changed
64 65 file2 does not exist
@@ -1,36 +1,37 b''
1 created new head
1 2 merging foo1 and foo
2 3 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
3 4 (branch merge, don't forget to commit)
4 5 n 0 -2 bar
5 6 m 644 14 foo1
6 7 copy: foo -> foo1
7 8 M bar
8 9 M foo1
9 10 % removing foo1 and bar
10 11 r 0 -2 bar
11 12 r 0 -1 foo1
12 13 copy: foo -> foo1
13 14 R bar
14 15 R foo1
15 16 foo
16 17 % readding foo1 and bar
17 18 adding bar
18 19 adding foo1
19 20 n 0 -2 bar
20 21 m 644 14 foo1
21 22 copy: foo -> foo1
22 23 M bar
23 24 M foo1
24 25 foo
25 26 % reverting foo1 and bar
26 27 warning: working directory has two parents, tag '.' uses the first
27 28 saving current version of bar as bar.orig
28 29 reverting bar
29 30 saving current version of foo1 as foo1.orig
30 31 reverting foo1
31 32 n 0 -2 bar
32 33 m 644 14 foo1
33 34 copy: foo -> foo1
34 35 M bar
35 36 M foo1
36 37 foo
@@ -1,22 +1,23 b''
1 1 adding a
2 2 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 created new head
3 4 resolving manifests
4 5 overwrite None partial False
5 6 ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
6 7 searching for copies back to rev 1
7 8 a: update permissions -> e
8 9 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
9 10 (branch merge, don't forget to commit)
10 11 % symlink is local parent, executable is other
11 12 a has no flags (default for conflicts)
12 13 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
13 14 resolving manifests
14 15 overwrite None partial False
15 16 ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
16 17 searching for copies back to rev 1
17 18 a: remote is newer -> g
18 19 getting a
19 20 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
20 21 (branch merge, don't forget to commit)
21 22 % symlink is other parent, executable is local
22 23 a has no flags (default for conflicts)
@@ -1,55 +1,59 b''
1 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2 created new head
2 3 %% no merges expected
3 4 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 5 (branch merge, don't forget to commit)
5 6 diff -r d9e5953b9dec b
6 7 --- /dev/null
7 8 +++ b/b
8 9 @@ -0,0 +1,1 @@
9 10 +This is file b1
10 11 M b
11 12 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
13 created new head
12 14 %% merge should fail
13 15 abort: untracked file in working directory differs from file in requested revision: 'b'
14 16 %% merge of b expected
15 17 merging for b
16 18 merging b
17 19 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
18 20 (branch merge, don't forget to commit)
19 21 diff -r d9e5953b9dec b
20 22 --- /dev/null
21 23 +++ b/b
22 24 @@ -0,0 +1,1 @@
23 25 +This is file b2
24 26 M b
25 27 %%
26 28 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
29 created new head
27 30 Contents of b should be "this is file b1"
28 31 This is file b1
29 32 %% merge fails
30 33 abort: outstanding uncommitted changes
31 34 %% merge expected!
32 35 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
33 36 (branch merge, don't forget to commit)
34 37 diff -r c1dd73cbf59f b
35 38 --- a/b
36 39 +++ b/b
37 40 @@ -1,1 +1,1 @@
38 41 -This is file b1
39 42 +This is file b22
40 43 M b
41 44 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
45 created new head
42 46 %% merge of b should fail
43 47 abort: outstanding uncommitted changes
44 48 %% merge of b expected
45 49 merging for b
46 50 merging b
47 51 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
48 52 (branch merge, don't forget to commit)
49 53 diff -r c1dd73cbf59f b
50 54 --- a/b
51 55 +++ b/b
52 56 @@ -1,1 +1,1 @@
53 57 -This is file b1
54 58 +This is file b33
55 59 M b
@@ -1,5 +1,8 b''
1 1 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 3 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 4 adding b
5 created new head
4 6 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 7 adding b
8 created new head
@@ -1,3 +1,4 b''
1 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2 created new head
2 3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 4 (branch merge, don't forget to commit)
@@ -1,3 +1,4 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 2 removing b
3 created new head
3 4 abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes
@@ -1,19 +1,20 b''
1 1 adding bar
2 2 adding foo
3 3 adding quux1
4 4 adding quux2
5 created new head
5 6 merging bar
6 7 merging bar failed!
7 8 merging foo and baz
8 9 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
9 10 There are unresolved merges, you can redo the full merge using:
10 11 hg update -C 2
11 12 hg merge 1
12 13 3 files updated, 0 files merged, 1 files removed, 0 files unresolved
13 14 merging bar
14 15 merging bar failed!
15 16 merging baz and foo
16 17 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
17 18 There are unresolved merges, you can redo the full merge using:
18 19 hg update -C 1
19 20 hg merge 2
@@ -1,12 +1,13 b''
1 1 adding a
2 2 adding b
3 3 copy .hg/patches to .hg/patches.1
4 4 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 5 M b
6 created new head
6 7 a
7 8 b
8 9 merging with queue at: .hg/patches.1
9 10 applying rm_a
10 11 Now at: rm_a
11 12 b
12 13 Patch queue now empty
@@ -1,479 +1,481 b''
1 1 % help
2 2 mq extension - patch management and development
3 3
4 4 This extension lets you work with a stack of patches in a Mercurial
5 5 repository. It manages two stacks of patches - all known patches, and
6 6 applied patches (subset of known patches).
7 7
8 8 Known patches are represented as patch files in the .hg/patches
9 9 directory. Applied patches are both patch files and changesets.
10 10
11 11 Common tasks (use "hg help command" for more details):
12 12
13 13 prepare repository to work with patches qinit
14 14 create new patch qnew
15 15 import existing patch qimport
16 16
17 17 print patch series qseries
18 18 print applied patches qapplied
19 19 print name of top applied patch qtop
20 20
21 21 add known patch to applied stack qpush
22 22 remove patch from applied stack qpop
23 23 refresh contents of top applied patch qrefresh
24 24
25 25 list of commands:
26 26
27 27 qapplied print the patches already applied
28 28 qclone clone main and patch repository at same time
29 29 qcommit commit changes in the queue repository
30 30 qdelete remove patches from queue
31 31 qdiff diff of the current patch
32 32 qfold fold the named patches into the current patch
33 33 qgoto push or pop patches until named patch is at top of stack
34 34 qguard set or print guards for a patch
35 35 qheader Print the header of the topmost or specified patch
36 36 qimport import a patch
37 37 qinit init a new queue repository
38 38 qnew create a new patch
39 39 qnext print the name of the next patch
40 40 qpop pop the current patch off the stack
41 41 qprev print the name of the previous patch
42 42 qpush push the next patch onto the stack
43 43 qrefresh update the current patch
44 44 qrename rename a patch
45 45 qrestore restore the queue state saved by a rev
46 46 qsave save current queue state
47 47 qselect set or print guarded patches to push
48 48 qseries print the entire series file
49 49 qtop print the name of the current patch
50 50 qunapplied print the patches not yet applied
51 51 strip strip a revision and all later revs on the same branch
52 52
53 53 use "hg -v help mq" to show aliases and global options
54 54 adding a
55 55 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
56 56 adding b/z
57 57 % qinit
58 58 % -R qinit
59 59 % qinit -c
60 60 A .hgignore
61 61 A series
62 62 % qnew should refuse bad patch names
63 63 abort: "series" cannot be used as the name of a patch
64 64 abort: "status" cannot be used as the name of a patch
65 65 abort: "guards" cannot be used as the name of a patch
66 66 abort: ".hgignore" cannot be used as the name of a patch
67 67 % qnew implies add
68 68 A .hgignore
69 69 A series
70 70 A test.patch
71 71 % qinit; qinit -c
72 72 .hgignore:
73 73 ^\.hg
74 74 ^\.mq
75 75 syntax: glob
76 76 status
77 77 guards
78 78 series:
79 79 abort: repository already exists!
80 80 % qinit; <stuff>; qinit -c
81 81 adding .hg/patches/A
82 82 adding .hg/patches/B
83 83 A .hgignore
84 84 A A
85 85 A B
86 86 A series
87 87 .hgignore:
88 88 status
89 89 bleh
90 90 series:
91 91 A
92 92 B
93 93 % qnew with uncommitted changes
94 94 abort: local changes found, refresh first
95 95 A somefile
96 96 % qnew with uncommitted changes and missing file (issue 803)
97 97 someotherfile: No such file or directory
98 98 A somefile
99 99 issue803.patch
100 100 Patch queue now empty
101 101 % qnew -m
102 102 foo bar
103 103 % qrefresh
104 104 foo bar
105 105
106 106 diff -r xa
107 107 --- a/a
108 108 +++ b/a
109 109 @@ -1,1 +1,2 @@
110 110 a
111 111 +a
112 112 % empty qrefresh
113 113 revision:
114 114 patch:
115 115 foo bar
116 116
117 117 working dir diff:
118 118 --- a/a
119 119 +++ b/a
120 120 @@ -1,1 +1,2 @@
121 121 a
122 122 +a
123 123 % qpop
124 124 Patch queue now empty
125 125 % qpush
126 126 applying test.patch
127 127 Now at: test.patch
128 128 % pop/push outside repo
129 129 Patch queue now empty
130 130 applying test.patch
131 131 Now at: test.patch
132 132 % qrefresh in subdir
133 133 % pop/push -a in subdir
134 134 Patch queue now empty
135 135 applying test.patch
136 136 applying test2.patch
137 137 Now at: test2.patch
138 138 % qseries
139 139 test.patch
140 140 test2.patch
141 141 Now at: test.patch
142 142 0 A test.patch: foo bar
143 143 1 U test2.patch:
144 144 applying test2.patch
145 145 Now at: test2.patch
146 146 % qapplied
147 147 test.patch
148 148 test2.patch
149 149 % qtop
150 150 test2.patch
151 151 % qprev
152 152 test.patch
153 153 % qnext
154 154 All patches applied
155 155 % pop, qnext, qprev, qapplied
156 156 Now at: test.patch
157 157 test2.patch
158 158 Only one patch applied
159 159 test.patch
160 160 % commit should fail
161 161 abort: cannot commit over an applied mq patch
162 162 % push should fail
163 163 pushing to ../../k
164 164 abort: source has mq patches applied
165 165 % qunapplied
166 166 test2.patch
167 167 % qpush/qpop with index
168 168 applying test2.patch
169 169 Now at: test2.patch
170 170 Now at: test.patch
171 171 applying test1b.patch
172 172 Now at: test1b.patch
173 173 applying test2.patch
174 174 Now at: test2.patch
175 175 Now at: test1b.patch
176 176 Now at: test.patch
177 177 applying test1b.patch
178 178 applying test2.patch
179 179 Now at: test2.patch
180 180 % push should succeed
181 181 Patch queue now empty
182 182 pushing to ../../k
183 183 searching for changes
184 184 adding changesets
185 185 adding manifests
186 186 adding file changes
187 187 added 1 changesets with 1 changes to 1 files
188 188 % qpush/qpop error codes
189 189 applying test.patch
190 190 applying test1b.patch
191 191 applying test2.patch
192 192 Now at: test2.patch
193 193 % pops all patches and succeeds
194 194 Patch queue now empty
195 195 qpop -a succeeds
196 196 % does nothing and succeeds
197 197 no patches applied
198 198 qpop -a succeeds
199 199 % fails - nothing else to pop
200 200 no patches applied
201 201 qpop fails
202 202 % pushes a patch and succeeds
203 203 applying test.patch
204 204 Now at: test.patch
205 205 qpush succeeds
206 206 % pops a patch and succeeds
207 207 Patch queue now empty
208 208 qpop succeeds
209 209 % pushes up to test1b.patch and succeeds
210 210 applying test.patch
211 211 applying test1b.patch
212 212 Now at: test1b.patch
213 213 qpush test1b.patch succeeds
214 214 % does nothing and succeeds
215 215 qpush: test1b.patch is already at the top
216 216 qpush test1b.patch succeeds
217 217 % does nothing and succeeds
218 218 qpop: test1b.patch is already at the top
219 219 qpop test1b.patch succeeds
220 220 % fails - can't push to this patch
221 221 abort: cannot push to a previous patch: test.patch
222 222 qpush test.patch fails
223 223 % fails - can't pop to this patch
224 224 abort: patch test2.patch is not applied
225 225 qpop test2.patch fails
226 226 % pops up to test.patch and succeeds
227 227 Now at: test.patch
228 228 qpop test.patch succeeds
229 229 % pushes all patches and succeeds
230 230 applying test1b.patch
231 231 applying test2.patch
232 232 Now at: test2.patch
233 233 qpush -a succeeds
234 234 % does nothing and succeeds
235 235 all patches are currently applied
236 236 qpush -a succeeds
237 237 % fails - nothing else to push
238 238 patch series already fully applied
239 239 qpush fails
240 240 % does nothing and succeeds
241 241 all patches are currently applied
242 242 qpush test2.patch succeeds
243 243 % strip
244 244 adding x
245 245 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
246 246 saving bundle to
247 247 adding changesets
248 248 adding manifests
249 249 adding file changes
250 250 added 1 changesets with 1 changes to 1 files
251 251 (run 'hg update' to get a working copy)
252 252 % cd b; hg qrefresh
253 253 adding a
254 254 foo
255 255
256 256 diff -r cb9a9f314b8b a
257 257 --- a/a
258 258 +++ b/a
259 259 @@ -1,1 +1,2 @@
260 260 a
261 261 +a
262 262 diff -r cb9a9f314b8b b/f
263 263 --- /dev/null
264 264 +++ b/b/f
265 265 @@ -0,0 +1,1 @@
266 266 +f
267 267 % hg qrefresh .
268 268 foo
269 269
270 270 diff -r cb9a9f314b8b b/f
271 271 --- /dev/null
272 272 +++ b/b/f
273 273 @@ -0,0 +1,1 @@
274 274 +f
275 275 M a
276 276 % qpush failure
277 277 Patch queue now empty
278 278 applying foo
279 279 applying bar
280 280 file foo already exists
281 281 1 out of 1 hunk FAILED -- saving rejects to file foo.rej
282 282 patch failed, unable to continue (try -v)
283 283 patch failed, rejects left in working dir
284 284 Errors during apply, please fix and refresh bar
285 285 ? foo
286 286 ? foo.rej
287 287 % mq tags
288 288 0 qparent
289 289 1 qbase foo
290 290 2 qtip bar tip
291 291 % bad node in status
292 292 Now at: foo
293 293 changeset: 0:cb9a9f314b8b
294 294 mq status file refers to unknown node
295 295 tag: tip
296 296 user: test
297 297 date: Thu Jan 01 00:00:00 1970 +0000
298 298 summary: a
299 299
300 300 mq status file refers to unknown node
301 301 default 0:cb9a9f314b8b
302 302 abort: working directory revision is not qtip
303 303 new file
304 304
305 305 diff --git a/new b/new
306 306 new file mode 100755
307 307 --- /dev/null
308 308 +++ b/new
309 309 @@ -0,0 +1,1 @@
310 310 +foo
311 311 copy file
312 312
313 313 diff --git a/new b/copy
314 314 copy from new
315 315 copy to copy
316 316 Now at: new
317 317 applying copy
318 318 Now at: copy
319 319 diff --git a/new b/copy
320 320 copy from new
321 321 copy to copy
322 322 diff --git a/new b/copy
323 323 copy from new
324 324 copy to copy
325 325 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
326 created new head
326 327 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
327 328 adding branch
328 329 adding changesets
329 330 adding manifests
330 331 adding file changes
331 332 added 1 changesets with 1 changes to 1 files
332 333 Patch queue now empty
333 334 applying bar
334 335 Now at: bar
335 336 diff --git a/bar b/bar
336 337 new file mode 100644
337 338 --- /dev/null
338 339 +++ b/bar
339 340 @@ -0,0 +1,1 @@
340 341 +bar
341 342 diff --git a/foo b/baz
342 343 rename from foo
343 344 rename to baz
344 345 2 baz (foo)
345 346 diff --git a/bar b/bar
346 347 new file mode 100644
347 348 --- /dev/null
348 349 +++ b/bar
349 350 @@ -0,0 +1,1 @@
350 351 +bar
351 352 diff --git a/foo b/baz
352 353 rename from foo
353 354 rename to baz
354 355 2 baz (foo)
355 356 diff --git a/bar b/bar
356 357 diff --git a/foo b/baz
357 358
358 359 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
359 360 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
360 361 adding branch
361 362 adding changesets
362 363 adding manifests
363 364 adding file changes
364 365 added 1 changesets with 1 changes to 1 files
365 366 Patch queue now empty
366 367 applying bar
367 368 Now at: bar
368 369 diff --git a/foo b/bleh
369 370 rename from foo
370 371 rename to bleh
371 372 diff --git a/quux b/quux
372 373 new file mode 100644
373 374 --- /dev/null
374 375 +++ b/quux
375 376 @@ -0,0 +1,1 @@
376 377 +bar
377 378 3 bleh (foo)
378 379 diff --git a/foo b/barney
379 380 rename from foo
380 381 rename to barney
381 382 diff --git a/fred b/fred
382 383 new file mode 100644
383 384 --- /dev/null
384 385 +++ b/fred
385 386 @@ -0,0 +1,1 @@
386 387 +bar
387 388 3 barney (foo)
388 389 % refresh omitting an added file
389 390 C newfile
390 391 A newfile
391 392 Now at: bar
392 393 % create a git patch
393 394 diff --git a/alexander b/alexander
394 395 % create a git binary patch
395 396 8ba2a2f3e77b55d03051ff9c24ad65e7 bucephalus
396 397 diff --git a/bucephalus b/bucephalus
397 398 % check binary patches can be popped and pushed
398 399 Now at: addalexander
399 400 applying addbucephalus
400 401 Now at: addbucephalus
401 402 8ba2a2f3e77b55d03051ff9c24ad65e7 bucephalus
402 403 % strip again
403 404 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
405 created new head
404 406 merging foo
405 407 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
406 408 (branch merge, don't forget to commit)
407 409 changeset: 3:99615015637b
408 410 tag: tip
409 411 parent: 2:20cbbe65cff7
410 412 parent: 1:d2871fc282d4
411 413 user: test
412 414 date: Thu Jan 01 00:00:00 1970 +0000
413 415 summary: merge
414 416
415 417 changeset: 2:20cbbe65cff7
416 418 parent: 0:53245c60e682
417 419 user: test
418 420 date: Thu Jan 01 00:00:00 1970 +0000
419 421 summary: change foo 2
420 422
421 423 changeset: 1:d2871fc282d4
422 424 user: test
423 425 date: Thu Jan 01 00:00:00 1970 +0000
424 426 summary: change foo 1
425 427
426 428 changeset: 0:53245c60e682
427 429 user: test
428 430 date: Thu Jan 01 00:00:00 1970 +0000
429 431 summary: add foo
430 432
431 433 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
432 434 saving bundle to
433 435 saving bundle to
434 436 adding branch
435 437 adding changesets
436 438 adding manifests
437 439 adding file changes
438 440 added 1 changesets with 1 changes to 1 files
439 441 changeset: 1:20cbbe65cff7
440 442 tag: tip
441 443 user: test
442 444 date: Thu Jan 01 00:00:00 1970 +0000
443 445 summary: change foo 2
444 446
445 447 changeset: 0:53245c60e682
446 448 user: test
447 449 date: Thu Jan 01 00:00:00 1970 +0000
448 450 summary: add foo
449 451
450 452 % qclone
451 453 abort: versioned patch repository not found (see qinit -c)
452 454 adding .hg/patches/patch1
453 455 main repo:
454 456 rev 1: change foo
455 457 rev 0: add foo
456 458 patch repo:
457 459 rev 0: checkpoint
458 460 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
459 461 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
460 462 main repo:
461 463 rev 0: add foo
462 464 patch repo:
463 465 rev 0: checkpoint
464 466 Patch queue now empty
465 467 main repo:
466 468 rev 0: add foo
467 469 patch repo:
468 470 rev 0: checkpoint
469 471 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
470 472 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
471 473 main repo:
472 474 rev 0: add foo
473 475 patch repo:
474 476 rev 0: checkpoint
475 477 % test applying on an empty file (issue 1033)
476 478 adding a
477 479 Patch queue now empty
478 480 applying changea
479 481 Now at: changea
@@ -1,895 +1,902 b''
1 created new head
1 2 ** rename in working dir **
2 3 ** add a a1 / add a a2 / hg mv a b
3 4 - working to parent:
4 5 A b
5 6 a
6 7 R a
7 8
8 9 diff --git a/a b/b
9 10 rename from a
10 11 rename to b
11 12
12 13 - working to root: --rev 0
13 14 A b
14 15 a
15 16 R a
16 17
17 18 diff --git a/a b/b
18 19 rename from a
19 20 rename to b
20 21 --- a/a
21 22 +++ b/b
22 23 @@ -1,1 +1,4 @@
23 24 a
24 25 +0
25 26 +a1
26 27 +a2
27 28
28 29 - working to branch: --rev 2
29 30 A b
30 31 a
31 32 R a
32 33
33 34 diff --git a/a b/b
34 35 rename from a
35 36 rename to b
36 37 --- a/a
37 38 +++ b/b
38 39 @@ -1,3 +1,4 @@
39 40 a
40 41 -m1
41 42 -m2
42 43 +0
43 44 +a1
44 45 +a2
45 46
46 47 - root to parent: --rev 0 --rev .
47 48 M a
48 49
49 50 diff --git a/a b/a
50 51 --- a/a
51 52 +++ b/a
52 53 @@ -1,1 +1,4 @@
53 54 a
54 55 +0
55 56 +a1
56 57 +a2
57 58
58 59 - parent to root: --rev . --rev 0
59 60 M a
60 61
61 62 diff --git a/a b/a
62 63 --- a/a
63 64 +++ b/a
64 65 @@ -1,4 +1,1 @@
65 66 a
66 67 -0
67 68 -a1
68 69 -a2
69 70
70 71 - branch to parent: --rev 2 --rev .
71 72 M a
72 73
73 74 diff --git a/a b/a
74 75 --- a/a
75 76 +++ b/a
76 77 @@ -1,3 +1,4 @@
77 78 a
78 79 -m1
79 80 -m2
80 81 +0
81 82 +a1
82 83 +a2
83 84
84 85 - parent to branch: --rev . --rev 2
85 86 M a
86 87
87 88 diff --git a/a b/a
88 89 --- a/a
89 90 +++ b/a
90 91 @@ -1,4 +1,3 @@
91 92 a
92 93 -0
93 94 -a1
94 95 -a2
95 96 +m1
96 97 +m2
97 98
98 99
100 created new head
99 101 ** copy in working dir **
100 102 ** add a a1 / add a a2 / hg cp a b
101 103 - working to parent:
102 104 A b
103 105 a
104 106
105 107 diff --git a/a b/b
106 108 copy from a
107 109 copy to b
108 110
109 111 - working to root: --rev 0
110 112 M a
111 113 A b
112 114 a
113 115
114 116 diff --git a/a b/a
115 117 --- a/a
116 118 +++ b/a
117 119 @@ -1,1 +1,4 @@
118 120 a
119 121 +1
120 122 +a1
121 123 +a2
122 124 diff --git a/a b/b
123 125 copy from a
124 126 copy to b
125 127 --- a/a
126 128 +++ b/b
127 129 @@ -1,1 +1,4 @@
128 130 a
129 131 +1
130 132 +a1
131 133 +a2
132 134
133 135 - working to branch: --rev 2
134 136 M a
135 137 A b
136 138 a
137 139
138 140 diff --git a/a b/a
139 141 --- a/a
140 142 +++ b/a
141 143 @@ -1,3 +1,4 @@
142 144 a
143 145 -m1
144 146 -m2
145 147 +1
146 148 +a1
147 149 +a2
148 150 diff --git a/a b/b
149 151 copy from a
150 152 copy to b
151 153 --- a/a
152 154 +++ b/b
153 155 @@ -1,3 +1,4 @@
154 156 a
155 157 -m1
156 158 -m2
157 159 +1
158 160 +a1
159 161 +a2
160 162
161 163 - root to parent: --rev 0 --rev .
162 164 M a
163 165
164 166 diff --git a/a b/a
165 167 --- a/a
166 168 +++ b/a
167 169 @@ -1,1 +1,4 @@
168 170 a
169 171 +1
170 172 +a1
171 173 +a2
172 174
173 175 - parent to root: --rev . --rev 0
174 176 M a
175 177
176 178 diff --git a/a b/a
177 179 --- a/a
178 180 +++ b/a
179 181 @@ -1,4 +1,1 @@
180 182 a
181 183 -1
182 184 -a1
183 185 -a2
184 186
185 187 - branch to parent: --rev 2 --rev .
186 188 M a
187 189
188 190 diff --git a/a b/a
189 191 --- a/a
190 192 +++ b/a
191 193 @@ -1,3 +1,4 @@
192 194 a
193 195 -m1
194 196 -m2
195 197 +1
196 198 +a1
197 199 +a2
198 200
199 201 - parent to branch: --rev . --rev 2
200 202 M a
201 203
202 204 diff --git a/a b/a
203 205 --- a/a
204 206 +++ b/a
205 207 @@ -1,4 +1,3 @@
206 208 a
207 209 -1
208 210 -a1
209 211 -a2
210 212 +m1
211 213 +m2
212 214
213 215
216 created new head
214 217 ** single rename **
215 218 ** hg mv a b / add b b1 / add b w
216 219 - working to parent:
217 220 M b
218 221
219 222 diff --git a/b b/b
220 223 --- a/b
221 224 +++ b/b
222 225 @@ -1,3 +1,4 @@
223 226 a
224 227 2
225 228 b1
226 229 +w
227 230
228 231 - working to root: --rev 0
229 232 A b
230 233 a
231 234 R a
232 235
233 236 diff --git a/a b/b
234 237 rename from a
235 238 rename to b
236 239 --- a/a
237 240 +++ b/b
238 241 @@ -1,1 +1,4 @@
239 242 a
240 243 +2
241 244 +b1
242 245 +w
243 246
244 247 - working to branch: --rev 2
245 248 A b
246 249 a
247 250 R a
248 251
249 252 diff --git a/a b/b
250 253 rename from a
251 254 rename to b
252 255 --- a/a
253 256 +++ b/b
254 257 @@ -1,3 +1,4 @@
255 258 a
256 259 -m1
257 260 -m2
258 261 +2
259 262 +b1
260 263 +w
261 264
262 265 - root to parent: --rev 0 --rev .
263 266 A b
264 267 a
265 268 R a
266 269
267 270 diff --git a/a b/b
268 271 rename from a
269 272 rename to b
270 273 --- a/a
271 274 +++ b/b
272 275 @@ -1,1 +1,3 @@
273 276 a
274 277 +2
275 278 +b1
276 279
277 280 - parent to root: --rev . --rev 0
278 281 A a
279 282 b
280 283 R b
281 284
282 285 diff --git a/b b/a
283 286 rename from b
284 287 rename to a
285 288 --- a/b
286 289 +++ b/a
287 290 @@ -1,3 +1,1 @@
288 291 a
289 292 -2
290 293 -b1
291 294
292 295 - branch to parent: --rev 2 --rev .
293 296 A b
294 297 a
295 298 R a
296 299
297 300 diff --git a/a b/b
298 301 rename from a
299 302 rename to b
300 303 --- a/a
301 304 +++ b/b
302 305 @@ -1,3 +1,3 @@
303 306 a
304 307 -m1
305 308 -m2
306 309 +2
307 310 +b1
308 311
309 312 - parent to branch: --rev . --rev 2
310 313 A a
311 314 b
312 315 R b
313 316
314 317 diff --git a/b b/a
315 318 rename from b
316 319 rename to a
317 320 --- a/b
318 321 +++ b/a
319 322 @@ -1,3 +1,3 @@
320 323 a
321 324 -2
322 325 -b1
323 326 +m1
324 327 +m2
325 328
326 329
330 created new head
327 331 ** single copy **
328 332 ** hg cp a b / add b b1 / add a w
329 333 - working to parent:
330 334 M a
331 335
332 336 diff --git a/a b/a
333 337 --- a/a
334 338 +++ b/a
335 339 @@ -1,2 +1,3 @@
336 340 a
337 341 3
338 342 +w
339 343
340 344 - working to root: --rev 0
341 345 M a
342 346 A b
343 347 a
344 348
345 349 diff --git a/a b/a
346 350 --- a/a
347 351 +++ b/a
348 352 @@ -1,1 +1,3 @@
349 353 a
350 354 +3
351 355 +w
352 356 diff --git a/a b/b
353 357 copy from a
354 358 copy to b
355 359 --- a/a
356 360 +++ b/b
357 361 @@ -1,1 +1,3 @@
358 362 a
359 363 +3
360 364 +b1
361 365
362 366 - working to branch: --rev 2
363 367 M a
364 368 A b
365 369 a
366 370
367 371 diff --git a/a b/a
368 372 --- a/a
369 373 +++ b/a
370 374 @@ -1,3 +1,3 @@
371 375 a
372 376 -m1
373 377 -m2
374 378 +3
375 379 +w
376 380 diff --git a/a b/b
377 381 copy from a
378 382 copy to b
379 383 --- a/a
380 384 +++ b/b
381 385 @@ -1,3 +1,3 @@
382 386 a
383 387 -m1
384 388 -m2
385 389 +3
386 390 +b1
387 391
388 392 - root to parent: --rev 0 --rev .
389 393 M a
390 394 A b
391 395 a
392 396
393 397 diff --git a/a b/a
394 398 --- a/a
395 399 +++ b/a
396 400 @@ -1,1 +1,2 @@
397 401 a
398 402 +3
399 403 diff --git a/a b/b
400 404 copy from a
401 405 copy to b
402 406 --- a/a
403 407 +++ b/b
404 408 @@ -1,1 +1,3 @@
405 409 a
406 410 +3
407 411 +b1
408 412
409 413 - parent to root: --rev . --rev 0
410 414 M a
411 415 R b
412 416
413 417 diff --git a/a b/a
414 418 --- a/a
415 419 +++ b/a
416 420 @@ -1,2 +1,1 @@
417 421 a
418 422 -3
419 423 diff --git a/b b/b
420 424 deleted file mode 100644
421 425 --- a/b
422 426 +++ /dev/null
423 427 @@ -1,3 +0,0 @@
424 428 -a
425 429 -3
426 430 -b1
427 431
428 432 - branch to parent: --rev 2 --rev .
429 433 M a
430 434 A b
431 435 a
432 436
433 437 diff --git a/a b/a
434 438 --- a/a
435 439 +++ b/a
436 440 @@ -1,3 +1,2 @@
437 441 a
438 442 -m1
439 443 -m2
440 444 +3
441 445 diff --git a/a b/b
442 446 copy from a
443 447 copy to b
444 448 --- a/a
445 449 +++ b/b
446 450 @@ -1,3 +1,3 @@
447 451 a
448 452 -m1
449 453 -m2
450 454 +3
451 455 +b1
452 456
453 457 - parent to branch: --rev . --rev 2
454 458 M a
455 459 R b
456 460
457 461 diff --git a/a b/a
458 462 --- a/a
459 463 +++ b/a
460 464 @@ -1,2 +1,3 @@
461 465 a
462 466 -3
463 467 +m1
464 468 +m2
465 469 diff --git a/b b/b
466 470 deleted file mode 100644
467 471 --- a/b
468 472 +++ /dev/null
469 473 @@ -1,3 +0,0 @@
470 474 -a
471 475 -3
472 476 -b1
473 477
474 478
479 created new head
475 480 ** rename chain **
476 481 ** hg mv a b / hg mv b c / hg mv c d
477 482 - working to parent:
478 483 A d
479 484 c
480 485 R c
481 486
482 487 diff --git a/c b/d
483 488 rename from c
484 489 rename to d
485 490
486 491 - working to root: --rev 0
487 492 A d
488 493 a
489 494 R a
490 495
491 496 diff --git a/a b/d
492 497 rename from a
493 498 rename to d
494 499 --- a/a
495 500 +++ b/d
496 501 @@ -1,1 +1,2 @@
497 502 a
498 503 +4
499 504
500 505 - working to branch: --rev 2
501 506 A d
502 507 a
503 508 R a
504 509
505 510 diff --git a/a b/d
506 511 rename from a
507 512 rename to d
508 513 --- a/a
509 514 +++ b/d
510 515 @@ -1,3 +1,2 @@
511 516 a
512 517 -m1
513 518 -m2
514 519 +4
515 520
516 521 - root to parent: --rev 0 --rev .
517 522 A c
518 523 a
519 524 R a
520 525
521 526 diff --git a/a b/c
522 527 rename from a
523 528 rename to c
524 529 --- a/a
525 530 +++ b/c
526 531 @@ -1,1 +1,2 @@
527 532 a
528 533 +4
529 534
530 535 - parent to root: --rev . --rev 0
531 536 A a
532 537 c
533 538 R c
534 539
535 540 diff --git a/c b/a
536 541 rename from c
537 542 rename to a
538 543 --- a/c
539 544 +++ b/a
540 545 @@ -1,2 +1,1 @@
541 546 a
542 547 -4
543 548
544 549 - branch to parent: --rev 2 --rev .
545 550 A c
546 551 a
547 552 R a
548 553
549 554 diff --git a/a b/c
550 555 rename from a
551 556 rename to c
552 557 --- a/a
553 558 +++ b/c
554 559 @@ -1,3 +1,2 @@
555 560 a
556 561 -m1
557 562 -m2
558 563 +4
559 564
560 565 - parent to branch: --rev . --rev 2
561 566 A a
562 567 c
563 568 R c
564 569
565 570 diff --git a/c b/a
566 571 rename from c
567 572 rename to a
568 573 --- a/c
569 574 +++ b/a
570 575 @@ -1,2 +1,3 @@
571 576 a
572 577 -4
573 578 +m1
574 579 +m2
575 580
576 581
582 created new head
577 583 ** copy chain **
578 584 ** hg cp a b / hg cp b c / hg cp c d
579 585 - working to parent:
580 586 A d
581 587 c
582 588
583 589 diff --git a/c b/d
584 590 copy from c
585 591 copy to d
586 592
587 593 - working to root: --rev 0
588 594 M a
589 595 A b
590 596 a
591 597 A c
592 598 a
593 599 A d
594 600 a
595 601
596 602 diff --git a/a b/a
597 603 --- a/a
598 604 +++ b/a
599 605 @@ -1,1 +1,2 @@
600 606 a
601 607 +5
602 608 diff --git a/a b/b
603 609 copy from a
604 610 copy to b
605 611 --- a/a
606 612 +++ b/b
607 613 @@ -1,1 +1,2 @@
608 614 a
609 615 +5
610 616 diff --git a/a b/c
611 617 copy from a
612 618 copy to c
613 619 --- a/a
614 620 +++ b/c
615 621 @@ -1,1 +1,2 @@
616 622 a
617 623 +5
618 624 diff --git a/a b/d
619 625 copy from a
620 626 copy to d
621 627 --- a/a
622 628 +++ b/d
623 629 @@ -1,1 +1,2 @@
624 630 a
625 631 +5
626 632
627 633 - working to branch: --rev 2
628 634 M a
629 635 A b
630 636 a
631 637 A c
632 638 a
633 639 A d
634 640 a
635 641
636 642 diff --git a/a b/a
637 643 --- a/a
638 644 +++ b/a
639 645 @@ -1,3 +1,2 @@
640 646 a
641 647 -m1
642 648 -m2
643 649 +5
644 650 diff --git a/a b/b
645 651 copy from a
646 652 copy to b
647 653 --- a/a
648 654 +++ b/b
649 655 @@ -1,3 +1,2 @@
650 656 a
651 657 -m1
652 658 -m2
653 659 +5
654 660 diff --git a/a b/c
655 661 copy from a
656 662 copy to c
657 663 --- a/a
658 664 +++ b/c
659 665 @@ -1,3 +1,2 @@
660 666 a
661 667 -m1
662 668 -m2
663 669 +5
664 670 diff --git a/a b/d
665 671 copy from a
666 672 copy to d
667 673 --- a/a
668 674 +++ b/d
669 675 @@ -1,3 +1,2 @@
670 676 a
671 677 -m1
672 678 -m2
673 679 +5
674 680
675 681 - root to parent: --rev 0 --rev .
676 682 M a
677 683 A b
678 684 a
679 685 A c
680 686 a
681 687
682 688 diff --git a/a b/a
683 689 --- a/a
684 690 +++ b/a
685 691 @@ -1,1 +1,2 @@
686 692 a
687 693 +5
688 694 diff --git a/a b/b
689 695 copy from a
690 696 copy to b
691 697 --- a/a
692 698 +++ b/b
693 699 @@ -1,1 +1,2 @@
694 700 a
695 701 +5
696 702 diff --git a/a b/c
697 703 copy from a
698 704 copy to c
699 705 --- a/a
700 706 +++ b/c
701 707 @@ -1,1 +1,2 @@
702 708 a
703 709 +5
704 710
705 711 - parent to root: --rev . --rev 0
706 712 M a
707 713 R b
708 714 R c
709 715
710 716 diff --git a/a b/a
711 717 --- a/a
712 718 +++ b/a
713 719 @@ -1,2 +1,1 @@
714 720 a
715 721 -5
716 722 diff --git a/b b/b
717 723 deleted file mode 100644
718 724 --- a/b
719 725 +++ /dev/null
720 726 @@ -1,2 +0,0 @@
721 727 -a
722 728 -5
723 729 diff --git a/c b/c
724 730 deleted file mode 100644
725 731 --- a/c
726 732 +++ /dev/null
727 733 @@ -1,2 +0,0 @@
728 734 -a
729 735 -5
730 736
731 737 - branch to parent: --rev 2 --rev .
732 738 M a
733 739 A b
734 740 a
735 741 A c
736 742 a
737 743
738 744 diff --git a/a b/a
739 745 --- a/a
740 746 +++ b/a
741 747 @@ -1,3 +1,2 @@
742 748 a
743 749 -m1
744 750 -m2
745 751 +5
746 752 diff --git a/a b/b
747 753 copy from a
748 754 copy to b
749 755 --- a/a
750 756 +++ b/b
751 757 @@ -1,3 +1,2 @@
752 758 a
753 759 -m1
754 760 -m2
755 761 +5
756 762 diff --git a/a b/c
757 763 copy from a
758 764 copy to c
759 765 --- a/a
760 766 +++ b/c
761 767 @@ -1,3 +1,2 @@
762 768 a
763 769 -m1
764 770 -m2
765 771 +5
766 772
767 773 - parent to branch: --rev . --rev 2
768 774 M a
769 775 R b
770 776 R c
771 777
772 778 diff --git a/a b/a
773 779 --- a/a
774 780 +++ b/a
775 781 @@ -1,2 +1,3 @@
776 782 a
777 783 -5
778 784 +m1
779 785 +m2
780 786 diff --git a/b b/b
781 787 deleted file mode 100644
782 788 --- a/b
783 789 +++ /dev/null
784 790 @@ -1,2 +0,0 @@
785 791 -a
786 792 -5
787 793 diff --git a/c b/c
788 794 deleted file mode 100644
789 795 --- a/c
790 796 +++ /dev/null
791 797 @@ -1,2 +0,0 @@
792 798 -a
793 799 -5
794 800
795 801
802 created new head
796 803 ** circular rename **
797 804 ** add a a1 / hg mv a b / hg mv b a
798 805 - working to parent:
799 806 A a
800 807 b
801 808 R b
802 809
803 810 diff --git a/b b/a
804 811 rename from b
805 812 rename to a
806 813
807 814 - working to root: --rev 0
808 815 M a
809 816
810 817 diff --git a/a b/a
811 818 --- a/a
812 819 +++ b/a
813 820 @@ -1,1 +1,3 @@
814 821 a
815 822 +6
816 823 +a1
817 824
818 825 - working to branch: --rev 2
819 826 M a
820 827
821 828 diff --git a/a b/a
822 829 --- a/a
823 830 +++ b/a
824 831 @@ -1,3 +1,3 @@
825 832 a
826 833 -m1
827 834 -m2
828 835 +6
829 836 +a1
830 837
831 838 - root to parent: --rev 0 --rev .
832 839 A b
833 840 a
834 841 R a
835 842
836 843 diff --git a/a b/b
837 844 rename from a
838 845 rename to b
839 846 --- a/a
840 847 +++ b/b
841 848 @@ -1,1 +1,3 @@
842 849 a
843 850 +6
844 851 +a1
845 852
846 853 - parent to root: --rev . --rev 0
847 854 A a
848 855 b
849 856 R b
850 857
851 858 diff --git a/b b/a
852 859 rename from b
853 860 rename to a
854 861 --- a/b
855 862 +++ b/a
856 863 @@ -1,3 +1,1 @@
857 864 a
858 865 -6
859 866 -a1
860 867
861 868 - branch to parent: --rev 2 --rev .
862 869 A b
863 870 a
864 871 R a
865 872
866 873 diff --git a/a b/b
867 874 rename from a
868 875 rename to b
869 876 --- a/a
870 877 +++ b/b
871 878 @@ -1,3 +1,3 @@
872 879 a
873 880 -m1
874 881 -m2
875 882 +6
876 883 +a1
877 884
878 885 - parent to branch: --rev . --rev 2
879 886 A a
880 887 b
881 888 R b
882 889
883 890 diff --git a/b b/a
884 891 rename from b
885 892 rename to a
886 893 --- a/b
887 894 +++ b/a
888 895 @@ -1,3 +1,3 @@
889 896 a
890 897 -6
891 898 -a1
892 899 +m1
893 900 +m2
894 901
895 902
@@ -1,117 +1,118 b''
1 1 marked working directory as branch foo
2 2 foo
3 3 marked working directory as branch bar
4 4 % branch shadowing
5 5 abort: a branch of the same name already exists (use --force to override)
6 6 marked working directory as branch default
7 7 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
8 8 foo
9 created new head
9 10 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
10 11 (branch merge, don't forget to commit)
11 12 foo
12 13 changeset: 5:5f8fb06e083e
13 14 branch: foo
14 15 tag: tip
15 16 parent: 4:4909a3732169
16 17 parent: 3:bf1bc2f45e83
17 18 user: test
18 19 date: Mon Jan 12 13:46:40 1970 +0000
19 20 summary: merge
20 21
21 22 changeset: 4:4909a3732169
22 23 branch: foo
23 24 parent: 1:b699b1cec9c2
24 25 user: test
25 26 date: Mon Jan 12 13:46:40 1970 +0000
26 27 summary: modify a branch
27 28
28 29 changeset: 3:bf1bc2f45e83
29 30 user: test
30 31 date: Mon Jan 12 13:46:40 1970 +0000
31 32 summary: clear branch name
32 33
33 34 changeset: 2:67ec16bde7f1
34 35 branch: bar
35 36 user: test
36 37 date: Mon Jan 12 13:46:40 1970 +0000
37 38 summary: change branch name
38 39
39 40 changeset: 1:b699b1cec9c2
40 41 branch: foo
41 42 user: test
42 43 date: Mon Jan 12 13:46:40 1970 +0000
43 44 summary: add branch name
44 45
45 46 changeset: 0:be8523e69bf8
46 47 user: test
47 48 date: Mon Jan 12 13:46:40 1970 +0000
48 49 summary: initial
49 50
50 51 foo 5:5f8fb06e083e
51 52 default 3:bf1bc2f45e83 (inactive)
52 53 bar 2:67ec16bde7f1 (inactive)
53 54 foo
54 55 default
55 56 bar
56 57 % test for invalid branch cache
57 58 rolling back last transaction
58 59 changeset: 4:4909a3732169
59 60 branch: foo
60 61 tag: tip
61 62 parent: 1:b699b1cec9c2
62 63 user: test
63 64 date: Mon Jan 12 13:46:40 1970 +0000
64 65 summary: modify a branch
65 66
66 67 invalidating branch cache (tip differs)
67 68 changeset: 4:4909a3732169c0c20011c4f4b8fdff4e3d89b23f
68 69 branch: foo
69 70 tag: tip
70 71 parent: 1:b699b1cec9c2966b3700de4fef0dc123cd754c31
71 72 parent: -1:0000000000000000000000000000000000000000
72 73 manifest: 4:d01b250baaa05909152f7ae07d7a649deea0df9a
73 74 user: test
74 75 date: Mon Jan 12 13:46:40 1970 +0000
75 76 files: a
76 77 extra: branch=foo
77 78 description:
78 79 modify a branch
79 80
80 81
81 82 4:4909a3732169
82 83 4909a3732169c0c20011c4f4b8fdff4e3d89b23f 4
83 84 bf1bc2f45e834c75404d0ddab57d53beab56e2f8 default
84 85 4909a3732169c0c20011c4f4b8fdff4e3d89b23f foo
85 86 67ec16bde7f1575d523313b9bca000f6a6f12dca bar
86 87 % push should update the branch cache
87 88 % pushing just rev 0
88 89 be8523e69bf892e25817fc97187516b3c0804ae4 0
89 90 be8523e69bf892e25817fc97187516b3c0804ae4 default
90 91 % pushing everything
91 92 4909a3732169c0c20011c4f4b8fdff4e3d89b23f 4
92 93 bf1bc2f45e834c75404d0ddab57d53beab56e2f8 default
93 94 4909a3732169c0c20011c4f4b8fdff4e3d89b23f foo
94 95 67ec16bde7f1575d523313b9bca000f6a6f12dca bar
95 96 % update with no arguments: tipmost revision of the current branch
96 97 bf1bc2f45e83
97 98 4909a3732169 (foo) tip
98 99 marked working directory as branch foobar
99 100 abort: branch foobar not found
100 101 % fastforward merge
101 102 marked working directory as branch ff
102 103 adding ff
103 104 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
104 105 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
105 106 (branch merge, don't forget to commit)
106 107 foo
107 108 changeset: 6:f0c74f92a385
108 109 branch: foo
109 110 tag: tip
110 111 parent: 4:4909a3732169
111 112 parent: 5:c420d2121b71
112 113 user: test
113 114 date: Mon Jan 12 13:46:40 1970 +0000
114 115 summary: Merge ff into foo
115 116
116 117 a
117 118 ff
@@ -1,95 +1,96 b''
1 1 % no working directory
2 2 adding a
3 3 adding b
4 4 adding c
5 5 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
6 6 adding c
7 created new head
7 8 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
8 9 % hg parents
9 10 changeset: 3:02d851b7e549
10 11 user: test
11 12 date: Thu Jan 01 00:00:03 1970 +0000
12 13 summary: c
13 14
14 15 % hg parents a
15 16 changeset: 1:d786049f033a
16 17 user: test
17 18 date: Thu Jan 01 00:00:01 1970 +0000
18 19 summary: a
19 20
20 21 % hg parents c, single revision
21 22 changeset: 3:02d851b7e549
22 23 user: test
23 24 date: Thu Jan 01 00:00:03 1970 +0000
24 25 summary: c
25 26
26 27 % hg parents -r 3 c
27 28 abort: 'c' not found in manifest!
28 29 % hg parents -r 2
29 30 changeset: 1:d786049f033a
30 31 user: test
31 32 date: Thu Jan 01 00:00:01 1970 +0000
32 33 summary: a
33 34
34 35 % hg parents -r 2 a
35 36 changeset: 1:d786049f033a
36 37 user: test
37 38 date: Thu Jan 01 00:00:01 1970 +0000
38 39 summary: a
39 40
40 41 % hg parents -r 2 ../a
41 42 abort: ../a not under root
42 43 % cd dir; hg parents -r 2 ../a
43 44 changeset: 1:d786049f033a
44 45 user: test
45 46 date: Thu Jan 01 00:00:01 1970 +0000
46 47 summary: a
47 48
48 49 % hg parents -r 2 path:a
49 50 changeset: 1:d786049f033a
50 51 user: test
51 52 date: Thu Jan 01 00:00:01 1970 +0000
52 53 summary: a
53 54
54 55 % hg parents -r 2 glob:a
55 56 abort: can only specify an explicit file name
56 57 % merge working dir with 2 parents, hg parents c
57 58 merging c
58 59 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
59 60 (branch merge, don't forget to commit)
60 61 changeset: 3:02d851b7e549
61 62 user: test
62 63 date: Thu Jan 01 00:00:03 1970 +0000
63 64 summary: c
64 65
65 66 changeset: 4:48cee28d4b4e
66 67 tag: tip
67 68 parent: 1:d786049f033a
68 69 user: test
69 70 date: Thu Jan 01 00:00:04 1970 +0000
70 71 summary: c2
71 72
72 73 % merge working dir with 1 parent, hg parents
73 74 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
74 75 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
75 76 (branch merge, don't forget to commit)
76 77 changeset: 2:6cfac479f009
77 78 user: test
78 79 date: Thu Jan 01 00:00:02 1970 +0000
79 80 summary: b
80 81
81 82 changeset: 4:48cee28d4b4e
82 83 tag: tip
83 84 parent: 1:d786049f033a
84 85 user: test
85 86 date: Thu Jan 01 00:00:04 1970 +0000
86 87 summary: c2
87 88
88 89 % merge working dir with 1 parent, hg parents c
89 90 changeset: 4:48cee28d4b4e
90 91 tag: tip
91 92 parent: 1:d786049f033a
92 93 user: test
93 94 date: Thu Jan 01 00:00:04 1970 +0000
94 95 summary: c2
95 96
@@ -1,35 +1,36 b''
1 1 reverting a
2 created new head
2 3 changeset 3:107ce1ee2b43 backs out changeset 1:25a1420a55f8
3 4 merging with changeset 3:107ce1ee2b43
4 5 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 6 (branch merge, don't forget to commit)
6 7 abort: invalid date: 'should fail'
7 8 abort: date exceeds 32 bits: 100000000000000000
8 9 abort: impossible time zone offset: 1400000
9 10 Sun Jan 15 13:30:00 2006 +0500
10 11 Sun Jan 15 13:30:00 2006 -0800
11 12 Sat Jul 15 13:30:00 2006 +0500
12 13 Sat Jul 15 13:30:00 2006 -0700
13 14 Sun Jun 11 00:26:40 2006 -0400
14 15 Sat Apr 15 13:30:00 2006 +0200
15 16 Sat Apr 15 13:30:00 2006 +0000
16 17 Wed Feb 01 13:00:30 2006 -0500
17 18 Wed Feb 01 13:00:30 2006 +0000
18 19 internal: 1000000000 -16200
19 20 standard: Sun Sep 09 06:16:40 2001 +0430
20 21 internal: 1000000000 -15300
21 22 standard: Sun Sep 09 06:01:40 2001 +0415
22 23 internal: 1000000000 -14400
23 24 standard: Sun Sep 09 05:46:40 2001 +0400
24 25 internal: 1000000000 0
25 26 standard: Sun Sep 09 01:46:40 2001 +0000
26 27 internal: 1000000000 14400
27 28 standard: Sat Sep 08 21:46:40 2001 -0400
28 29 internal: 1000000000 15300
29 30 standard: Sat Sep 08 21:31:40 2001 -0415
30 31 internal: 1000000000 16200
31 32 standard: Sat Sep 08 21:16:40 2001 -0430
32 33 internal: 999967600 -16200
33 34 standard: Sat Sep 08 21:16:40 2001 +0430
34 35 internal: 1000000000 16200
35 36 standard: Sat Sep 08 21:16:40 2001 -0430
@@ -1,137 +1,138 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 3 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 4 rev offset length base linkrev nodeid p1 p2
4 5 0 0 3 0 0 362fef284ce2 000000000000 000000000000
5 6 1 3 5 1 1 125144f7e028 362fef284ce2 000000000000
6 7 2 8 7 2 2 4c982badb186 125144f7e028 000000000000
7 8 3 15 9 3 3 19b1fc555737 4c982badb186 000000000000
8 9 rev offset length base linkrev nodeid p1 p2
9 10 0 0 75 0 7 905359268f77 000000000000 000000000000
10 11 rev offset length base linkrev nodeid p1 p2
11 12 0 0 75 0 8 905359268f77 000000000000 000000000000
12 13 rev offset length base linkrev nodeid p1 p2
13 14 0 0 8 0 6 12ab3bcc5ea4 000000000000 000000000000
14 15 rev offset length base linkrev nodeid p1 p2
15 16 0 0 48 0 0 43eadb1d2d06 000000000000 000000000000
16 17 1 48 48 1 1 8b89697eba2c 43eadb1d2d06 000000000000
17 18 2 96 48 2 2 626a32663c2f 8b89697eba2c 000000000000
18 19 3 144 48 3 3 f54c32f13478 626a32663c2f 000000000000
19 20 4 192 58 3 6 de68e904d169 626a32663c2f 000000000000
20 21 5 250 68 3 7 3b45cc2ab868 de68e904d169 000000000000
21 22 6 318 54 6 8 24d86153a002 f54c32f13478 000000000000
22 23 checking changesets
23 24 checking manifests
24 25 crosschecking files in changesets and manifests
25 26 checking files
26 27 4 files, 9 changesets, 7 total revisions
27 28 pushing to test-0
28 29 searching for changes
29 30 adding changesets
30 31 adding manifests
31 32 adding file changes
32 33 added 1 changesets with 1 changes to 1 files
33 34 checking changesets
34 35 checking manifests
35 36 crosschecking files in changesets and manifests
36 37 checking files
37 38 1 files, 1 changesets, 1 total revisions
38 39 pushing to test-1
39 40 searching for changes
40 41 adding changesets
41 42 adding manifests
42 43 adding file changes
43 44 added 2 changesets with 2 changes to 1 files
44 45 checking changesets
45 46 checking manifests
46 47 crosschecking files in changesets and manifests
47 48 checking files
48 49 1 files, 2 changesets, 2 total revisions
49 50 pushing to test-2
50 51 searching for changes
51 52 adding changesets
52 53 adding manifests
53 54 adding file changes
54 55 added 3 changesets with 3 changes to 1 files
55 56 checking changesets
56 57 checking manifests
57 58 crosschecking files in changesets and manifests
58 59 checking files
59 60 1 files, 3 changesets, 3 total revisions
60 61 pushing to test-3
61 62 searching for changes
62 63 adding changesets
63 64 adding manifests
64 65 adding file changes
65 66 added 4 changesets with 4 changes to 1 files
66 67 checking changesets
67 68 checking manifests
68 69 crosschecking files in changesets and manifests
69 70 checking files
70 71 1 files, 4 changesets, 4 total revisions
71 72 pushing to test-4
72 73 searching for changes
73 74 adding changesets
74 75 adding manifests
75 76 adding file changes
76 77 added 2 changesets with 2 changes to 1 files
77 78 checking changesets
78 79 checking manifests
79 80 crosschecking files in changesets and manifests
80 81 checking files
81 82 1 files, 2 changesets, 2 total revisions
82 83 pushing to test-5
83 84 searching for changes
84 85 adding changesets
85 86 adding manifests
86 87 adding file changes
87 88 added 3 changesets with 3 changes to 1 files
88 89 checking changesets
89 90 checking manifests
90 91 crosschecking files in changesets and manifests
91 92 checking files
92 93 1 files, 3 changesets, 3 total revisions
93 94 pushing to test-6
94 95 searching for changes
95 96 adding changesets
96 97 adding manifests
97 98 adding file changes
98 99 added 4 changesets with 5 changes to 2 files
99 100 checking changesets
100 101 checking manifests
101 102 crosschecking files in changesets and manifests
102 103 checking files
103 104 2 files, 4 changesets, 5 total revisions
104 105 pushing to test-7
105 106 searching for changes
106 107 adding changesets
107 108 adding manifests
108 109 adding file changes
109 110 added 5 changesets with 6 changes to 3 files
110 111 checking changesets
111 112 checking manifests
112 113 crosschecking files in changesets and manifests
113 114 checking files
114 115 3 files, 5 changesets, 6 total revisions
115 116 pushing to test-8
116 117 searching for changes
117 118 adding changesets
118 119 adding manifests
119 120 adding file changes
120 121 added 5 changesets with 5 changes to 2 files
121 122 checking changesets
122 123 checking manifests
123 124 crosschecking files in changesets and manifests
124 125 checking files
125 126 2 files, 5 changesets, 5 total revisions
126 127 pulling from ../test-7
127 128 searching for changes
128 129 adding changesets
129 130 adding manifests
130 131 adding file changes
131 132 added 4 changesets with 2 changes to 3 files (+1 heads)
132 133 (run 'hg heads' to see heads, 'hg merge' to merge)
133 134 checking changesets
134 135 checking manifests
135 136 crosschecking files in changesets and manifests
136 137 checking files
137 138 4 files, 9 changesets, 7 total revisions
@@ -1,78 +1,80 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 2 pushing to ../a
3 3 searching for changes
4 4 abort: push creates new remote heads!
5 5 (did you forget to merge? use push -f to force)
6 6 pulling from ../a
7 7 searching for changes
8 8 adding changesets
9 9 adding manifests
10 10 adding file changes
11 11 added 1 changesets with 1 changes to 1 files (+1 heads)
12 12 (run 'hg heads' to see heads, 'hg merge' to merge)
13 13 pushing to ../a
14 14 searching for changes
15 15 abort: push creates new remote heads!
16 16 (did you forget to merge? use push -f to force)
17 17 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
18 18 (branch merge, don't forget to commit)
19 19 pushing to ../a
20 20 searching for changes
21 21 adding changesets
22 22 adding manifests
23 23 adding file changes
24 24 added 2 changesets with 1 changes to 1 files
25 25 adding foo
26 26 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
27 27 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
28 created new head
28 29 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
30 created new head
29 31 merging foo
30 32 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
31 33 (branch merge, don't forget to commit)
32 34 pushing to ../c
33 35 searching for changes
34 36 abort: push creates new remote heads!
35 37 (did you forget to merge? use push -f to force)
36 38 1
37 39 pushing to ../c
38 40 searching for changes
39 41 no changes found
40 42 0
41 43 pushing to ../c
42 44 searching for changes
43 45 abort: push creates new remote heads!
44 46 (did you forget to merge? use push -f to force)
45 47 1
46 48 pushing to ../c
47 49 searching for changes
48 50 abort: push creates new remote heads!
49 51 (did you forget to merge? use push -f to force)
50 52 1
51 53 pushing to ../c
52 54 searching for changes
53 55 adding changesets
54 56 adding manifests
55 57 adding file changes
56 58 added 2 changesets with 2 changes to 1 files (+2 heads)
57 59 0
58 60 pushing to ../c
59 61 searching for changes
60 62 adding changesets
61 63 adding manifests
62 64 adding file changes
63 65 added 1 changesets with 1 changes to 1 files (-1 heads)
64 66 0
65 67 pushing to ../e
66 68 searching for changes
67 69 adding changesets
68 70 adding manifests
69 71 adding file changes
70 72 added 1 changesets with 1 changes to 1 files
71 73 0
72 74 pushing to ../e
73 75 searching for changes
74 76 adding changesets
75 77 adding manifests
76 78 adding file changes
77 79 added 1 changesets with 1 changes to 1 files
78 80 0
@@ -1,73 +1,75 b''
1 1 adding a/a
2 2 adding a/b
3 3 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 4 moving a/a to b/a
5 5 moving a/b to b/b
6 6 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
7 created new head
7 8 resolving manifests
8 9 overwrite None partial False
9 10 ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
10 11 searching for copies back to rev 1
11 12 unmatched files in local:
12 13 a/c
13 14 a/d
14 15 unmatched files in other:
15 16 b/a
16 17 b/b
17 18 all copies found (* = to merge, ! = divergent):
18 19 b/a -> a/a
19 20 b/b -> a/b
20 21 checking for directory renames
21 22 dir a/ -> b/
22 23 file a/c -> b/c
23 24 file a/d -> b/d
24 25 a/d: remote renamed directory to b/d -> d
25 26 a/c: remote renamed directory to b/c -> d
26 27 a/b: other deleted -> r
27 28 a/a: other deleted -> r
28 29 b/a: remote created -> g
29 30 b/b: remote created -> g
30 31 removing a/a
31 32 removing a/b
32 33 moving a/c to b/c
33 34 moving a/d to b/d
34 35 getting b/a
35 36 getting b/b
36 37 4 files updated, 0 files merged, 2 files removed, 0 files unresolved
37 38 (branch merge, don't forget to commit)
38 39 a/* b/a b/b b/c b/d
39 40 M b/a
40 41 M b/b
41 42 A b/c
42 43 a/c
43 44 R a/a
44 45 R a/b
45 46 R a/c
46 47 ? b/d
47 48 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
48 49 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
49 50 resolving manifests
50 51 overwrite None partial False
51 52 ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
52 53 searching for copies back to rev 1
53 54 unmatched files in local:
54 55 b/a
55 56 b/b
56 57 b/d
57 58 unmatched files in other:
58 59 a/c
59 60 all copies found (* = to merge, ! = divergent):
60 61 b/a -> a/a
61 62 b/b -> a/b
62 63 checking for directory renames
63 64 dir a/ -> b/
64 65 file a/c -> b/c
65 66 None: local renamed directory to b/c -> d
66 67 getting a/c to b/c
67 68 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
68 69 (branch merge, don't forget to commit)
69 70 a/* b/a b/b b/c b/d
70 71 A b/c
71 72 a/c
72 73 ? b/d
74 created new head
73 75 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
@@ -1,42 +1,43 b''
1 1 checkout
2 2 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 created new head
3 4 merge
4 5 resolving manifests
5 6 overwrite None partial False
6 7 ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
7 8 searching for copies back to rev 1
8 9 unmatched files in local:
9 10 c2
10 11 unmatched files in other:
11 12 b
12 13 b2
13 14 all copies found (* = to merge, ! = divergent):
14 15 c2 -> a2 !
15 16 b -> a *
16 17 b2 -> a2 !
17 18 checking for directory renames
18 19 a2: divergent renames -> dr
19 20 a: remote moved to b -> m
20 21 b2: remote created -> g
21 22 copying a to b
22 23 picked tool 'internal:merge' for a (binary False symlink False)
23 24 merging a and b
24 25 my a@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
25 26 premerge successful
26 27 removing a
27 28 warning: detected divergent renames of a2 to:
28 29 c2
29 30 b2
30 31 getting b2
31 32 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
32 33 (branch merge, don't forget to commit)
33 34 M b
34 35 a
35 36 M b2
36 37 R a
37 38 C c2
38 39 blahblah
39 40 rev offset length base linkrev nodeid p1 p2
40 41 0 0 67 0 1 dc51707dfc98 000000000000 000000000000
41 42 1 67 72 1 3 b2494a44f0a9 000000000000 dc51707dfc98
42 43 b renamed from a:dd03b83622e78778b403775d0d074b9ac7387a66
@@ -1,541 +1,562 b''
1 created new head
1 2 --------------
2 3 test L:up a R:nc a b W: - 1 get local a to b
3 4 --------------
4 5 resolving manifests
5 6 overwrite None partial False
6 7 ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
7 8 searching for copies back to rev 1
8 9 unmatched files in other:
9 10 b
10 11 all copies found (* = to merge, ! = divergent):
11 12 b -> a *
12 13 checking for directory renames
13 14 rev: versions differ -> m
14 15 a: remote copied to b -> m
15 16 copying a to b
16 17 picked tool 'python ../merge' for a (binary False symlink False)
17 18 merging a and b
18 19 my a@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
19 20 premerge successful
20 21 picked tool 'python ../merge' for rev (binary False symlink False)
21 22 merging rev
22 23 my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337
23 24 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
24 25 (branch merge, don't forget to commit)
25 26 --------------
26 27 M b
27 28 a
28 29 C a
29 30 --------------
30 31
32 created new head
31 33 --------------
32 34 test L:nc a b R:up a W: - 2 get rem change to a and b
33 35 --------------
34 36 resolving manifests
35 37 overwrite None partial False
36 38 ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
37 39 searching for copies back to rev 1
38 40 unmatched files in local:
39 41 b
40 42 all copies found (* = to merge, ! = divergent):
41 43 b -> a *
42 44 checking for directory renames
43 45 a: remote is newer -> g
44 46 b: local copied to a -> m
45 47 rev: versions differ -> m
46 48 getting a
47 49 picked tool 'python ../merge' for b (binary False symlink False)
48 50 merging b and a
49 51 my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
50 52 premerge successful
51 53 picked tool 'python ../merge' for rev (binary False symlink False)
52 54 merging rev
53 55 my rev@ac809aeed39a+ other rev@f4db7e329e71 ancestor rev@924404dff337
54 56 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
55 57 (branch merge, don't forget to commit)
56 58 --------------
57 59 M a
58 60 M b
59 61 a
60 62 --------------
61 63
64 created new head
62 65 --------------
63 66 test L:up a R:nm a b W: - 3 get local a change to b, remove a
64 67 --------------
65 68 resolving manifests
66 69 overwrite None partial False
67 70 ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
68 71 searching for copies back to rev 1
69 72 unmatched files in other:
70 73 b
71 74 all copies found (* = to merge, ! = divergent):
72 75 b -> a *
73 76 checking for directory renames
74 77 rev: versions differ -> m
75 78 a: remote moved to b -> m
76 79 copying a to b
77 80 picked tool 'python ../merge' for a (binary False symlink False)
78 81 merging a and b
79 82 my a@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
80 83 premerge successful
81 84 removing a
82 85 picked tool 'python ../merge' for rev (binary False symlink False)
83 86 merging rev
84 87 my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
85 88 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
86 89 (branch merge, don't forget to commit)
87 90 --------------
88 91 M b
89 92 a
90 93 --------------
91 94
95 created new head
92 96 --------------
93 97 test L:nm a b R:up a W: - 4 get remote change to b
94 98 --------------
95 99 resolving manifests
96 100 overwrite None partial False
97 101 ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
98 102 searching for copies back to rev 1
99 103 unmatched files in local:
100 104 b
101 105 all copies found (* = to merge, ! = divergent):
102 106 b -> a *
103 107 checking for directory renames
104 108 b: local moved to a -> m
105 109 rev: versions differ -> m
106 110 picked tool 'python ../merge' for b (binary False symlink False)
107 111 merging b and a
108 112 my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
109 113 premerge successful
110 114 picked tool 'python ../merge' for rev (binary False symlink False)
111 115 merging rev
112 116 my rev@ecf3cb2a4219+ other rev@f4db7e329e71 ancestor rev@924404dff337
113 117 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
114 118 (branch merge, don't forget to commit)
115 119 --------------
116 120 M b
117 121 a
118 122 --------------
119 123
124 created new head
120 125 --------------
121 126 test L: R:nc a b W: - 5 get b
122 127 --------------
123 128 resolving manifests
124 129 overwrite None partial False
125 130 ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
126 131 searching for copies back to rev 1
127 132 unmatched files in other:
128 133 b
129 134 all copies found (* = to merge, ! = divergent):
130 135 b -> a
131 136 checking for directory renames
132 137 rev: versions differ -> m
133 138 b: remote created -> g
134 139 getting b
135 140 picked tool 'python ../merge' for rev (binary False symlink False)
136 141 merging rev
137 142 my rev@94b33a1b7f2d+ other rev@735846fee2d7 ancestor rev@924404dff337
138 143 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
139 144 (branch merge, don't forget to commit)
140 145 --------------
141 146 M b
142 147 C a
143 148 --------------
144 149
150 created new head
145 151 --------------
146 152 test L:nc a b R: W: - 6 nothing
147 153 --------------
148 154 resolving manifests
149 155 overwrite None partial False
150 156 ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
151 157 searching for copies back to rev 1
152 158 unmatched files in local:
153 159 b
154 160 all copies found (* = to merge, ! = divergent):
155 161 b -> a
156 162 checking for directory renames
157 163 rev: versions differ -> m
158 164 picked tool 'python ../merge' for rev (binary False symlink False)
159 165 merging rev
160 166 my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
161 167 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
162 168 (branch merge, don't forget to commit)
163 169 --------------
164 170 C a
165 171 C b
166 172 --------------
167 173
174 created new head
168 175 --------------
169 176 test L: R:nm a b W: - 7 get b
170 177 --------------
171 178 resolving manifests
172 179 overwrite None partial False
173 180 ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
174 181 searching for copies back to rev 1
175 182 unmatched files in other:
176 183 b
177 184 all copies found (* = to merge, ! = divergent):
178 185 b -> a
179 186 checking for directory renames
180 187 a: other deleted -> r
181 188 rev: versions differ -> m
182 189 b: remote created -> g
183 190 removing a
184 191 getting b
185 192 picked tool 'python ../merge' for rev (binary False symlink False)
186 193 merging rev
187 194 my rev@94b33a1b7f2d+ other rev@e03727d2d66b ancestor rev@924404dff337
188 195 1 files updated, 1 files merged, 1 files removed, 0 files unresolved
189 196 (branch merge, don't forget to commit)
190 197 --------------
191 198 M b
192 199 --------------
193 200
201 created new head
194 202 --------------
195 203 test L:nm a b R: W: - 8 nothing
196 204 --------------
197 205 resolving manifests
198 206 overwrite None partial False
199 207 ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
200 208 searching for copies back to rev 1
201 209 unmatched files in local:
202 210 b
203 211 all copies found (* = to merge, ! = divergent):
204 212 b -> a
205 213 checking for directory renames
206 214 rev: versions differ -> m
207 215 picked tool 'python ../merge' for rev (binary False symlink False)
208 216 merging rev
209 217 my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
210 218 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
211 219 (branch merge, don't forget to commit)
212 220 --------------
213 221 C b
214 222 --------------
215 223
224 created new head
216 225 --------------
217 226 test L:um a b R:um a b W: - 9 do merge with ancestor in a
218 227 --------------
219 228 resolving manifests
220 229 overwrite None partial False
221 230 ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7
222 231 searching for copies back to rev 1
223 232 b: versions differ -> m
224 233 rev: versions differ -> m
225 234 picked tool 'python ../merge' for b (binary False symlink False)
226 235 merging b
227 236 my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
228 237 picked tool 'python ../merge' for rev (binary False symlink False)
229 238 merging rev
230 239 my rev@ec03c2ca8642+ other rev@79cc6877a3b7 ancestor rev@924404dff337
231 240 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
232 241 (branch merge, don't forget to commit)
233 242 --------------
234 243 M b
235 244 --------------
236 245
246 created new head
237 247 --------------
238 248 test L:nm a b R:nm a c W: - 11 get c, keep b
239 249 --------------
240 250 resolving manifests
241 251 overwrite None partial False
242 252 ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
243 253 searching for copies back to rev 1
244 254 unmatched files in local:
245 255 b
246 256 unmatched files in other:
247 257 c
248 258 all copies found (* = to merge, ! = divergent):
249 259 c -> a !
250 260 b -> a !
251 261 checking for directory renames
252 262 a: divergent renames -> dr
253 263 rev: versions differ -> m
254 264 c: remote created -> g
255 265 warning: detected divergent renames of a to:
256 266 b
257 267 c
258 268 getting c
259 269 picked tool 'python ../merge' for rev (binary False symlink False)
260 270 merging rev
261 271 my rev@ecf3cb2a4219+ other rev@e6abcc1a30c2 ancestor rev@924404dff337
262 272 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
263 273 (branch merge, don't forget to commit)
264 274 --------------
265 275 M c
266 276 C b
267 277 --------------
268 278
279 created new head
269 280 --------------
270 281 test L:nc a b R:up b W: - 12 merge b no ancestor
271 282 --------------
272 283 resolving manifests
273 284 overwrite None partial False
274 285 ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7
275 286 searching for copies back to rev 1
276 287 b: versions differ -> m
277 288 rev: versions differ -> m
278 289 picked tool 'python ../merge' for b (binary False symlink False)
279 290 merging b
280 291 my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
281 292 picked tool 'python ../merge' for rev (binary False symlink False)
282 293 merging rev
283 294 my rev@ac809aeed39a+ other rev@af30c7647fc7 ancestor rev@924404dff337
284 295 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
285 296 (branch merge, don't forget to commit)
286 297 --------------
287 298 M b
288 299 C a
289 300 --------------
290 301
302 created new head
291 303 --------------
292 304 test L:up b R:nm a b W: - 13 merge b no ancestor
293 305 --------------
294 306 resolving manifests
295 307 overwrite None partial False
296 308 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
297 309 searching for copies back to rev 1
298 310 a: other deleted -> r
299 311 b: versions differ -> m
300 312 rev: versions differ -> m
301 313 removing a
302 314 picked tool 'python ../merge' for b (binary False symlink False)
303 315 merging b
304 316 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
305 317 picked tool 'python ../merge' for rev (binary False symlink False)
306 318 merging rev
307 319 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
308 320 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
309 321 (branch merge, don't forget to commit)
310 322 --------------
311 323 M b
312 324 --------------
313 325
326 created new head
314 327 --------------
315 328 test L:nc a b R:up a b W: - 14 merge b no ancestor
316 329 --------------
317 330 resolving manifests
318 331 overwrite None partial False
319 332 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
320 333 searching for copies back to rev 1
321 334 a: remote is newer -> g
322 335 b: versions differ -> m
323 336 rev: versions differ -> m
324 337 getting a
325 338 picked tool 'python ../merge' for b (binary False symlink False)
326 339 merging b
327 340 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
328 341 picked tool 'python ../merge' for rev (binary False symlink False)
329 342 merging rev
330 343 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
331 344 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
332 345 (branch merge, don't forget to commit)
333 346 --------------
334 347 M a
335 348 M b
336 349 --------------
337 350
351 created new head
338 352 --------------
339 353 test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
340 354 --------------
341 355 resolving manifests
342 356 overwrite None partial False
343 357 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
344 358 searching for copies back to rev 1
345 359 a: other deleted -> r
346 360 b: versions differ -> m
347 361 rev: versions differ -> m
348 362 removing a
349 363 picked tool 'python ../merge' for b (binary False symlink False)
350 364 merging b
351 365 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
352 366 picked tool 'python ../merge' for rev (binary False symlink False)
353 367 merging rev
354 368 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
355 369 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
356 370 (branch merge, don't forget to commit)
357 371 --------------
358 372 M b
359 373 --------------
360 374
375 created new head
361 376 --------------
362 377 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
363 378 --------------
364 379 resolving manifests
365 380 overwrite None partial False
366 381 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
367 382 searching for copies back to rev 1
368 383 a: remote is newer -> g
369 384 b: versions differ -> m
370 385 rev: versions differ -> m
371 386 getting a
372 387 picked tool 'python ../merge' for b (binary False symlink False)
373 388 merging b
374 389 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
375 390 picked tool 'python ../merge' for rev (binary False symlink False)
376 391 merging rev
377 392 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
378 393 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
379 394 (branch merge, don't forget to commit)
380 395 --------------
381 396 M a
382 397 M b
383 398 --------------
384 399
400 created new head
385 401 --------------
386 402 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
387 403 --------------
388 404 resolving manifests
389 405 overwrite None partial False
390 406 ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7
391 407 searching for copies back to rev 1
392 408 b: versions differ -> m
393 409 rev: versions differ -> m
394 410 picked tool 'python ../merge' for b (binary False symlink False)
395 411 merging b
396 412 my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
397 413 picked tool 'python ../merge' for rev (binary False symlink False)
398 414 merging rev
399 415 my rev@0b76e65c8289+ other rev@735846fee2d7 ancestor rev@924404dff337
400 416 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
401 417 (branch merge, don't forget to commit)
402 418 --------------
403 419 M b
404 420 C a
405 421 --------------
406 422
423 created new head
407 424 --------------
408 425 test L:nm a b R:up a b W: - 18 merge b no ancestor
409 426 --------------
410 427 resolving manifests
411 428 overwrite None partial False
412 429 ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a
413 430 searching for copies back to rev 1
414 431 b: versions differ -> m
415 432 rev: versions differ -> m
416 433 a: prompt recreating -> g
417 434 getting a
418 435 picked tool 'python ../merge' for b (binary False symlink False)
419 436 merging b
420 437 my b@ecf3cb2a4219+ other b@8dbce441892a ancestor b@000000000000
421 438 picked tool 'python ../merge' for rev (binary False symlink False)
422 439 merging rev
423 440 my rev@ecf3cb2a4219+ other rev@8dbce441892a ancestor rev@924404dff337
424 441 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
425 442 (branch merge, don't forget to commit)
426 443 --------------
427 444 M a
428 445 M b
429 446 --------------
430 447
448 created new head
431 449 --------------
432 450 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
433 451 --------------
434 452 resolving manifests
435 453 overwrite None partial False
436 454 ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b
437 455 searching for copies back to rev 1
438 456 b: versions differ -> m
439 457 rev: versions differ -> m
440 458 picked tool 'python ../merge' for b (binary False symlink False)
441 459 merging b
442 460 my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
443 461 picked tool 'python ../merge' for rev (binary False symlink False)
444 462 merging rev
445 463 my rev@0b76e65c8289+ other rev@e03727d2d66b ancestor rev@924404dff337
446 464 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
447 465 (branch merge, don't forget to commit)
448 466 --------------
449 467 M b
450 468 C a
451 469 --------------
452 470
471 created new head
453 472 --------------
454 473 test L:up a R:um a b W: - 20 merge a and b to b, remove a
455 474 --------------
456 475 resolving manifests
457 476 overwrite None partial False
458 477 ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
459 478 searching for copies back to rev 1
460 479 unmatched files in other:
461 480 b
462 481 all copies found (* = to merge, ! = divergent):
463 482 b -> a *
464 483 checking for directory renames
465 484 rev: versions differ -> m
466 485 a: remote moved to b -> m
467 486 copying a to b
468 487 picked tool 'python ../merge' for a (binary False symlink False)
469 488 merging a and b
470 489 my a@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
471 490 removing a
472 491 picked tool 'python ../merge' for rev (binary False symlink False)
473 492 merging rev
474 493 my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
475 494 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
476 495 (branch merge, don't forget to commit)
477 496 --------------
478 497 M b
479 498 a
480 499 --------------
481 500
501 created new head
482 502 --------------
483 503 test L:um a b R:up a W: - 21 merge a and b to b
484 504 --------------
485 505 resolving manifests
486 506 overwrite None partial False
487 507 ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
488 508 searching for copies back to rev 1
489 509 unmatched files in local:
490 510 b
491 511 all copies found (* = to merge, ! = divergent):
492 512 b -> a *
493 513 checking for directory renames
494 514 b: local moved to a -> m
495 515 rev: versions differ -> m
496 516 picked tool 'python ../merge' for b (binary False symlink False)
497 517 merging b and a
498 518 my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
499 519 picked tool 'python ../merge' for rev (binary False symlink False)
500 520 merging rev
501 521 my rev@ec03c2ca8642+ other rev@f4db7e329e71 ancestor rev@924404dff337
502 522 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
503 523 (branch merge, don't forget to commit)
504 524 --------------
505 525 M b
506 526 a
507 527 --------------
508 528
529 created new head
509 530 --------------
510 531 test L:nm a b R:up a c W: - 23 get c, keep b
511 532 --------------
512 533 resolving manifests
513 534 overwrite None partial False
514 535 ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
515 536 searching for copies back to rev 1
516 537 unmatched files in local:
517 538 b
518 539 unmatched files in other:
519 540 c
520 541 all copies found (* = to merge, ! = divergent):
521 542 b -> a *
522 543 checking for directory renames
523 544 b: local moved to a -> m
524 545 rev: versions differ -> m
525 546 c: remote created -> g
526 547 picked tool 'python ../merge' for b (binary False symlink False)
527 548 merging b and a
528 549 my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
529 550 premerge successful
530 551 getting c
531 552 picked tool 'python ../merge' for rev (binary False symlink False)
532 553 merging rev
533 554 my rev@ecf3cb2a4219+ other rev@2b958612230f ancestor rev@924404dff337
534 555 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
535 556 (branch merge, don't forget to commit)
536 557 --------------
537 558 M b
538 559 a
539 560 M c
540 561 --------------
541 562
@@ -1,86 +1,87 b''
1 1 %% should show b unknown
2 2 ? b
3 3 %% should show b unknown and c modified
4 4 M c
5 5 ? b
6 6 %% should show b added and c modified
7 7 M c
8 8 A b
9 9 %% should show a removed, b added and c modified
10 10 M c
11 11 A b
12 12 R a
13 13 %% should show b added, copy saved, and c modified
14 14 M c
15 15 A b
16 16 %% should show b unknown, and c modified
17 17 M c
18 18 ? b
19 19 %% should show unknown: b
20 20 ? b
21 21 %% should show b added
22 22 A b
23 23 %% should show b deleted
24 24 ! b
25 25 forgetting b
26 26 %% should not find b
27 27 b: No such file or directory
28 28 %% should show a c e
29 29 a
30 30 c
31 31 e
32 32 %% should verbosely save backup to e.orig
33 33 saving current version of e as e.orig
34 34 reverting e
35 35 %% should say no changes needed
36 36 no changes needed to a
37 37 %% should say file not managed
38 38 file not managed: q
39 39 %% should say file not found
40 40 notfound: No such file in rev 095eacd0c0d7
41 41 A z
42 42 ? e.orig
43 43 %% should add a, remove d, forget z
44 44 adding a
45 45 removing d
46 46 forgetting z
47 47 %% should forget a, undelete d
48 48 forgetting a
49 49 undeleting d
50 50 %% should silently add a
51 51 A a
52 52 R d
53 53 %% should silently keep d removed
54 54 R d
55 55 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
56 56 reverting c
57 57 %% should print non-executable
58 58 non-executable
59 59 reverting c
60 60 %% should print executable
61 61 executable
62 62 %% issue 241
63 63 adding a
64 64 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
65 65 % should fail - no arguments
66 66 abort: no files or directories specified; use --all to revert the whole repo
67 67 % should succeed
68 68 reverting a
69 69 %% issue332
70 70 adding b/b
71 created new head
71 72 reverting b/b
72 73 forgetting newdir/newfile
73 74 reverting b/b
74 75 % reverting a rename target should revert the source
75 76 ? newa
76 77 %% 4 ignored files (we will add/commit everything)
77 78 I ignored
78 79 I ignoreddir/file
79 80 I ignoreddir/removed
80 81 I removed
81 82 %% should revert ignored* and undelete *removed
82 83 reverting ignored
83 84 reverting ignoreddir/file
84 85 undeleting ignoreddir/removed
85 86 undeleting removed
86 87 %% should silently revert the named files
@@ -1,6 +1,7 b''
1 1 adding foo
2 2 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3 3 adding foo
4 created new head
4 5 rev offset length base linkrev nodeid p1 p2
5 6 0 0 0 0 0 b80de5d13875 000000000000 000000000000
6 7 1 0 24 0 1 0376abec49b8 000000000000 000000000000
@@ -1,182 +1,183 b''
1 1 # creating 'remote'
2 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 created new head
3 4 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
4 5 rev offset length base linkrev nodeid p1 p2
5 6 0 0 3 0 0 362fef284ce2 000000000000 000000000000
6 7 1 3 5 1 1 125144f7e028 362fef284ce2 000000000000
7 8 2 8 7 2 2 4c982badb186 125144f7e028 000000000000
8 9 3 15 9 3 3 19b1fc555737 4c982badb186 000000000000
9 10 rev offset length base linkrev nodeid p1 p2
10 11 0 0 75 0 7 905359268f77 000000000000 000000000000
11 12 rev offset length base linkrev nodeid p1 p2
12 13 0 0 75 0 8 905359268f77 000000000000 000000000000
13 14 rev offset length base linkrev nodeid p1 p2
14 15 0 0 8 0 6 12ab3bcc5ea4 000000000000 000000000000
15 16 rev offset length base linkrev nodeid p1 p2
16 17 0 0 48 0 0 43eadb1d2d06 000000000000 000000000000
17 18 1 48 48 1 1 8b89697eba2c 43eadb1d2d06 000000000000
18 19 2 96 48 2 2 626a32663c2f 8b89697eba2c 000000000000
19 20 3 144 48 3 3 f54c32f13478 626a32663c2f 000000000000
20 21 4 192 58 3 6 de68e904d169 626a32663c2f 000000000000
21 22 5 250 68 3 7 3b45cc2ab868 de68e904d169 000000000000
22 23 6 318 54 6 8 24d86153a002 f54c32f13478 000000000000
23 24 checking changesets
24 25 checking manifests
25 26 crosschecking files in changesets and manifests
26 27 checking files
27 28 4 files, 9 changesets, 7 total revisions
28 29 # clone remote via stream
29 30 requesting all changes
30 31 adding changesets
31 32 adding manifests
32 33 adding file changes
33 34 added 1 changesets with 1 changes to 1 files
34 35 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
35 36 checking changesets
36 37 checking manifests
37 38 crosschecking files in changesets and manifests
38 39 checking files
39 40 1 files, 1 changesets, 1 total revisions
40 41 requesting all changes
41 42 adding changesets
42 43 adding manifests
43 44 adding file changes
44 45 added 2 changesets with 2 changes to 1 files
45 46 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
46 47 checking changesets
47 48 checking manifests
48 49 crosschecking files in changesets and manifests
49 50 checking files
50 51 1 files, 2 changesets, 2 total revisions
51 52 requesting all changes
52 53 adding changesets
53 54 adding manifests
54 55 adding file changes
55 56 added 3 changesets with 3 changes to 1 files
56 57 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
57 58 checking changesets
58 59 checking manifests
59 60 crosschecking files in changesets and manifests
60 61 checking files
61 62 1 files, 3 changesets, 3 total revisions
62 63 requesting all changes
63 64 adding changesets
64 65 adding manifests
65 66 adding file changes
66 67 added 4 changesets with 4 changes to 1 files
67 68 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
68 69 checking changesets
69 70 checking manifests
70 71 crosschecking files in changesets and manifests
71 72 checking files
72 73 1 files, 4 changesets, 4 total revisions
73 74 requesting all changes
74 75 adding changesets
75 76 adding manifests
76 77 adding file changes
77 78 added 2 changesets with 2 changes to 1 files
78 79 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
79 80 checking changesets
80 81 checking manifests
81 82 crosschecking files in changesets and manifests
82 83 checking files
83 84 1 files, 2 changesets, 2 total revisions
84 85 requesting all changes
85 86 adding changesets
86 87 adding manifests
87 88 adding file changes
88 89 added 3 changesets with 3 changes to 1 files
89 90 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
90 91 checking changesets
91 92 checking manifests
92 93 crosschecking files in changesets and manifests
93 94 checking files
94 95 1 files, 3 changesets, 3 total revisions
95 96 requesting all changes
96 97 adding changesets
97 98 adding manifests
98 99 adding file changes
99 100 added 4 changesets with 5 changes to 2 files
100 101 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
101 102 checking changesets
102 103 checking manifests
103 104 crosschecking files in changesets and manifests
104 105 checking files
105 106 2 files, 4 changesets, 5 total revisions
106 107 requesting all changes
107 108 adding changesets
108 109 adding manifests
109 110 adding file changes
110 111 added 5 changesets with 6 changes to 3 files
111 112 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
112 113 checking changesets
113 114 checking manifests
114 115 crosschecking files in changesets and manifests
115 116 checking files
116 117 3 files, 5 changesets, 6 total revisions
117 118 requesting all changes
118 119 adding changesets
119 120 adding manifests
120 121 adding file changes
121 122 added 5 changesets with 5 changes to 2 files
122 123 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
123 124 checking changesets
124 125 checking manifests
125 126 crosschecking files in changesets and manifests
126 127 checking files
127 128 2 files, 5 changesets, 5 total revisions
128 129 pulling from ../test-7
129 130 searching for changes
130 131 adding changesets
131 132 adding manifests
132 133 adding file changes
133 134 added 4 changesets with 2 changes to 3 files (+1 heads)
134 135 (run 'hg heads' to see heads, 'hg merge' to merge)
135 136 checking changesets
136 137 checking manifests
137 138 crosschecking files in changesets and manifests
138 139 checking files
139 140 4 files, 9 changesets, 7 total revisions
140 141 pulling from ssh://user@dummy/remote
141 142 searching for changes
142 143 adding changesets
143 144 adding manifests
144 145 adding file changes
145 146 added 1 changesets with 0 changes to 1 files (+1 heads)
146 147 (run 'hg heads' to see heads, 'hg merge' to merge)
147 148 checking changesets
148 149 checking manifests
149 150 crosschecking files in changesets and manifests
150 151 checking files
151 152 1 files, 3 changesets, 2 total revisions
152 153 pulling from ssh://user@dummy/remote
153 154 searching for changes
154 155 adding changesets
155 156 adding manifests
156 157 adding file changes
157 158 added 6 changesets with 5 changes to 4 files
158 159 (run 'hg update' to get a working copy)
159 160 pulling from ssh://user@dummy/remote
160 161 searching for changes
161 162 adding changesets
162 163 adding manifests
163 164 adding file changes
164 165 added 2 changesets with 0 changes to 1 files (+1 heads)
165 166 (run 'hg heads' to see heads, 'hg merge' to merge)
166 167 checking changesets
167 168 checking manifests
168 169 crosschecking files in changesets and manifests
169 170 checking files
170 171 1 files, 5 changesets, 3 total revisions
171 172 pulling from ssh://user@dummy/remote
172 173 searching for changes
173 174 adding changesets
174 175 adding manifests
175 176 adding file changes
176 177 added 4 changesets with 4 changes to 4 files
177 178 (run 'hg update' to get a working copy)
178 179 checking changesets
179 180 checking manifests
180 181 crosschecking files in changesets and manifests
181 182 checking files
182 183 4 files, 9 changesets, 7 total revisions
@@ -1,104 +1,105 b''
1 1 # creating 'remote'
2 2 # repo not found error
3 3 remote: abort: There is no Mercurial repository here (.hg not found)!
4 4 abort: no suitable response from remote hg!
5 5 # clone remote via stream
6 6 streaming all changes
7 7 XXX files to transfer, XXX bytes of data
8 8 transferred XXX bytes in XXX seconds (XXX XB/sec)
9 9 XXX files updated, XXX files merged, XXX files removed, XXX files unresolved
10 10 checking changesets
11 11 checking manifests
12 12 crosschecking files in changesets and manifests
13 13 checking files
14 14 2 files, 1 changesets, 2 total revisions
15 15 # clone remote via pull
16 16 requesting all changes
17 17 adding changesets
18 18 adding manifests
19 19 adding file changes
20 20 added 1 changesets with 2 changes to 2 files
21 21 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
22 22 # verify
23 23 checking changesets
24 24 checking manifests
25 25 crosschecking files in changesets and manifests
26 26 checking files
27 27 2 files, 1 changesets, 2 total revisions
28 28 # empty default pull
29 29 default = ssh://user@dummy/remote
30 30 pulling from ssh://user@dummy/remote
31 31 searching for changes
32 32 no changes found
33 33 # local change
34 34 # updating rc
35 35 # find outgoing
36 36 comparing with ssh://user@dummy/remote
37 37 searching for changes
38 38 changeset: 1:572896fe480d
39 39 tag: tip
40 40 user: test
41 41 date: Mon Jan 12 13:46:40 1970 +0000
42 42 summary: add
43 43
44 44 # find incoming on the remote side
45 45 comparing with ssh://user@dummy/local
46 46 searching for changes
47 47 changeset: 1:572896fe480d
48 48 tag: tip
49 49 user: test
50 50 date: Mon Jan 12 13:46:40 1970 +0000
51 51 summary: add
52 52
53 53 # push
54 54 pushing to ssh://user@dummy/remote
55 55 searching for changes
56 56 remote: adding changesets
57 57 remote: adding manifests
58 58 remote: adding file changes
59 59 remote: added 1 changesets with 1 changes to 1 files
60 60 # check remote tip
61 61 changeset: 1:572896fe480d
62 62 tag: tip
63 63 user: test
64 64 date: Mon Jan 12 13:46:40 1970 +0000
65 65 summary: add
66 66
67 67 checking changesets
68 68 checking manifests
69 69 crosschecking files in changesets and manifests
70 70 checking files
71 71 2 files, 2 changesets, 3 total revisions
72 72 bleah
73 created new head
73 74 # push should succeed even though it has an unexpected response
74 75 pushing to ssh://user@dummy/remote
75 76 searching for changes
76 77 note: unsynced remote changes!
77 78 remote: adding changesets
78 79 remote: adding manifests
79 80 remote: adding file changes
80 81 remote: added 1 changesets with 1 changes to 1 files
81 82 remote: KABOOM
82 83 changeset: 3:ac7448082955
83 84 tag: tip
84 85 parent: 1:572896fe480d
85 86 user: test
86 87 date: Mon Jan 12 13:46:42 1970 +0000
87 88 summary: z
88 89
89 90 changeset: 2:187c6caa0d1e
90 91 parent: 0:e34318c26897
91 92 user: test
92 93 date: Mon Jan 12 13:46:41 1970 +0000
93 94 summary: z
94 95
95 96 Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio
96 97 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
97 98 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
98 99 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
99 100 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
100 101 Got arguments 1:user@dummy 2:hg -R local serve --stdio
101 102 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
102 103 changegroup-in-remote hook: HG_NODE=572896fe480d7581849806ee402175c49cb20037 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
103 104 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
104 105 changegroup-in-remote hook: HG_NODE=ac7448082955a0b2ff5cb4512c1e061c779bbc79 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
@@ -1,79 +1,83 b''
1 1 000000000000 tip
2 2 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 3 0acdaf898367 tip
4 4 tip 0:0acdaf898367
5 5 This is a local tag with a really long name! 0:0acdaf898367
6 6 0acdaf8983679e0aac16e811534eb49d7ee1f2b4 first
7 7 tip 1:8a3ca90d111d
8 8 first 0:0acdaf898367
9 9 8a3ca90d111d tip
10 10 M a
11 11 8a3ca90d111d+ tip
12 12 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
13 13 0acdaf898367+ first
14 14 0acdaf898367+ first
15 15 M a
16 created new head
16 17 8216907a933d tip
17 18 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
18 19 (branch merge, don't forget to commit)
19 20 8216907a933d+8a3ca90d111d+ tip
20 21 M .hgtags
21 22 tip 6:e2174d339386
22 23 first 0:0acdaf898367
23 24 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
25 created new head
24 26 .hgtags@c071f74ab5eb, line 2: cannot parse entry
25 27 .hgtags@c071f74ab5eb, line 4: node 'foo' is not well formed
26 28 .hgtags@4ca6f1b1a68c, line 2: node 'x' is not well formed
27 29 localtags, line 1: tag 'invalid' refers to unknown node
28 30 tip 8:4ca6f1b1a68c
29 31 first 0:0acdaf898367
30 32 changeset: 8:4ca6f1b1a68c
31 33 .hgtags@c071f74ab5eb, line 2: cannot parse entry
32 34 .hgtags@c071f74ab5eb, line 4: node 'foo' is not well formed
33 35 .hgtags@4ca6f1b1a68c, line 2: node 'x' is not well formed
34 36 localtags, line 1: tag 'invalid' refers to unknown node
35 37 tag: tip
36 38 parent: 3:b2ef3841386b
37 39 user: test
38 40 date: Mon Jan 12 13:46:40 1970 +0000
39 41 summary: head
40 42
41 43 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
42 44 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
45 created new head
43 46 tip 4:36195b728445
44 47 bar 1:b204a97e6e8d
45 48 changeset: 5:57e1983b4a60
46 49 tag: tip
47 50 user: test
48 51 date: Mon Jan 12 13:46:40 1970 +0000
49 52 summary: Removed tag bar
50 53
51 54 tip 5:57e1983b4a60
52 55 % remove nonexistent tag
53 56 abort: tag 'foobar' does not exist
54 57 changeset: 5:57e1983b4a60
55 58 tag: tip
56 59 user: test
57 60 date: Mon Jan 12 13:46:40 1970 +0000
58 61 summary: Removed tag bar
59 62
60 63 tip 5:d8bb4d1eff25
61 64 bar 0:b409d9da318e
62 65 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
66 created new head
63 67 tip 6:b5ff9d142648
64 68 bar 0:b409d9da318e
65 69 abort: tag 'bar' already exists (use -f to force)
66 70 tip 6:b5ff9d142648
67 71 bar 0:b409d9da318e
68 72 adding foo
69 73 tip 3:ca8479b4351c
70 74 bar 2:72b852876a42
71 75 % bar should still point to rev 2
72 76 tip 4:40af5d225513
73 77 bar 2:72b852876a42
74 78 adding foo
75 79 abort: tag 'localtag' is not a global tag
76 80 abort: tag 'globaltag' is not a local tag
77 81 tip 1:a0b6fe111088
78 82 localtag 0:bbd179dfa0a7 local
79 83 globaltag 0:bbd179dfa0a7
@@ -1,124 +1,126 b''
1 1 adding r1
2 2 adding r2
3 3 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
4 4 adding b1
5 created new head
5 6 adding b2
6 7 adding b3
7 8 4 b3
8 9 3 b2
9 10 2 0:17ab29e464c6 b1
10 11 1 r2
11 12 0 r1
12 13 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
13 14 1 files updated, 0 files merged, 3 files removed, 0 files unresolved
14 15 % rebase b onto r1
15 16 applying 37a1297eb21b
16 17 37a1297eb21b transplanted to e234d668f844
17 18 applying 722f4667af76
18 19 722f4667af76 transplanted to 539f377d78df
19 20 applying a53251cdf717
20 21 a53251cdf717 transplanted to ffd6818a3975
21 22 7 b3
22 23 6 b2
23 24 5 1:d11e3596cc1a b1
24 25 4 b3
25 26 3 b2
26 27 2 0:17ab29e464c6 b1
27 28 1 r2
28 29 0 r1
29 30 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
30 31 1 files updated, 0 files merged, 3 files removed, 0 files unresolved
31 32 % rebase b onto r1, skipping b2
32 33 applying 37a1297eb21b
33 34 37a1297eb21b transplanted to e234d668f844
34 35 applying a53251cdf717
35 36 a53251cdf717 transplanted to 7275fda4d04f
36 37 6 b3
37 38 5 1:d11e3596cc1a b1
38 39 4 b3
39 40 3 b2
40 41 2 0:17ab29e464c6 b1
41 42 1 r2
42 43 0 r1
43 44 % remote transplant
44 45 requesting all changes
45 46 adding changesets
46 47 adding manifests
47 48 adding file changes
48 49 added 2 changesets with 2 changes to 2 files
49 50 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
50 51 searching for changes
51 52 applying 37a1297eb21b
52 53 37a1297eb21b transplanted to c19cf0ccb069
53 54 applying a53251cdf717
54 55 a53251cdf717 transplanted to f7fe5bf98525
55 56 3 b3
56 57 (transplanted from a53251cdf717679d1907b289f991534be05c997a)
57 58 2 b1
58 59 (transplanted from 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21)
59 60 1 r2
60 61 0 r1
61 62 % skip previous transplants
62 63 searching for changes
63 64 applying 722f4667af76
64 65 722f4667af76 transplanted to 47156cd86c0b
65 66 4 b2
66 67 3 b3
67 68 (transplanted from a53251cdf717679d1907b289f991534be05c997a)
68 69 2 b1
69 70 (transplanted from 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21)
70 71 1 r2
71 72 0 r1
72 73 % skip local changes transplanted to the source
73 74 adding b4
74 75 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
75 76 searching for changes
76 77 applying 4333daefcb15
77 78 4333daefcb15 transplanted to 5f42c04e07cc
78 79 % remote transplant with pull
79 80 requesting all changes
80 81 adding changesets
81 82 adding manifests
82 83 adding file changes
83 84 added 1 changesets with 1 changes to 1 files
84 85 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
85 86 searching for changes
86 87 searching for changes
87 88 adding changesets
88 89 adding manifests
89 90 adding file changes
90 91 added 1 changesets with 1 changes to 1 files
91 92 applying a53251cdf717
92 93 a53251cdf717 transplanted to 8d9279348abb
93 94 2 b3
94 95 1 b1
95 96 0 r1
96 97 % transplant --continue
97 98 adding foo
98 99 adding toremove
99 100 adding added
100 101 removing toremove
101 102 adding bar
102 103 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
104 created new head
103 105 applying a1e30dd1b8e7
104 106 patching file foo
105 107 Hunk #1 FAILED at 0
106 108 1 out of 1 hunk FAILED -- saving rejects to file foo.rej
107 109 patch failed to apply
108 110 abort: Fix up the merge and run hg transplant --continue
109 111 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
110 112 applying a1e30dd1b8e7
111 113 patching file foo
112 114 Hunk #1 FAILED at 0
113 115 1 out of 1 hunk FAILED -- saving rejects to file foo.rej
114 116 patch failed to apply
115 117 abort: Fix up the merge and run hg transplant --continue
116 118 a1e30dd1b8e7 transplanted as f1563cf27039
117 119 skipping already applied revision 1:a1e30dd1b8e7
118 120 applying 1739ac5f6139
119 121 1739ac5f6139 transplanted to d649c221319f
120 122 applying 0282d5fbbe02
121 123 0282d5fbbe02 transplanted to 77418277ccb3
122 124 added
123 125 bar
124 126 foo
@@ -1,147 +1,148 b''
1 1 adding a
2 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 3 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 4 diff -r 33aaa84a386b a
5 5 --- a/a
6 6 +++ b/a
7 7 @@ -1,1 +1,1 @@
8 8 -a
9 9 +abc
10 10 adding b
11 11 M a
12 12 changeset: 0:33aaa84a386b
13 13 user: test
14 14 date: Mon Jan 12 13:46:40 1970 +0000
15 15 summary: 1
16 16
17 17 resolving manifests
18 18 overwrite False partial False
19 19 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
20 20 searching for copies back to rev 1
21 21 unmatched files in other:
22 22 b
23 23 a: versions differ -> m
24 24 b: remote created -> g
25 25 picked tool 'true' for a (binary False symlink False)
26 26 merging a
27 27 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
28 28 getting b
29 29 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
30 30 changeset: 1:802f095af299
31 31 tag: tip
32 32 user: test
33 33 date: Mon Jan 12 13:46:40 1970 +0000
34 34 summary: 2
35 35
36 36 resolving manifests
37 37 overwrite False partial False
38 38 ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
39 39 b: remote deleted -> r
40 40 removing b
41 41 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
42 42 changeset: 0:33aaa84a386b
43 43 user: test
44 44 date: Mon Jan 12 13:46:40 1970 +0000
45 45 summary: 1
46 46
47 47 abort: there is nothing to merge - use "hg update" instead
48 48 failed
49 49 changeset: 0:33aaa84a386b
50 50 user: test
51 51 date: Mon Jan 12 13:46:40 1970 +0000
52 52 summary: 1
53 53
54 54 resolving manifests
55 55 overwrite False partial False
56 56 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
57 57 searching for copies back to rev 1
58 58 unmatched files in other:
59 59 b
60 60 a: versions differ -> m
61 61 b: remote created -> g
62 62 picked tool 'true' for a (binary False symlink False)
63 63 merging a
64 64 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
65 65 getting b
66 66 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
67 67 changeset: 1:802f095af299
68 68 tag: tip
69 69 user: test
70 70 date: Mon Jan 12 13:46:40 1970 +0000
71 71 summary: 2
72 72
73 73 changeset: 1:802f095af299
74 74 tag: tip
75 75 user: test
76 76 date: Mon Jan 12 13:46:40 1970 +0000
77 77 files: a b
78 78 description:
79 79 2
80 80
81 81
82 82 changeset: 0:33aaa84a386b
83 83 user: test
84 84 date: Mon Jan 12 13:46:40 1970 +0000
85 85 files: a
86 86 description:
87 87 1
88 88
89 89
90 90 diff -r 802f095af299 a
91 91 --- a/a
92 92 +++ b/a
93 93 @@ -1,1 +1,1 @@
94 94 -a2
95 95 +abc
96 96 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
97 97 adding b
98 created new head
98 99 M a
99 100 changeset: 1:802f095af299
100 101 user: test
101 102 date: Mon Jan 12 13:46:40 1970 +0000
102 103 summary: 2
103 104
104 105 abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes
105 106 failed
106 107 abort: outstanding uncommitted changes
107 108 failed
108 109 resolving manifests
109 110 overwrite False partial False
110 111 ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
111 112 searching for copies back to rev 1
112 113 a: versions differ -> m
113 114 b: versions differ -> m
114 115 picked tool 'true' for a (binary False symlink False)
115 116 merging a
116 117 my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
117 118 picked tool 'true' for b (binary False symlink False)
118 119 merging b
119 120 my b@802f095af299+ other b@030602aee63d ancestor b@000000000000
120 121 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
121 122 (branch merge, don't forget to commit)
122 123 changeset: 1:802f095af299
123 124 user: test
124 125 date: Mon Jan 12 13:46:40 1970 +0000
125 126 summary: 2
126 127
127 128 changeset: 2:030602aee63d
128 129 tag: tip
129 130 parent: 0:33aaa84a386b
130 131 user: test
131 132 date: Mon Jan 12 13:46:40 1970 +0000
132 133 summary: 3
133 134
134 135 diff -r 802f095af299 a
135 136 --- a/a
136 137 +++ b/a
137 138 @@ -1,1 +1,1 @@
138 139 -a2
139 140 +abc
140 141 adding a
141 142 pulling from ../a
142 143 requesting all changes
143 144 adding changesets
144 145 adding manifests
145 146 adding file changes
146 147 added 1 changesets with 1 changes to 1 files
147 148 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -1,54 +1,55 b''
1 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2 2 Main should be gone
3 3 a
4 created new head
4 5 changeset: 3:ded32b0db104
5 6 tag: tip
6 7 user: test
7 8 date: Mon Jan 12 13:46:40 1970 +0000
8 9 summary: Added side2
9 10
10 11 changeset: 2:92a816cea698
11 12 parent: 0:537353581d3d
12 13 user: test
13 14 date: Mon Jan 12 13:46:40 1970 +0000
14 15 summary: Added side1
15 16
16 17 changeset: 1:221226fb2bd8
17 18 user: test
18 19 date: Mon Jan 12 13:46:40 1970 +0000
19 20 summary: Added main
20 21
21 22 changeset: 0:537353581d3d
22 23 user: test
23 24 date: Mon Jan 12 13:46:40 1970 +0000
24 25 summary: Added a
25 26
26 27 Should have two heads, side2 and main
27 28 changeset: 3:ded32b0db104
28 29 tag: tip
29 30 user: test
30 31 date: Mon Jan 12 13:46:40 1970 +0000
31 32 summary: Added side2
32 33
33 34 changeset: 1:221226fb2bd8
34 35 user: test
35 36 date: Mon Jan 12 13:46:40 1970 +0000
36 37 summary: Added main
37 38
38 39 Should show a side1 side2
39 40 a
40 41 side1
41 42 side2
42 43 resolving manifests
43 44 overwrite True partial False
44 45 ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8
45 46 side2: remote deleted -> r
46 47 side1: remote deleted -> r
47 48 main: remote created -> g
48 49 getting main
49 50 removing side1
50 51 removing side2
51 52 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
52 53 Should only show a main
53 54 a
54 55 main
General Comments 0
You need to be logged in to leave comments. Login now