##// END OF EJS Templates
make revlog.addgroup pass its file handles to addrevision...
Alexis S. L. Carvalho -
r3390:a74adddd default
parent child Browse files
Show More
@@ -955,6 +955,14 b' class revlog(object):'
955 p1, p2 - the parent nodeids of the revision
955 p1, p2 - the parent nodeids of the revision
956 d - an optional precomputed delta
956 d - an optional precomputed delta
957 """
957 """
958 if not self.inlinedata():
959 dfh = self.opener(self.datafile, "a")
960 else:
961 dfh = None
962 ifh = self.opener(self.indexfile, "a+")
963 return self._addrevision(text, transaction, link, p1, p2, d, ifh, dfh)
964
965 def _addrevision(self, text, transaction, link, p1, p2, d, ifh, dfh):
958 if text is None: text = ""
966 if text is None: text = ""
959 if p1 is None: p1 = self.tip()
967 if p1 is None: p1 = self.tip()
960 if p2 is None: p2 = nullid
968 if p2 is None: p2 = nullid
@@ -1004,28 +1012,25 b' class revlog(object):'
1004 if not self.inlinedata():
1012 if not self.inlinedata():
1005 transaction.add(self.datafile, offset)
1013 transaction.add(self.datafile, offset)
1006 transaction.add(self.indexfile, n * len(entry))
1014 transaction.add(self.indexfile, n * len(entry))
1007 f = self.opener(self.datafile, "a")
1008 if data[0]:
1015 if data[0]:
1009 f.write(data[0])
1016 dfh.write(data[0])
1010 f.write(data[1])
1017 dfh.write(data[1])
1011 f.close()
1018 dfh.flush()
1012 f = self.opener(self.indexfile, "a")
1013 else:
1019 else:
1014 f = self.opener(self.indexfile, "a+")
1020 ifh.seek(0, 2)
1015 f.seek(0, 2)
1021 transaction.add(self.indexfile, ifh.tell(), self.count() - 1)
1016 transaction.add(self.indexfile, f.tell(), self.count() - 1)
1017
1022
1018 if len(self.index) == 1 and self.version != REVLOGV0:
1023 if len(self.index) == 1 and self.version != REVLOGV0:
1019 l = struct.pack(versionformat, self.version)
1024 l = struct.pack(versionformat, self.version)
1020 f.write(l)
1025 ifh.write(l)
1021 entry = entry[4:]
1026 entry = entry[4:]
1022
1027
1023 f.write(entry)
1028 ifh.write(entry)
1024
1029
1025 if self.inlinedata():
1030 if self.inlinedata():
1026 f.write(data[0])
1031 ifh.write(data[0])
1027 f.write(data[1])
1032 ifh.write(data[1])
1028 self.checkinlinesize(transaction, f)
1033 self.checkinlinesize(transaction, ifh)
1029
1034
1030 self.cache = (node, n, text)
1035 self.cache = (node, n, text)
1031 return node
1036 return node
@@ -1146,7 +1151,13 b' class revlog(object):'
1146 ifh.flush()
1151 ifh.flush()
1147 text = self.revision(chain)
1152 text = self.revision(chain)
1148 text = self.patches(text, [delta])
1153 text = self.patches(text, [delta])
1149 chk = self.addrevision(text, transaction, link, p1, p2)
1154 chk = self._addrevision(text, transaction, link, p1, p2, None,
1155 ifh, dfh)
1156 if not dfh and not self.inlinedata():
1157 # addrevision switched from inline to conventional
1158 # reopen the index
1159 dfh = self.opener(self.datafile, "a")
1160 ifh = self.opener(self.indexfile, "a")
1150 if chk != node:
1161 if chk != node:
1151 raise RevlogError(_("consistency error adding group"))
1162 raise RevlogError(_("consistency error adding group"))
1152 textlen = len(text)
1163 textlen = len(text)
@@ -1166,11 +1177,6 b' class revlog(object):'
1166 dfh = self.opener(self.datafile, "a")
1177 dfh = self.opener(self.datafile, "a")
1167 ifh = self.opener(self.indexfile, "a")
1178 ifh = self.opener(self.indexfile, "a")
1168 else:
1179 else:
1169 if not dfh:
1170 # addrevision switched from inline to conventional
1171 # reopen the index
1172 dfh = self.opener(self.datafile, "a")
1173 ifh = self.opener(self.indexfile, "a")
1174 dfh.write(cdelta)
1180 dfh.write(cdelta)
1175 ifh.write(struct.pack(self.indexformat, *e))
1181 ifh.write(struct.pack(self.indexformat, *e))
1176
1182
General Comments 0
You need to be logged in to leave comments. Login now