626 # apply the delta to the base, and get a delta for addrevision |
625 # apply the delta to the base, and get a delta for addrevision |
627 deltatext, arraytext = _addlistdelta(base, delta) |
626 deltatext, arraytext = _addlistdelta(base, delta) |
628 else: |
627 else: |
629 # For large changes, it's much cheaper to just build the text and |
628 # For large changes, it's much cheaper to just build the text and |
630 # diff it. |
629 # diff it. |
631 arraytext = array.array('c', self.text()) |
630 arraytext = bytearray(self.text()) |
632 deltatext = mdiff.textdiff(base, arraytext) |
631 deltatext = mdiff.textdiff( |
|
632 util.buffer(base), util.buffer(arraytext)) |
633 |
633 |
634 return arraytext, deltatext |
634 return arraytext, deltatext |
635 |
635 |
636 def _msearch(m, s, lo=0, hi=None): |
636 def _msearch(m, s, lo=0, hi=None): |
637 '''return a tuple (start, end) that says where to find s within m. |
637 '''return a tuple (start, end) that says where to find s within m. |
685 # return a delta suitable for addrevision |
685 # return a delta suitable for addrevision |
686 def _addlistdelta(addlist, x): |
686 def _addlistdelta(addlist, x): |
687 # for large addlist arrays, building a new array is cheaper |
687 # for large addlist arrays, building a new array is cheaper |
688 # than repeatedly modifying the existing one |
688 # than repeatedly modifying the existing one |
689 currentposition = 0 |
689 currentposition = 0 |
690 newaddlist = array.array('c') |
690 newaddlist = bytearray() |
691 |
691 |
692 for start, end, content in x: |
692 for start, end, content in x: |
693 newaddlist += addlist[currentposition:start] |
693 newaddlist += addlist[currentposition:start] |
694 if content: |
694 if content: |
695 newaddlist += array.array('c', content) |
695 newaddlist += bytearray(content) |
696 |
696 |
697 currentposition = end |
697 currentposition = end |
698 |
698 |
699 newaddlist += addlist[currentposition:] |
699 newaddlist += addlist[currentposition:] |
700 |
700 |
1238 n = self._addtree(m, transaction, link, m1, m2, readtree) |
1238 n = self._addtree(m, transaction, link, m1, m2, readtree) |
1239 arraytext = None |
1239 arraytext = None |
1240 else: |
1240 else: |
1241 text = m.text(self._usemanifestv2) |
1241 text = m.text(self._usemanifestv2) |
1242 n = self.addrevision(text, transaction, link, p1, p2) |
1242 n = self.addrevision(text, transaction, link, p1, p2) |
1243 arraytext = array.array('c', text) |
1243 arraytext = bytearray(text) |
1244 |
1244 |
1245 if arraytext is not None: |
1245 if arraytext is not None: |
1246 self.fulltextcache[n] = arraytext |
1246 self.fulltextcache[n] = arraytext |
1247 |
1247 |
1248 return n |
1248 return n |
1418 if self._node == revlog.nullid: |
1418 if self._node == revlog.nullid: |
1419 self._data = manifestdict() |
1419 self._data = manifestdict() |
1420 else: |
1420 else: |
1421 rl = self._revlog() |
1421 rl = self._revlog() |
1422 text = rl.revision(self._node) |
1422 text = rl.revision(self._node) |
1423 arraytext = array.array('c', text) |
1423 arraytext = bytearray(text) |
1424 rl._fulltextcache[self._node] = arraytext |
1424 rl._fulltextcache[self._node] = arraytext |
1425 self._data = manifestdict(text) |
1425 self._data = manifestdict(text) |
1426 return self._data |
1426 return self._data |
1427 |
1427 |
1428 def readfast(self, shallow=False): |
1428 def readfast(self, shallow=False): |
1527 m.read(gettext, readsubtree) |
1527 m.read(gettext, readsubtree) |
1528 m.setnode(self._node) |
1528 m.setnode(self._node) |
1529 self._data = m |
1529 self._data = m |
1530 else: |
1530 else: |
1531 text = rl.revision(self._node) |
1531 text = rl.revision(self._node) |
1532 arraytext = array.array('c', text) |
1532 arraytext = bytearray(text) |
1533 rl.fulltextcache[self._node] = arraytext |
1533 rl.fulltextcache[self._node] = arraytext |
1534 self._data = treemanifest(dir=self._dir, text=text) |
1534 self._data = treemanifest(dir=self._dir, text=text) |
1535 |
1535 |
1536 return self._data |
1536 return self._data |
1537 |
1537 |