##// END OF EJS Templates
revlog: make sure the files are closed after an exception happens...
Benoit Boissinot -
r6261:7c8101b5 default
parent child Browse files
Show More
@@ -977,6 +977,7 b' class revlog(object):'
977 977
978 978 tr.add(self.datafile, dataoff)
979 979 df = self.opener(self.datafile, 'w')
980 try:
980 981 calc = self._io.size
981 982 for r in xrange(self.count()):
982 983 start = self.start(r) + (r + 1) * calc
@@ -984,8 +985,10 b' class revlog(object):'
984 985 fp.seek(start)
985 986 d = fp.read(length)
986 987 df.write(d)
988 finally:
989 df.close()
990
987 991 fp.close()
988 df.close()
989 992 fp = self.opener(self.indexfile, 'w', atomictemp=True)
990 993 self.version &= ~(REVLOGNGINLINEDATA)
991 994 self._inline = False
@@ -993,6 +996,7 b' class revlog(object):'
993 996 e = self._io.packentry(self.index[i], self.node, self.version, i)
994 997 fp.write(e)
995 998
999 fp.close()
996 1000 # if we don't call rename, the temp file will never replace the
997 1001 # real index
998 1002 fp.rename()
@@ -1013,7 +1017,12 b' class revlog(object):'
1013 1017 if not self._inline:
1014 1018 dfh = self.opener(self.datafile, "a")
1015 1019 ifh = self.opener(self.indexfile, "a+")
1020 try:
1016 1021 return self._addrevision(text, transaction, link, p1, p2, d, ifh, dfh)
1022 finally:
1023 if dfh:
1024 dfh.close()
1025 ifh.close()
1017 1026
1018 1027 def _addrevision(self, text, transaction, link, p1, p2, d, ifh, dfh):
1019 1028 node = hash(text, p1, p2)
@@ -1154,6 +1163,7 b' class revlog(object):'
1154 1163 transaction.add(self.datafile, end)
1155 1164 dfh = self.opener(self.datafile, "a")
1156 1165
1166 try:
1157 1167 # loop through our set of deltas
1158 1168 chain = None
1159 1169 for chunk in revs:
@@ -1234,6 +1244,10 b' class revlog(object):'
1234 1244 base = self.base(t)
1235 1245 start = self.start(base)
1236 1246 end = self.end(t)
1247 finally:
1248 if dfh:
1249 dfh.close()
1250 ifh.close()
1237 1251
1238 1252 return node
1239 1253
General Comments 0
You need to be logged in to leave comments. Login now