# HG changeset patch # User Pulkit Goyal <7895pulkit@gmail.com> # Date 1515244695 -19800 # Node ID 823031b51d81b98ee87da125da7b9c2d137170c7 # Parent 2b06f144b6e0978580d0e3fac2c7238054555146 evolve: don't use graftstate for continuing `hg evolve` Before this patch, if user runs `hg evolve`, we read the evolve state, write a graftstate from that information and run graft command. This patch replaces that logic with new logic which does not depends on the graft state. The new logic is very filtered part of logic from graft command. We did not require a lot of opts checking and filtering revs logic from the graft command as our use case is fixed. This is the start of series/work which will make `hg evolve` better and have a good statefile for itself. diff -r 2b06f144b6e0 -r 823031b51d81 hgext3rd/evolve/__init__.py --- a/hgext3rd/evolve/__init__.py Tue Jan 09 23:42:57 2018 +0530 +++ b/hgext3rd/evolve/__init__.py Sat Jan 06 18:48:15 2018 +0530 @@ -1610,19 +1610,26 @@ if state is None: raise error.Abort('no evolve to continue') orig = repo[state['current']] - # XXX This is a terrible terrible hack, please get rid of it. - lock = repo.wlock() - try: - repo.vfs.write('graftstate', orig.hex() + '\n') - try: - graftcmd = commands.table['graft'][0] - ret = graftcmd(ui, repo, old_obsolete=True, **{'continue': True}) - _evolvestatedelete(repo) - return ret - finally: - util.unlinkpath(repo.vfs.join('graftstate'), ignoremissing=True) - finally: - lock.release() + with repo.wlock(), repo.lock(): + ctx = orig + source = ctx.extra().get('source') + extra = {} + if source: + extra['source'] = source + extra['intermediate-source'] = ctx.hex() + else: + extra['source'] = ctx.hex() + user = ctx.user() + date = ctx.date() + message = ctx.description() + ui.status(_('evolving %d:%s "%s"\n') % (ctx.rev(), ctx, + message.split('\n', 1)[0])) + node = repo.commit(text=message, user=user, + date=date, extra=extra) + obsolete.createmarkers(repo, [(ctx, (repo[node],))]) + _evolvestatedelete(repo) + return + cmdutil.bailifchanged(repo) if revopt and allopt: diff -r 2b06f144b6e0 -r 823031b51d81 tests/test-stabilize-conflict.t --- a/tests/test-stabilize-conflict.t Tue Jan 09 23:42:57 2018 +0530 +++ b/tests/test-stabilize-conflict.t Sat Jan 06 18:48:15 2018 +0530 @@ -168,7 +168,7 @@ $ hg resolve --all -m (no more unresolved files) $ hg evolve --continue - grafting 4:71c18f70c34f "babar count up to fifteen" + evolving 4:71c18f70c34f "babar count up to fifteen" $ hg resolve -l $ hg log -G @ changeset: 6:1836b91c6c1d diff -r 2b06f144b6e0 -r 823031b51d81 tests/test-stabilize-result.t --- a/tests/test-stabilize-result.t Tue Jan 09 23:42:57 2018 +0530 +++ b/tests/test-stabilize-result.t Sat Jan 06 18:48:15 2018 +0530 @@ -93,13 +93,13 @@ +a +newer a $ hg evolve --continue - grafting 4:3655f0f50885 "newer a" + evolving 4:3655f0f50885 "newer a" abort: unresolved merge conflicts (see 'hg help resolve') [255] $ hg resolve -m a (no more unresolved files) $ hg evolve --continue - grafting 4:3655f0f50885 "newer a" + evolving 4:3655f0f50885 "newer a" Stabilize latecomer with different parent =========================================