comparison mercurial/revlog.py @ 14196:e7483ec3c374

revlog: remove support for punched/shallow The feature was never finished, and there has been restructuring going on since it was added.
author Sune Foldager <cryo@cyanite.org>
date Thu, 05 May 2011 12:46:02 +0200
parents 0013d3eeb826
children d62d597b8974
comparison
equal deleted inserted replaced
14195:0013d3eeb826 14196:e7483ec3c374
32 REVLOG_DEFAULT_FORMAT = REVLOGNG 32 REVLOG_DEFAULT_FORMAT = REVLOGNG
33 REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS 33 REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS
34 REVLOGNG_FLAGS = REVLOGNGINLINEDATA | REVLOGSHALLOW 34 REVLOGNG_FLAGS = REVLOGNGINLINEDATA | REVLOGSHALLOW
35 35
36 # revlog index flags 36 # revlog index flags
37 REVIDX_PUNCHED_FLAG = 2 37 REVIDX_KNOWN_FLAGS = 0
38 REVIDX_KNOWN_FLAGS = REVIDX_PUNCHED_FLAG
39 38
40 # max size of revlog with inline data 39 # max size of revlog with inline data
41 _maxinline = 131072 40 _maxinline = 131072
42 _chunksize = 1048576 41 _chunksize = 1048576
43 42
889 self._cache = (node, rev, text) 888 self._cache = (node, rev, text)
890 return text 889 return text
891 890
892 def _checkhash(self, text, node, rev): 891 def _checkhash(self, text, node, rev):
893 p1, p2 = self.parents(node) 892 p1, p2 = self.parents(node)
894 if (node != hash(text, p1, p2) and 893 if node != hash(text, p1, p2):
895 not (self.flags(rev) & REVIDX_PUNCHED_FLAG)):
896 raise RevlogError(_("integrity check failed on %s:%d") 894 raise RevlogError(_("integrity check failed on %s:%d")
897 % (self.indexfile, rev)) 895 % (self.indexfile, rev))
898 return text 896 return text
899 897
900 def checkinlinesize(self, tr, fp=None): 898 def checkinlinesize(self, tr, fp=None):
944 link - the linkrev data to add 942 link - the linkrev data to add
945 p1, p2 - the parent nodeids of the revision 943 p1, p2 - the parent nodeids of the revision
946 cachedelta - an optional precomputed delta 944 cachedelta - an optional precomputed delta
947 """ 945 """
948 node = hash(text, p1, p2) 946 node = hash(text, p1, p2)
949 if (node in self.nodemap and 947 if node in self.nodemap:
950 (not self.flags(self.rev(node)) & REVIDX_PUNCHED_FLAG)):
951 return node 948 return node
952 949
953 dfh = None 950 dfh = None
954 if not self._inline: 951 if not self._inline:
955 dfh = self.opener(self.datafile, "a") 952 dfh = self.opener(self.datafile, "a")
1007 d = builddelta(prev) 1004 d = builddelta(prev)
1008 dist, l, data, base = d 1005 dist, l, data, base = d
1009 1006
1010 # full versions are inserted when the needed deltas 1007 # full versions are inserted when the needed deltas
1011 # become comparable to the uncompressed text 1008 # become comparable to the uncompressed text
1012 # or the base revision is punched
1013 if text is None: 1009 if text is None:
1014 textlen = mdiff.patchedsize(self.rawsize(cachedelta[0]), 1010 textlen = mdiff.patchedsize(self.rawsize(cachedelta[0]),
1015 cachedelta[1]) 1011 cachedelta[1])
1016 else: 1012 else:
1017 textlen = len(text) 1013 textlen = len(text)
1018 if (d is None or dist > textlen * 2 or 1014 if d is None or dist > textlen * 2:
1019 (self.flags(base) & REVIDX_PUNCHED_FLAG)):
1020 text = buildtext() 1015 text = buildtext()
1021 data = compress(text) 1016 data = compress(text)
1022 l = len(data[1]) + len(data[0]) 1017 l = len(data[1]) + len(data[0])
1023 base = curr 1018 base = curr
1024 1019
1118 cs = chunkdata['cs'] 1113 cs = chunkdata['cs']
1119 deltabase = chunkdata['deltabase'] 1114 deltabase = chunkdata['deltabase']
1120 delta = chunkdata['delta'] 1115 delta = chunkdata['delta']
1121 1116
1122 link = linkmapper(cs) 1117 link = linkmapper(cs)
1123 if (node in self.nodemap and 1118 if node in self.nodemap:
1124 (not self.flags(self.rev(node)) & REVIDX_PUNCHED_FLAG)):
1125 # this can happen if two branches make the same change 1119 # this can happen if two branches make the same change
1126 chain = node 1120 chain = node
1127 continue 1121 continue
1128 1122
1129 for p in (p1, p2): 1123 for p in (p1, p2):
1130 if not p in self.nodemap: 1124 if not p in self.nodemap:
1131 if self._shallow: 1125 raise LookupError(p, self.indexfile,
1132 # add null entries for missing parents 1126 _('unknown parent'))
1133 # XXX FIXME
1134 #if base == nullrev:
1135 # base = len(self)
1136 #e = (offset_type(end, REVIDX_PUNCHED_FLAG),
1137 # 0, 0, base, nullrev, nullrev, nullrev, p)
1138 #self.index.insert(-1, e)
1139 #self.nodemap[p] = r
1140 #entry = self._io.packentry(e, self.node,
1141 # self.version, r)
1142 #ifh.write(entry)
1143 #t, r = r, r + 1
1144 raise LookupError(p, self.indexfile,
1145 _('unknown parent'))
1146 else:
1147 raise LookupError(p, self.indexfile,
1148 _('unknown parent'))
1149 1127
1150 if deltabase not in self.nodemap: 1128 if deltabase not in self.nodemap:
1151 raise LookupError(deltabase, self.indexfile, 1129 raise LookupError(deltabase, self.indexfile,
1152 _('unknown delta base')) 1130 _('unknown delta base'))
1153 1131