comparison mercurial/manifest.py @ 22788:160efd225b24

manifest: rearrange add() method and add comments for clarity Omit the check of bool(p1) since it's always true in practice: it will either be nullid or some valid manifest sha, and we know nullid won't ever be in the cache so we can simplify understanding of this code.
author Augie Fackler <raf@durin42.com>
date Wed, 08 Oct 2014 12:59:11 -0400
parents 4a13849ca359
children bf69cb09a6c9
comparison
equal deleted inserted replaced
22787:4a13849ca359 22788:160efd225b24
158 l = text[start:end] 158 l = text[start:end]
159 f, n = l.split('\0') 159 f, n = l.split('\0')
160 return revlog.bin(n[:40]), n[40:-1] 160 return revlog.bin(n[:40]), n[40:-1]
161 161
162 def add(self, map, transaction, link, p1, p2, added, removed): 162 def add(self, map, transaction, link, p1, p2, added, removed):
163 # if we're using the cache, make sure it is valid and 163 if p1 in self._mancache:
164 # parented by the same node we're diffing against 164 # If our first parent is in the manifest cache, we can
165 if not (p1 and (p1 in self._mancache)): 165 # compute a delta here using properties we know about the
166 files = sorted(map) 166 # manifest up-front, which may save time later for the
167 _checkforbidden(files) 167 # revlog layer.
168
169 # if this is changed to support newlines in filenames,
170 # be sure to check the templates/ dir again (especially *-raw.tmpl)
171 hex, flags = revlog.hex, map.flags
172 text = ''.join("%s\0%s%s\n" % (f, hex(map[f]), flags(f))
173 for f in files)
174 arraytext = array.array('c', text)
175 cachedelta = None
176 else:
177 addlist = self._mancache[p1][1] 168 addlist = self._mancache[p1][1]
178 169
179 _checkforbidden(added) 170 _checkforbidden(added)
180 # combine the changed lists into one list for sorting 171 # combine the changed lists into one list for sorting
181 work = [(x, False) for x in added] 172 work = [(x, False) for x in added]
222 # apply the delta to the addlist, and get a delta for addrevision 213 # apply the delta to the addlist, and get a delta for addrevision
223 deltatext, addlist = _addlistdelta(addlist, delta) 214 deltatext, addlist = _addlistdelta(addlist, delta)
224 cachedelta = (self.rev(p1), deltatext) 215 cachedelta = (self.rev(p1), deltatext)
225 arraytext = addlist 216 arraytext = addlist
226 text = util.buffer(arraytext) 217 text = util.buffer(arraytext)
218 else:
219 # The first parent manifest isn't already loaded, so we'll
220 # just encode a fulltext of the manifest and pass that
221 # through to the revlog layer, and let it handle the delta
222 # process.
223 files = sorted(map)
224 _checkforbidden(files)
225
226 # if this is changed to support newlines in filenames,
227 # be sure to check the templates/ dir again (especially *-raw.tmpl)
228 hex, flags = revlog.hex, map.flags
229 text = ''.join("%s\0%s%s\n" % (f, hex(map[f]), flags(f))
230 for f in files)
231 arraytext = array.array('c', text)
232 cachedelta = None
227 233
228 n = self.addrevision(text, transaction, link, p1, p2, cachedelta) 234 n = self.addrevision(text, transaction, link, p1, p2, cachedelta)
229 self._mancache[n] = (map, arraytext) 235 self._mancache[n] = (map, arraytext)
230 236
231 return n 237 return n