# HG changeset patch # User Dan Villiom Podlaski Christiansen # Date 1382435461 -7200 # Node ID ddbea2fdee5e172c0fdf402c1f76035e8b37239e # Parent f728edc7fcd19803585e5f690b188604a9f99232 evolve: allow updating to the successor if the parent is obsolete Although 'hg update' handles this as well, it will also update to tipmost descendent of the successor, if any. diff -r f728edc7fcd1 -r ddbea2fdee5e README --- a/README Wed Jul 31 19:56:28 2013 +0200 +++ b/README Tue Oct 22 11:51:01 2013 +0200 @@ -49,6 +49,8 @@ - amend: drop the deprecated note option - amend: use core mechanism for amend (fix multiple bugs) - parents command: add "working directory parent is obsolete" message +- evolve command: allow updating to the successor if the parent is + obsolete 3.1.0 -- 2013-02-11 diff -r f728edc7fcd1 -r ddbea2fdee5e hgext/evolve.py --- a/hgext/evolve.py Wed Jul 31 19:56:28 2013 +0200 +++ b/hgext/evolve.py Tue Oct 22 11:51:01 2013 +0200 @@ -850,6 +850,8 @@ - rebase unstable changeset to make it stable again, - create proper diff from bumped changeset, - merge divergent changesets. + - update to a successor if the working directory parent is + obsolete By default, take the first trouble changeset that looks relevant. @@ -881,6 +883,40 @@ tr = _picknexttroubled(ui, repo, anyopt or allopt) if tr is None: + if repo['.'].obsolete(): + displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) + successors = set() + + for successorsset in obsolete.successorssets(repo, repo['.'].node()): + for nodeid in successorsset: + successors.add(repo[nodeid]) + + if not successors: + ui.warn(_('parent is obsolete without successors; ' + + 'likely killed\n')) + return 2 + + elif len(successors) > 1: + ui.warn(_('parent is obsolete with multiple successors:\n')) + + for ctx in sorted(successors, key=lambda ctx: ctx.rev()): + displayer.show(ctx) + + return 2 + + else: + ctx = successors.pop() + + ui.status(_('update:')) + if not ui.quiet: + displayer.show(ctx) + + if dryrunopt: + print 'hg update %s' % ctx.rev() + return 0 + else: + return hg.update(repo, ctx.rev()) + troubled = repo.revs('troubled()') if troubled: ui.write_err(_('nothing to evolve here\n')) diff -r f728edc7fcd1 -r ddbea2fdee5e tests/test-obsolete.t --- a/tests/test-obsolete.t Wed Jul 31 19:56:28 2013 +0200 +++ b/tests/test-obsolete.t Tue Oct 22 11:51:01 2013 +0200 @@ -663,3 +663,17 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: add obsolet_conflicting_d + + $ hg up --hidden 3 -q + working directory parent is obsolete! + $ hg evolve + parent is obsolete with multiple successors: + [4] add obsol_c' + [10] add obsol_c + [2] + $ hg olog + changeset: 2:4538525df7e2 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add c + diff -r f728edc7fcd1 -r ddbea2fdee5e tests/test-tutorial.t --- a/tests/test-tutorial.t Wed Jul 31 19:56:28 2013 +0200 +++ b/tests/test-tutorial.t Tue Oct 22 11:51:01 2013 +0200 @@ -673,7 +673,13 @@ no changes found working directory parent is obsolete! - $ hg up ee942144f952 +now let's see where we are, and update to the successor + + $ hg parents + bf1b0d202029 (draft): animals + working directory parent is obsolete! + $ hg evolve + update:[8] animals 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Relocating unstable change after prune