Show More
@@ -1177,7 +1177,7 b' class localrepository(object):' | |||||
1177 | raise error.ProgrammingError('transaction requires locking') |
|
1177 | raise error.ProgrammingError('transaction requires locking') | |
1178 | tr = self.currenttransaction() |
|
1178 | tr = self.currenttransaction() | |
1179 | if tr is not None: |
|
1179 | if tr is not None: | |
1180 | return tr.nest() |
|
1180 | return tr.nest(name=desc) | |
1181 |
|
1181 | |||
1182 | # abort here if the journal already exists |
|
1182 | # abort here if the journal already exists | |
1183 | if self.svfs.exists("journal"): |
|
1183 | if self.svfs.exists("journal"): | |
@@ -1316,7 +1316,8 b' class localrepository(object):' | |||||
1316 | self.store.createmode, |
|
1316 | self.store.createmode, | |
1317 | validator=validate, |
|
1317 | validator=validate, | |
1318 | releasefn=releasefn, |
|
1318 | releasefn=releasefn, | |
1319 |
checkambigfiles=_cachedfiles |
|
1319 | checkambigfiles=_cachedfiles, | |
|
1320 | name=desc) | |||
1320 | tr.changes['revs'] = xrange(0, 0) |
|
1321 | tr.changes['revs'] = xrange(0, 0) | |
1321 | tr.changes['obsmarkers'] = set() |
|
1322 | tr.changes['obsmarkers'] = set() | |
1322 | tr.changes['phases'] = {} |
|
1323 | tr.changes['phases'] = {} |
@@ -105,7 +105,7 b' def _playback(journal, report, opener, v' | |||||
105 | class transaction(util.transactional): |
|
105 | class transaction(util.transactional): | |
106 | def __init__(self, report, opener, vfsmap, journalname, undoname=None, |
|
106 | def __init__(self, report, opener, vfsmap, journalname, undoname=None, | |
107 | after=None, createmode=None, validator=None, releasefn=None, |
|
107 | after=None, createmode=None, validator=None, releasefn=None, | |
108 | checkambigfiles=None): |
|
108 | checkambigfiles=None, name=r'<unnamed>'): | |
109 | """Begin a new transaction |
|
109 | """Begin a new transaction | |
110 |
|
110 | |||
111 | Begins a new transaction that allows rolling back writes in the event of |
|
111 | Begins a new transaction that allows rolling back writes in the event of | |
@@ -149,6 +149,8 b' class transaction(util.transactional):' | |||||
149 | if checkambigfiles: |
|
149 | if checkambigfiles: | |
150 | self.checkambigfiles.update(checkambigfiles) |
|
150 | self.checkambigfiles.update(checkambigfiles) | |
151 |
|
151 | |||
|
152 | self.names = [name] | |||
|
153 | ||||
152 | # A dict dedicated to precisely tracking the changes introduced in the |
|
154 | # A dict dedicated to precisely tracking the changes introduced in the | |
153 | # transaction. |
|
155 | # transaction. | |
154 | self.changes = {} |
|
156 | self.changes = {} | |
@@ -186,6 +188,11 b' class transaction(util.transactional):' | |||||
186 | # holds callbacks to call during abort |
|
188 | # holds callbacks to call during abort | |
187 | self._abortcallback = {} |
|
189 | self._abortcallback = {} | |
188 |
|
190 | |||
|
191 | def __repr__(self): | |||
|
192 | name = r'/'.join(self.names) | |||
|
193 | return (r'<transaction name=%s, count=%d, usages=%d>' % | |||
|
194 | (name, self.count, self.usages)) | |||
|
195 | ||||
189 | def __del__(self): |
|
196 | def __del__(self): | |
190 | if self.journal: |
|
197 | if self.journal: | |
191 | self._abort() |
|
198 | self._abort() | |
@@ -365,14 +372,17 b' class transaction(util.transactional):' | |||||
365 | self.file.flush() |
|
372 | self.file.flush() | |
366 |
|
373 | |||
367 | @active |
|
374 | @active | |
368 | def nest(self): |
|
375 | def nest(self, name=r'<unnamed>'): | |
369 | self.count += 1 |
|
376 | self.count += 1 | |
370 | self.usages += 1 |
|
377 | self.usages += 1 | |
|
378 | self.names.append(name) | |||
371 | return self |
|
379 | return self | |
372 |
|
380 | |||
373 | def release(self): |
|
381 | def release(self): | |
374 | if self.count > 0: |
|
382 | if self.count > 0: | |
375 | self.usages -= 1 |
|
383 | self.usages -= 1 | |
|
384 | if self.names: | |||
|
385 | self.names.pop() | |||
376 | # if the transaction scopes are left without being closed, fail |
|
386 | # if the transaction scopes are left without being closed, fail | |
377 | if self.count > 0 and self.usages == 0: |
|
387 | if self.count > 0 and self.usages == 0: | |
378 | self._abort() |
|
388 | self._abort() |
General Comments 0
You need to be logged in to leave comments.
Login now