diff --git a/hgext/rebase.py b/hgext/rebase.py index 231690dba9b4d31b5ad2c93284e454135f2763ca_aGdleHQvcmViYXNlLnB5..b63351f6a246cd8d444ed38641054fefc78bff93_aGdleHQvcmViYXNlLnB5 100644 --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -475,24 +475,12 @@ editopt = True editor = cmdutil.getcommiteditor(edit=editopt, editform=editform) revtoreuse = max(self.state) - dsguard = dirstateguard.dirstateguard(repo, 'rebase') - try: - newnode = concludenode(repo, revtoreuse, p1, self.external, - commitmsg=commitmsg, - extrafn=_makeextrafn(self.extrafns), - editor=editor, - keepbranches=self.keepbranchesf, - date=self.date) - dsguard.close() - release(dsguard) - except error.InterventionRequired: - dsguard.close() - release(dsguard) - raise - except Exception: - release(dsguard) - raise - + newnode = concludenode(repo, revtoreuse, p1, self.external, + commitmsg=commitmsg, + extrafn=_makeextrafn(self.extrafns), + editor=editor, + keepbranches=self.keepbranchesf, + date=self.date) if newnode is None: newrev = self.target else: @@ -734,6 +722,5 @@ return retcode with repo.transaction('rebase') as tr: - dsguard = dirstateguard.dirstateguard(repo, 'rebase') try: rbsrt._performrebase(tr) @@ -738,5 +725,3 @@ try: rbsrt._performrebase(tr) - dsguard.close() - release(dsguard) except error.InterventionRequired: @@ -742,5 +727,3 @@ except error.InterventionRequired: - dsguard.close() - release(dsguard) tr.close() raise @@ -745,8 +728,5 @@ tr.close() raise - except Exception: - release(dsguard) - raise rbsrt._finishrebase() finally: release(lock, wlock) @@ -874,12 +854,14 @@ '''Commit the wd changes with parents p1 and p2. Reuse commit info from rev but also store useful information in extra. Return node of committed revision.''' - repo.setparents(repo[p1].node(), repo[p2].node()) - ctx = repo[rev] - if commitmsg is None: - commitmsg = ctx.description() - keepbranch = keepbranches and repo[p1].branch() != ctx.branch() - extra = {'rebase_source': ctx.hex()} - if extrafn: - extrafn(ctx, extra) + dsguard = dirstateguard.dirstateguard(repo, 'rebase') + try: + repo.setparents(repo[p1].node(), repo[p2].node()) + ctx = repo[rev] + if commitmsg is None: + commitmsg = ctx.description() + keepbranch = keepbranches and repo[p1].branch() != ctx.branch() + extra = {'rebase_source': ctx.hex()} + if extrafn: + extrafn(ctx, extra) @@ -885,12 +867,12 @@ - targetphase = max(ctx.phase(), phases.draft) - overrides = {('phases', 'new-commit'): targetphase} - with repo.ui.configoverride(overrides, 'rebase'): - if keepbranch: - repo.ui.setconfig('ui', 'allowemptycommit', True) - # Commit might fail if unresolved files exist - if date is None: - date = ctx.date() - newnode = repo.commit(text=commitmsg, user=ctx.user(), - date=date, extra=extra, editor=editor) + targetphase = max(ctx.phase(), phases.draft) + overrides = {('phases', 'new-commit'): targetphase} + with repo.ui.configoverride(overrides, 'rebase'): + if keepbranch: + repo.ui.setconfig('ui', 'allowemptycommit', True) + # Commit might fail if unresolved files exist + if date is None: + date = ctx.date() + newnode = repo.commit(text=commitmsg, user=ctx.user(), + date=date, extra=extra, editor=editor) @@ -896,6 +878,9 @@ - repo.dirstate.setbranch(repo[newnode].branch()) - return newnode + repo.dirstate.setbranch(repo[newnode].branch()) + dsguard.close() + return newnode + finally: + release(dsguard) def rebasenode(repo, rev, p1, base, state, collapse, target): 'Rebase a single revision rev on top of p1 using base as merge ancestor' diff --git a/tests/test-rebase-collapse.t b/tests/test-rebase-collapse.t index 231690dba9b4d31b5ad2c93284e454135f2763ca_dGVzdHMvdGVzdC1yZWJhc2UtY29sbGFwc2UudA==..b63351f6a246cd8d444ed38641054fefc78bff93_dGVzdHMvdGVzdC1yZWJhc2UtY29sbGFwc2UudA== 100644 --- a/tests/test-rebase-collapse.t +++ b/tests/test-rebase-collapse.t @@ -572,8 +572,6 @@ o 0: 'A' $ hg rebase --keepbranches --collapse -s 1 -d 3 - transaction abort! - rollback completed abort: cannot collapse multiple named branches [255] diff --git a/tests/test-rebase-scenario-global.t b/tests/test-rebase-scenario-global.t index 231690dba9b4d31b5ad2c93284e454135f2763ca_dGVzdHMvdGVzdC1yZWJhc2Utc2NlbmFyaW8tZ2xvYmFsLnQ=..b63351f6a246cd8d444ed38641054fefc78bff93_dGVzdHMvdGVzdC1yZWJhc2Utc2NlbmFyaW8tZ2xvYmFsLnQ= 100644 --- a/tests/test-rebase-scenario-global.t +++ b/tests/test-rebase-scenario-global.t @@ -270,8 +270,6 @@ $ hg rebase -s 6 -d 1 rebasing 6:eea13746799a "G" - transaction abort! - rollback completed abort: cannot use revision 6 as base, result would have 3 parents [255] $ hg rebase --abort