Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revlog.py @ 4989:1aaed3d69772
revlog: eliminate diff and patches functions
call mdiff variants directly
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 23 Jul 2007 20:44:08 -0500 |
parents | 14486eea8e7a |
children | 4491125c0f21 |
comparison
equal
deleted
inserted
replaced
4988:14486eea8e7a | 4989:1aaed3d69772 |
---|---|
828 def cmp(self, node, text): | 828 def cmp(self, node, text): |
829 """compare text with a given file revision""" | 829 """compare text with a given file revision""" |
830 p1, p2 = self.parents(node) | 830 p1, p2 = self.parents(node) |
831 return hash(text, p1, p2) != node | 831 return hash(text, p1, p2) != node |
832 | 832 |
833 def diff(self, a, b): | |
834 """return a delta between two revisions""" | |
835 return mdiff.textdiff(a, b) | |
836 | |
837 def patches(self, t, pl): | |
838 """apply a list of patches to a string""" | |
839 return mdiff.patches(t, pl) | |
840 | |
841 def chunk(self, rev, df=None): | 833 def chunk(self, rev, df=None): |
842 start, length = self.start(rev), self.length(rev) | 834 start, length = self.start(rev), self.length(rev) |
843 if self._inline: | 835 if self._inline: |
844 start += (rev + 1) * self._io.size | 836 start += (rev + 1) * self._io.size |
845 end = start + length | 837 end = start + length |
882 b1 = self.base(rev1) | 874 b1 = self.base(rev1) |
883 b2 = self.base(rev2) | 875 b2 = self.base(rev2) |
884 if b1 == b2 and rev1 + 1 == rev2: | 876 if b1 == b2 and rev1 + 1 == rev2: |
885 return self.chunk(rev2) | 877 return self.chunk(rev2) |
886 else: | 878 else: |
887 return self.diff(self.revision(self.node(rev1)), | 879 return mdiff.textdiff(self.revision(self.node(rev1)), |
888 self.revision(self.node(rev2))) | 880 self.revision(self.node(rev2))) |
889 | 881 |
890 def revision(self, node): | 882 def revision(self, node): |
891 """return an uncompressed revision of a given""" | 883 """return an uncompressed revision of a given""" |
892 if node == nullid: | 884 if node == nullid: |
893 return "" | 885 return "" |
912 self._loadindex(base, rev + 1) | 904 self._loadindex(base, rev + 1) |
913 else: | 905 else: |
914 self._loadindex(base, rev + 1) | 906 self._loadindex(base, rev + 1) |
915 text = self.chunk(base, df=df) | 907 text = self.chunk(base, df=df) |
916 | 908 |
917 bins = [] | 909 bins = [self.chunk(r, df) for r in xrange(base + 1, rev + 1)] |
918 for r in xrange(base + 1, rev + 1): | 910 text = mdiff.patches(text, bins) |
919 bins.append(self.chunk(r, df=df)) | |
920 | |
921 text = self.patches(text, bins) | |
922 | |
923 p1, p2 = self.parents(node) | 911 p1, p2 = self.parents(node) |
924 if node != hash(text, p1, p2): | 912 if node != hash(text, p1, p2): |
925 raise RevlogError(_("integrity check failed on %s:%d") | 913 raise RevlogError(_("integrity check failed on %s:%d") |
926 % (self.datafile, rev)) | 914 % (self.datafile, rev)) |
927 | 915 |
996 offset = self.end(prev) | 984 offset = self.end(prev) |
997 | 985 |
998 if curr: | 986 if curr: |
999 if not d: | 987 if not d: |
1000 ptext = self.revision(self.node(prev)) | 988 ptext = self.revision(self.node(prev)) |
1001 d = self.diff(ptext, text) | 989 d = mdiff.textdiff(ptext, text) |
1002 data = compress(d) | 990 data = compress(d) |
1003 l = len(data[1]) + len(data[0]) | 991 l = len(data[1]) + len(data[0]) |
1004 dist = l + offset - self.start(base) | 992 dist = l + offset - self.start(base) |
1005 | 993 |
1006 # full versions are inserted when the needed deltas | 994 # full versions are inserted when the needed deltas |
1148 # flush our writes here so we can read it in revision | 1136 # flush our writes here so we can read it in revision |
1149 if dfh: | 1137 if dfh: |
1150 dfh.flush() | 1138 dfh.flush() |
1151 ifh.flush() | 1139 ifh.flush() |
1152 text = self.revision(chain) | 1140 text = self.revision(chain) |
1153 text = self.patches(text, [delta]) | 1141 text = mdiff.patches(text, [delta]) |
1154 chk = self._addrevision(text, transaction, link, p1, p2, None, | 1142 chk = self._addrevision(text, transaction, link, p1, p2, None, |
1155 ifh, dfh) | 1143 ifh, dfh) |
1156 if not dfh and not self._inline: | 1144 if not dfh and not self._inline: |
1157 # addrevision switched from inline to conventional | 1145 # addrevision switched from inline to conventional |
1158 # reopen the index | 1146 # reopen the index |