##// END OF EJS Templates
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt -
r11230:5116a077 default
parent child Browse files
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 del tr
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 del tr
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