D5456: shelve: pass transaction around to clarify where it's used
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Thu Dec 20 07:02:36 EST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGa06dc62f1c82: shelve: pass transaction around to clarify where it's used (authored by martinvonz, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D5456?vs=12904&id=12916
REVISION DETAIL
https://phab.mercurial-scm.org/D5456
AFFECTED FILES
hgext/shelve.py
CHANGE DETAILS
diff --git a/hgext/shelve.py b/hgext/shelve.py
--- a/hgext/shelve.py
+++ b/hgext/shelve.py
@@ -137,15 +137,14 @@
raise
raise error.Abort(_("shelved change '%s' not found") % self.name)
- def applybundle(self):
+ def applybundle(self, tr):
fp = self.opener()
try:
targetphase = phases.internal
if not phases.supportinternal(self.repo):
targetphase = phases.secret
gen = exchange.readbundle(self.repo.ui, fp, self.fname, self.vfs)
pretip = self.repo['tip']
- tr = self.repo.currenttransaction()
bundle2.applybundle(self.repo, gen, tr,
source='unshelve',
url='bundle:' + self.vfs.join(self.fname),
@@ -324,10 +323,9 @@
if mark:
bookmarks.activate(repo, mark)
-def _aborttransaction(repo):
+def _aborttransaction(repo, tr):
'''Abort current transaction for shelve/unshelve, but keep dirstate
'''
- tr = repo.currenttransaction()
dirstatebackupname = 'dirstate.shelve'
narrowspecbackupname = 'narrowspec.shelve'
repo.dirstate.savebackup(tr, dirstatebackupname)
@@ -444,12 +442,11 @@
extra['shelve_unknown'] = '\0'.join(s.unknown)
repo[None].add(s.unknown)
-def _finishshelve(repo):
+def _finishshelve(repo, tr):
if phases.supportinternal(repo):
- tr = repo.currenttransaction()
tr.close()
else:
- _aborttransaction(repo)
+ _aborttransaction(repo, tr)
def createcmd(ui, repo, pats, opts):
"""subcommand that creates a new shelve"""
@@ -516,7 +513,7 @@
if origbranch != repo['.'].branch() and not _isbareshelve(pats, opts):
repo.dirstate.setbranch(origbranch)
- _finishshelve(repo)
+ _finishshelve(repo, tr)
finally:
_restoreactivebookmark(repo, activebookmark)
lockmod.release(tr, lock)
@@ -791,15 +788,15 @@
tmpwctx = repo[node]
return tmpwctx, addedbefore
-def _unshelverestorecommit(ui, repo, basename):
+def _unshelverestorecommit(ui, repo, tr, basename):
"""Recreate commit in the repository during the unshelve"""
repo = repo.unfiltered()
node = None
if shelvedfile(repo, basename, 'shelve').exists():
node = shelvedfile(repo, basename, 'shelve').readinfo()['node']
if node is None or node not in repo:
with ui.configoverride({('ui', 'quiet'): True}):
- shelvectx = shelvedfile(repo, basename, 'hg').applybundle()
+ shelvectx = shelvedfile(repo, basename, 'hg').applybundle(tr)
# We might not strip the unbundled changeset, so we should keep track of
# the unshelve node in case we need to reuse it (eg: unshelve --keep)
if node is None:
@@ -879,7 +876,7 @@
# hooks still fire and try to operate on the missing commits.
# Clean up manually to prevent this.
repo.unfiltered().changelog.strip(oldtiprev, tr)
- _aborttransaction(repo)
+ _aborttransaction(repo, tr)
def _checkunshelveuntrackedproblems(ui, repo, shelvectx):
"""Check potential problems which may result from working
@@ -1023,7 +1020,7 @@
activebookmark = _backupactivebookmark(repo)
tmpwctx, addedbefore = _commitworkingcopychanges(ui, repo, opts,
tmpwctx)
- repo, shelvectx = _unshelverestorecommit(ui, repo, basename)
+ repo, shelvectx = _unshelverestorecommit(ui, repo, tr, basename)
_checkunshelveuntrackedproblems(ui, repo, shelvectx)
branchtorestore = ''
if shelvectx.branch() != shelvectx.p1().branch():
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list