diff -r f8b65ff02e3e -r aff5996f3043 mercurial/transaction.py --- a/mercurial/transaction.py Fri Mar 09 16:10:55 2018 +0100 +++ b/mercurial/transaction.py Fri Mar 09 14:30:15 2018 -0800 @@ -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''): """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'' % + (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''): 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()