699 ui.note(s) |
699 ui.note(s) |
700 |
700 |
701 ret = orig(ui, repo, *args, **kwargs) |
701 ret = orig(ui, repo, *args, **kwargs) |
702 nbunstable = len(getrevs(repo, 'unstable')) |
702 nbunstable = len(getrevs(repo, 'unstable')) |
703 nbbumped = len(getrevs(repo, 'bumped')) |
703 nbbumped = len(getrevs(repo, 'bumped')) |
704 nbdivergent = len(getrevs(repo, 'unstable')) |
704 nbdivergent = len(getrevs(repo, 'divergent')) |
705 write('unstable: %i changesets\n', nbunstable) |
705 write('unstable: %i changesets\n', nbunstable) |
706 write('bumped: %i changesets\n', nbbumped) |
706 write('bumped: %i changesets\n', nbbumped) |
707 write('divergent: %i changesets\n', nbdivergent) |
707 write('divergent: %i changesets\n', nbdivergent) |
708 return ret |
708 return ret |
709 |
709 |
996 stabilized on top of pctx or one of its descendants. None if none |
996 stabilized on top of pctx or one of its descendants. None if none |
997 can be found. |
997 can be found. |
998 """ |
998 """ |
999 def selfanddescendants(repo, pctx): |
999 def selfanddescendants(repo, pctx): |
1000 yield pctx |
1000 yield pctx |
|
1001 for prec in repo.set('allprecursors(%d)', pctx): |
|
1002 yield prec |
1001 for ctx in pctx.descendants(): |
1003 for ctx in pctx.descendants(): |
1002 yield ctx |
1004 yield ctx |
|
1005 for prec in repo.set('allprecursors(%d)', ctx): |
|
1006 yield prec |
1003 |
1007 |
1004 # Look for an unstable which can be stabilized as a child of |
1008 # Look for an unstable which can be stabilized as a child of |
1005 # node. The unstable must be a child of one of node predecessors. |
1009 # node. The unstable must be a child of one of node predecessors. |
1006 for ctx in selfanddescendants(repo, pctx): |
1010 for ctx in selfanddescendants(repo, pctx): |
1007 unstables = list(repo.set('unstable() and children(allprecursors(%d))', |
1011 for child in ctx.children(): |
1008 ctx.rev())) |
1012 if child.unstable(): |
1009 if unstables: |
1013 return child |
1010 return unstables[0] |
|
1011 return None |
1014 return None |
1012 |
1015 |
1013 def _solveunstable(ui, repo, orig, dryrun=False): |
1016 def _solveunstable(ui, repo, orig, dryrun=False): |
1014 """Stabilize a unstable changeset""" |
1017 """Stabilize a unstable changeset""" |
1015 obs = orig.parents()[0] |
1018 obs = orig.parents()[0] |
1016 if not obs.obsolete(): |
1019 if not obs.obsolete(): |
|
1020 print obs.rev(), orig.parents() |
|
1021 print orig.rev() |
1017 obs = orig.parents()[1] |
1022 obs = orig.parents()[1] |
1018 assert obs.obsolete() |
1023 assert obs.obsolete() |
1019 newer = obsolete.successorssets(repo, obs.node()) |
1024 newer = obsolete.successorssets(repo, obs.node()) |
1020 # search of a parent which is not killed |
1025 # search of a parent which is not killed |
1021 while not newer or newer == [()]: |
1026 while not newer or newer == [()]: |
1304 displayer.show(c) |
1309 displayer.show(c) |
1305 ui.warn(_('Multiple non-obsolete children, explicitly update to one\n')) |
1310 ui.warn(_('Multiple non-obsolete children, explicitly update to one\n')) |
1306 return 1 |
1311 return 1 |
1307 |
1312 |
1308 @command('^prune|obsolete|kill', |
1313 @command('^prune|obsolete|kill', |
1309 [('n', 'new', [], _("successor changeset"))], |
1314 [('n', 'new', [], _("successor changeset")), |
1310 _('[OPTION] REV...')) |
1315 ('r', 'rev', [], _("revisions to fold"))], |
|
1316 _('[OPTION] [-r] REV...')) |
1311 def kill(ui, repo, *revs, **opts): |
1317 def kill(ui, repo, *revs, **opts): |
1312 """mark a changeset as obsolete |
1318 """mark a changeset as obsolete |
1313 |
1319 |
1314 This update the parent directory to a not-killed parent if the current |
1320 This update the parent directory to a not-killed parent if the current |
1315 working directory parent are killed. |
1321 working directory parent are killed. |
1316 |
1322 |
1317 XXX bookmark support |
1323 XXX bookmark support |
1318 XXX handle merge |
1324 XXX handle merge |
1319 XXX check immutable first |
1325 XXX check immutable first |
1320 """ |
1326 """ |
|
1327 revs = list(revs) |
|
1328 revs.extend(opts['rev']) |
1321 wlock = repo.wlock() |
1329 wlock = repo.wlock() |
1322 try: |
1330 try: |
1323 lock = repo.lock() |
1331 lock = repo.lock() |
1324 try: |
1332 try: |
1325 new = set(noderange(repo, opts['new'])) |
1333 new = set(noderange(repo, opts['new'])) |
1657 tr.release() |
1665 tr.release() |
1658 finally: |
1666 finally: |
1659 lockmod.release(lock, wlock) |
1667 lockmod.release(lock, wlock) |
1660 |
1668 |
1661 @command('^fold', |
1669 @command('^fold', |
1662 [('r', 'rev', [], 'revisions to fold'), |
1670 [('r', 'rev', [], _("revisions to fold")), |
1663 ], |
1671 ], |
1664 # allow to choose the seed ? |
1672 # allow to choose the seed ? |
1665 _('[-r] revs')) |
1673 _('[-r] revs')) |
1666 def fold(ui, repo, *revs, **opts): |
1674 def fold(ui, repo, *revs, **opts): |
1667 """Fold multiple revisions into a single one""" |
1675 """Fold multiple revisions into a single one""" |