Show More
@@ -613,8 +613,7 b' class queue(object):' | |||||
613 | repo.dirstate.invalidate() |
|
613 | repo.dirstate.invalidate() | |
614 | raise |
|
614 | raise | |
615 | finally: |
|
615 | finally: | |
616 | del tr |
|
616 | release(tr, lock, wlock) | |
617 | release(lock, wlock) |
|
|||
618 | self.removeundo(repo) |
|
617 | self.removeundo(repo) | |
619 |
|
618 | |||
620 | def _apply(self, repo, series, list=False, update_status=True, |
|
619 | def _apply(self, repo, series, list=False, update_status=True, |
@@ -971,7 +971,8 b' class localrepository(repo.repository):' | |||||
971 | self.branchtags() |
|
971 | self.branchtags() | |
972 | return n |
|
972 | return n | |
973 | finally: |
|
973 | finally: | |
974 |
|
|
974 | if tr: | |
|
975 | tr.release() | |||
975 | lock.release() |
|
976 | lock.release() | |
976 |
|
977 | |||
977 | def destroyed(self): |
|
978 | def destroyed(self): | |
@@ -2194,7 +2195,7 b' class localrepository(repo.repository):' | |||||
2194 |
|
2195 | |||
2195 | tr.close() |
|
2196 | tr.close() | |
2196 | finally: |
|
2197 | finally: | |
2197 |
|
|
2198 | tr.release() | |
2198 |
|
2199 | |||
2199 | if changesets > 0: |
|
2200 | if changesets > 0: | |
2200 | # forcefully update the on-disk branch cache |
|
2201 | # forcefully update the on-disk branch cache |
@@ -43,6 +43,7 b' def _playback(journal, report, opener, e' | |||||
43 | class transaction(object): |
|
43 | class transaction(object): | |
44 | def __init__(self, report, opener, journal, after=None, createmode=None): |
|
44 | def __init__(self, report, opener, journal, after=None, createmode=None): | |
45 | self.count = 1 |
|
45 | self.count = 1 | |
|
46 | self.usages = 1 | |||
46 | self.report = report |
|
47 | self.report = report | |
47 | self.opener = opener |
|
48 | self.opener = opener | |
48 | self.after = after |
|
49 | self.after = after | |
@@ -108,8 +109,16 b' class transaction(object):' | |||||
108 | @active |
|
109 | @active | |
109 | def nest(self): |
|
110 | def nest(self): | |
110 | self.count += 1 |
|
111 | self.count += 1 | |
|
112 | self.usages += 1 | |||
111 | return self |
|
113 | return self | |
112 |
|
114 | |||
|
115 | def release(self): | |||
|
116 | if self.count > 0: | |||
|
117 | self.usages -= 1 | |||
|
118 | # of the transaction scopes are left without being closed, fail | |||
|
119 | if self.count > 0 and self.usages == 0: | |||
|
120 | self._abort() | |||
|
121 | ||||
113 | def running(self): |
|
122 | def running(self): | |
114 | return self.count > 0 |
|
123 | return self.count > 0 | |
115 |
|
124 | |||
@@ -136,6 +145,7 b' class transaction(object):' | |||||
136 |
|
145 | |||
137 | def _abort(self): |
|
146 | def _abort(self): | |
138 | self.count = 0 |
|
147 | self.count = 0 | |
|
148 | self.usages = 0 | |||
139 | self.file.close() |
|
149 | self.file.close() | |
140 |
|
150 | |||
141 | try: |
|
151 | try: |
General Comments 0
You need to be logged in to leave comments.
Login now