# HG changeset patch # User Pierre-Yves David # Date 1434760529 25200 # Node ID 8794a4680bdd78fe9e452611797f9b018fc031df # Parent 64515965c0df5055c63d5faa483d7cf527e25732 evolve: warn about every skipped evolution When we could not evolve a revision, we used to silently ignore it. We now inform the user that we ignored something and tell him why (with more or less informative message). diff -r 64515965c0df -r 8794a4680bdd hgext/evolve.py --- a/hgext/evolve.py Fri Jun 19 17:03:40 2015 -0700 +++ b/hgext/evolve.py Fri Jun 19 17:35:29 2015 -0700 @@ -1409,8 +1409,10 @@ dependencies[dependent].remove(rev) if not dependencies[dependent]: solvablerevs.append(dependent) + del dependencies[rev] ordering.append(rev) + ordering.extend(sorted(dependencies)) return ordering @command('^evolve|stabilize|solve', @@ -1609,11 +1611,14 @@ obs = obs.parents()[0] newer = obsolete.successorssets(repo, obs.node()) if len(newer) > 1: - raise util.Abort(_("conflict rewriting. can't choose destination\n")) + msg = _("skipping %s: divergent rewriting. can't choose destination\n" % obs) + ui.write_err(msg) + return 2 targets = newer[0] assert targets if len(targets) > 1: - raise util.Abort(_("does not handle split parents yet\n")) + msg = _("does not handle split parents yet\n") + ui.write_err(msg) return 2 target = targets[0] displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) @@ -1650,13 +1655,15 @@ bumped = repo[bumped.rev()] # For now we deny bumped merge if len(bumped.parents()) > 1: - raise util.Abort('late comer stabilization is confused by bumped' - ' %s being a merge' % bumped) + msg = _('skipping %s : we do not handle merge yet\n' % bumped) + ui.write_err(msg) + return 2 prec = repo.set('last(allprecursors(%d) and public())', bumped).next() # For now we deny target merge if len(prec.parents()) > 1: - raise util.Abort('late comer evolution is confused by precursors' - ' %s being a merge' % prec) + msg = _('skipping: %s: public version is a merge, this not handled yet\n' % prec) + ui.write_err(msg) + return 2 displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) if not ui.quiet or confirm: @@ -1759,37 +1766,46 @@ base, others = divergentdata(divergent) if len(others) > 1: othersstr = "[%s]" % (','.join([str(i) for i in others])) - hint = ("changeset %d is divergent with a changeset that got splitted " - "| into multiple ones:\n[%s]\n" - "| This is not handled by automatic evolution yet\n" - "| You have to fallback to manual handling with commands " - "such as:\n" - "| - hg touch -D\n" - "| - hg prune\n" - "| \n" - "| You should contact your local evolution Guru for help.\n" - % (divergent, othersstr)) - raise util.Abort("we do not handle divergence with split yet", - hint=hint) + msg = _("skipping %d:divergent with a changeset that got splitted into multiple ones:\n" + "|[%s]\n" + "| This is not handled by automatic evolution yet\n" + "| You have to fallback to manual handling with commands " + "such as:\n" + "| - hg touch -D\n" + "| - hg prune\n" + "| \n" + "| You should contact your local evolution Guru for help.\n" + % (divergent, othersstr)) + ui.write_err(msg) + return 2 other = others[0] if divergent.phase() <= phases.public: - raise util.Abort("we can't resolve this conflict from the public side", - hint="%s is public, try from %s" % (divergent, other)) + msg = _("skipping %s: we can't resolve divergence from the public side\n") % divergent + ui.write_err(msg) + hint = _("(%s is public, try from %s)\n" % (divergent, other)) + ui.write_err(hint) + return 2 if len(other.parents()) > 1: - raise util.Abort("divergent changeset can't be a merge (yet)", - hint="You have to fallback to solving this by hand...\n" - "| This probably means redoing the merge and using " - "| `hg prune` to kill older version.") + msg = _("skipping %s: divergent changeset can't be a merge (yet)\n" % divergent) + ui.write_err(msg) + hint = _("You have to fallback to solving this by hand...\n" + "| This probably means redoing the merge and using \n" + "| `hg prune` to kill older version.\n") + ui.write_err(hint) + return 2 if other.p1() not in divergent.parents(): - raise util.Abort("parents are not common (not handled yet)", - hint="| %(d)s, %(o)s are not based on the same changeset.\n" - "| With the current state of its implementation, \n" - "| evolve does not work in that case.\n" - "| rebase one of them next to the other and run \n" - "| this command again.\n" - "| - either: hg rebase --dest 'p1(%(d)s)' -r %(o)s\n" - "| - or: hg rebase --dest 'p1(%(o)s)' -r %(d)s" - % {'d': divergent, 'o': other}) + msg = _("skipping %s: have a different parent than %s (not handled yet)\n") % (divergent, other) + hint = _("| %(d)s, %(o)s are not based on the same changeset.\n" + "| With the current state of its implementation, \n" + "| evolve does not work in that case.\n" + "| rebase one of them next to the other and run \n" + "| this command again.\n" + "| - either: hg rebase --dest 'p1(%(d)s)' -r %(o)s\n" + "| - or: hg rebase --dest 'p1(%(o)s)' -r %(d)s\n" + % {'d': divergent, 'o': other}) + ui.write_err(msg) + ui.write_err(hint) + return 2 displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) if not ui.quiet or confirm: diff -r 64515965c0df -r 8794a4680bdd tests/test-evolve-order.t --- a/tests/test-evolve-order.t Fri Jun 19 17:03:40 2015 -0700 +++ b/tests/test-evolve-order.t Fri Jun 19 17:35:29 2015 -0700 @@ -258,5 +258,6 @@ $ hg evolve --rev 'unstable()' move:[30] add b4_ atop:[35] b3second + skipping 08a530ce67e1: divergent rewriting. can't choose destination working directory is now at a51a8a82fdba