D2758: transaction: add a name and a __repr__ implementation (API)
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Fri Mar 9 22:31:26 UTC 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG49e2ca27c10e: transaction: add a name and a __str__ implementation (API) (authored by martinvonz, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D2758?vs=6791&id=6796
REVISION DETAIL
https://phab.mercurial-scm.org/D2758
AFFECTED FILES
mercurial/localrepo.py
mercurial/transaction.py
CHANGE DETAILS
diff --git a/mercurial/transaction.py b/mercurial/transaction.py
--- a/mercurial/transaction.py
+++ b/mercurial/transaction.py
@@ -105,7 +105,7 @@
class transaction(util.transactional):
def __init__(self, report, opener, vfsmap, journalname, undoname=None,
after=None, createmode=None, validator=None, releasefn=None,
- checkambigfiles=None):
+ checkambigfiles=None, name=r'<unnamed>'):
"""Begin a new transaction
Begins a new transaction that allows rolling back writes in the event of
@@ -149,6 +149,8 @@
if checkambigfiles:
self.checkambigfiles.update(checkambigfiles)
+ self.names = [name]
+
# A dict dedicated to precisely tracking the changes introduced in the
# transaction.
self.changes = {}
@@ -186,6 +188,11 @@
# holds callbacks to call during abort
self._abortcallback = {}
+ def __repr__(self):
+ name = r'/'.join(self.names)
+ return (r'<transaction name=%s, count=%d, usages=%d>' %
+ (name, self.count, self.usages))
+
def __del__(self):
if self.journal:
self._abort()
@@ -365,14 +372,17 @@
self.file.flush()
@active
- def nest(self):
+ def nest(self, name=r'<unnamed>'):
self.count += 1
self.usages += 1
+ self.names.append(name)
return self
def release(self):
if self.count > 0:
self.usages -= 1
+ if self.names:
+ self.names.pop()
# if the transaction scopes are left without being closed, fail
if self.count > 0 and self.usages == 0:
self._abort()
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -1177,7 +1177,7 @@
raise error.ProgrammingError('transaction requires locking')
tr = self.currenttransaction()
if tr is not None:
- return tr.nest()
+ return tr.nest(name=desc)
# abort here if the journal already exists
if self.svfs.exists("journal"):
@@ -1316,7 +1316,8 @@
self.store.createmode,
validator=validate,
releasefn=releasefn,
- checkambigfiles=_cachedfiles)
+ checkambigfiles=_cachedfiles,
+ name=desc)
tr.changes['revs'] = xrange(0, 0)
tr.changes['obsmarkers'] = set()
tr.changes['phases'] = {}
To: martinvonz, #hg-reviewers, durin42
Cc: durin42, mercurial-devel
More information about the Mercurial-devel
mailing list