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