hgext/evolve.py
changeset 1767 f746f787f82c
parent 1765 727c7211c810
child 1778 924b76a51d18
child 1784 c3741a5adbb0
equal deleted inserted replaced
1743:299cdaa24fa5 1767:f746f787f82c
    17     - alters core commands and extensions that rewrite history to use
    17     - alters core commands and extensions that rewrite history to use
    18       this feature,
    18       this feature,
    19     - improves some aspect of the early implementation in Mercurial core
    19     - improves some aspect of the early implementation in Mercurial core
    20 '''
    20 '''
    21 
    21 
    22 __version__ = '5.4.1'
    22 __version__ = '5.5.0'
    23 testedwith = '3.4.3 3.5.2 3.6.2 3.7.3 3.8.1 3.9'
    23 testedwith = '3.4.3 3.5.2 3.6.2 3.7.3 3.8.1 3.9 4.0'
    24 buglink = 'https://bz.mercurial-scm.org/'
    24 buglink = 'https://bz.mercurial-scm.org/'
    25 
    25 
    26 
    26 
    27 evolutionhelptext = """
    27 evolutionhelptext = """
    28 Obsolescence markers make it possible to mark changesets that have been
    28 Obsolescence markers make it possible to mark changesets that have been
   687 
   687 
   688 def _warnobsoletewc(ui, repo):
   688 def _warnobsoletewc(ui, repo):
   689     if repo['.'].obsolete():
   689     if repo['.'].obsolete():
   690         ui.warn(_('working directory parent is obsolete!\n'))
   690         ui.warn(_('working directory parent is obsolete!\n'))
   691         if (not ui.quiet) and obsolete.isenabled(repo, commandopt):
   691         if (not ui.quiet) and obsolete.isenabled(repo, commandopt):
   692             ui.warn(_('(use "hg evolve" to update to its successor)\n'))
   692             ui.warn(_("(use 'hg evolve' to update to its successor)\n"))
   693 
   693 
   694 @eh.wrapcommand("update")
   694 @eh.wrapcommand("update")
   695 @eh.wrapcommand("pull")
   695 @eh.wrapcommand("pull")
   696 def wrapmayobsoletewc(origfn, ui, repo, *args, **opts):
   696 def wrapmayobsoletewc(origfn, ui, repo, *args, **opts):
   697     """Warn that the working directory parent is an obsolete changeset"""
   697     """Warn that the working directory parent is an obsolete changeset"""
  1943             relocate(repo, orig, target, pctx, keepbranch)
  1943             relocate(repo, orig, target, pctx, keepbranch)
  1944         except MergeFailure:
  1944         except MergeFailure:
  1945             _evolvestatewrite(repo, {'current': orig.node()})
  1945             _evolvestatewrite(repo, {'current': orig.node()})
  1946             repo.ui.write_err(_('evolve failed!\n'))
  1946             repo.ui.write_err(_('evolve failed!\n'))
  1947             repo.ui.write_err(
  1947             repo.ui.write_err(
  1948                 _('fix conflict and run "hg evolve --continue"'
  1948                 _("fix conflict and run 'hg evolve --continue'"
  1949                   ' or use "hg update -C" to abort\n'))
  1949                   " or use 'hg update -C .' to abort\n"))
  1950             raise
  1950             raise
  1951 
  1951 
  1952 def _solvebumped(ui, repo, bumped, dryrun=False, confirm=False,
  1952 def _solvebumped(ui, repo, bumped, dryrun=False, confirm=False,
  1953                  progresscb=None):
  1953                  progresscb=None):
  1954     """Stabilize a bumped changeset"""
  1954     """Stabilize a bumped changeset"""
  2000                 obsolete.createmarkers(repo, [(bumped, (tmpctx,))])
  2000                 obsolete.createmarkers(repo, [(bumped, (tmpctx,))])
  2001         except MergeFailure:
  2001         except MergeFailure:
  2002             repo.opener.write('graftstate', bumped.hex() + '\n')
  2002             repo.opener.write('graftstate', bumped.hex() + '\n')
  2003             repo.ui.write_err(_('evolution failed!\n'))
  2003             repo.ui.write_err(_('evolution failed!\n'))
  2004             repo.ui.write_err(
  2004             repo.ui.write_err(
  2005                 _('fix conflict and run "hg evolve --continue"\n'))
  2005                 _("fix conflict and run 'hg evolve --continue'\n"))
  2006             raise
  2006             raise
  2007     # Create the new commit context
  2007     # Create the new commit context
  2008     repo.ui.status(_('computing new diff\n'))
  2008     repo.ui.status(_('computing new diff\n'))
  2009     files = set()
  2009     files = set()
  2010     copied = copies.pathcopies(prec, bumped)
  2010     copied = copies.pathcopies(prec, bumped)
  2146                              mergeancestor=True)
  2146                              mergeancestor=True)
  2147 
  2147 
  2148     hg._showstats(repo, stats)
  2148     hg._showstats(repo, stats)
  2149     if stats[3]:
  2149     if stats[3]:
  2150         repo.ui.status(_("use 'hg resolve' to retry unresolved file merges "
  2150         repo.ui.status(_("use 'hg resolve' to retry unresolved file merges "
  2151                          "or 'hg update -C .' to abandon\n"))
  2151                          "or 'hg update -C .' to abort\n"))
  2152     if stats[3] > 0:
  2152     if stats[3] > 0:
  2153         raise error.Abort('merge conflict between several amendments '
  2153         raise error.Abort('merge conflict between several amendments '
  2154             '(this is not automated yet)',
  2154             '(this is not automated yet)',
  2155             hint="""/!\ You can try:
  2155             hint="""/!\ You can try:
  2156 /!\ * manual merge + resolve => new cset X
  2156 /!\ * manual merge + resolve => new cset X
  2362                 result = 1
  2362                 result = 1
  2363             elif 1 < len(aspchildren):
  2363             elif 1 < len(aspchildren):
  2364                 ui.warn(_("ambigious next (unstable) changeset:\n"))
  2364                 ui.warn(_("ambigious next (unstable) changeset:\n"))
  2365                 for c in aspchildren:
  2365                 for c in aspchildren:
  2366                     displayer.show(repo[c])
  2366                     displayer.show(repo[c])
  2367                 ui.warn(_('(run "hg evolve --rev REV" on one of them)\n'))
  2367                 ui.warn(_("(run 'hg evolve --rev REV' on one of them)\n"))
  2368                 return 1
  2368                 return 1
  2369             else:
  2369             else:
  2370                 cmdutil.bailifchanged(repo)
  2370                 cmdutil.bailifchanged(repo)
  2371                 result = _solveone(ui, repo, repo[aspchildren[0]], dryrunopt,
  2371                 result = _solveone(ui, repo, repo[aspchildren[0]], dryrunopt,
  2372                                    False, lambda:None, category='unstable')
  2372                                    False, lambda:None, category='unstable')
  2506         for p in revs:
  2506         for p in revs:
  2507             cp = repo[p]
  2507             cp = repo[p]
  2508             if not cp.mutable():
  2508             if not cp.mutable():
  2509                 # note: createmarkers() would have raised something anyway
  2509                 # note: createmarkers() would have raised something anyway
  2510                 raise error.Abort('cannot prune immutable changeset: %s' % cp,
  2510                 raise error.Abort('cannot prune immutable changeset: %s' % cp,
  2511                                  hint='see "hg help phases" for details')
  2511                                  hint="see 'hg help phases' for details")
  2512             precs.append(cp)
  2512             precs.append(cp)
  2513         if not precs:
  2513         if not precs:
  2514             raise error.Abort('nothing to prune')
  2514             raise error.Abort('nothing to prune')
  2515 
  2515 
  2516         if _disallowednewunstable(repo, revs):
  2516         if _disallowednewunstable(repo, revs):
  2830         _uncommitdirstate(repo, old, match)
  2830         _uncommitdirstate(repo, old, match)
  2831         repo.dirstate.endparentchange()
  2831         repo.dirstate.endparentchange()
  2832         updatebookmarks(newid)
  2832         updatebookmarks(newid)
  2833         if not repo[newid].files():
  2833         if not repo[newid].files():
  2834             ui.warn(_("new changeset is empty\n"))
  2834             ui.warn(_("new changeset is empty\n"))
  2835             ui.status(_('(use "hg prune ." to remove it)\n'))
  2835             ui.status(_("(use 'hg prune .' to remove it)\n"))
  2836         tr.close()
  2836         tr.close()
  2837     finally:
  2837     finally:
  2838         lockmod.release(tr, lock, wlock)
  2838         lockmod.release(tr, lock, wlock)
  2839 
  2839 
  2840 @eh.wrapcommand('commit')
  2840 @eh.wrapcommand('commit')
  4042 evolvestateversion = 0
  4042 evolvestateversion = 0
  4043 
  4043 
  4044 @eh.uisetup
  4044 @eh.uisetup
  4045 def setupevolveunfinished(ui):
  4045 def setupevolveunfinished(ui):
  4046     data = ('evolvestate', True, False, _('evolve in progress'),
  4046     data = ('evolvestate', True, False, _('evolve in progress'),
  4047            _("use 'hg evolve --continue' or 'hg update' to abort"))
  4047            _("use 'hg evolve --continue' or 'hg update -C .' to abort"))
  4048     cmdutil.unfinishedstates.append(data)
  4048     cmdutil.unfinishedstates.append(data)
  4049 
  4049 
  4050 @eh.wrapfunction(hg, 'clean')
  4050 @eh.wrapfunction(hg, 'clean')
  4051 def clean(orig, repo, *args, **kwargs):
  4051 def clean(orig, repo, *args, **kwargs):
  4052     ret = orig(repo, *args, **kwargs)
  4052     ret = orig(repo, *args, **kwargs)