equal
deleted
inserted
replaced
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.4.1' |
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) |