hgext/evolve.py
changeset 645 ca5459892427
parent 632 cb0807646f5a
parent 644 8e41d5b78dff
child 647 a2b805bacdc0
equal deleted inserted replaced
633:3d5bed04ee4c 645:ca5459892427
   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"""