Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 13831:d69c9510d648
changegroup: introduce bundler objects
This makes the bundler pluggable at lower levels.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 31 Mar 2011 15:24:06 -0500 |
parents | 470ec600b525 |
children | e4bfb9c337f3 |
comparison
equal
deleted
inserted
replaced
13830:2dc6e09f2a7d | 13831:d69c9510d648 |
---|---|
1056 | 1056 |
1057 if type(text) == str: # only accept immutable objects | 1057 if type(text) == str: # only accept immutable objects |
1058 self._cache = (node, curr, text) | 1058 self._cache = (node, curr, text) |
1059 return node | 1059 return node |
1060 | 1060 |
1061 def group(self, nodelist, lookup): | 1061 def group(self, nodelist, bundler): |
1062 """Calculate a delta group, yielding a sequence of changegroup chunks | 1062 """Calculate a delta group, yielding a sequence of changegroup chunks |
1063 (strings). | 1063 (strings). |
1064 | 1064 |
1065 Given a list of changeset revs, return a set of deltas and | 1065 Given a list of changeset revs, return a set of deltas and |
1066 metadata corresponding to nodes. The first delta is | 1066 metadata corresponding to nodes. The first delta is |
1072 | 1072 |
1073 revs = sorted([self.rev(n) for n in nodelist]) | 1073 revs = sorted([self.rev(n) for n in nodelist]) |
1074 | 1074 |
1075 # if we don't have any revisions touched by these changesets, bail | 1075 # if we don't have any revisions touched by these changesets, bail |
1076 if not revs: | 1076 if not revs: |
1077 yield changegroup.closechunk() | 1077 yield bundler.close() |
1078 return | 1078 return |
1079 | 1079 |
1080 # add the parent of the first rev | 1080 # add the parent of the first rev |
1081 p = self.parentrevs(revs[0])[0] | 1081 p = self.parentrevs(revs[0])[0] |
1082 revs.insert(0, p) | 1082 revs.insert(0, p) |
1083 | 1083 |
1084 # build deltas | 1084 # build deltas |
1085 for r in xrange(len(revs) - 1): | 1085 for r in xrange(len(revs) - 1): |
1086 a, b = revs[r], revs[r + 1] | 1086 a, b = revs[r], revs[r + 1] |
1087 nb = self.node(b) | 1087 nb = self.node(b) |
1088 | 1088 p1, p2 = self.parents(nb) |
1089 p = self.parents(nb) | 1089 prefix = '' |
1090 meta = nb + p[0] + p[1] + lookup(self, nb) | 1090 |
1091 if a == nullrev: | 1091 if a == nullrev: |
1092 d = self.revision(nb) | 1092 d = self.revision(nb) |
1093 meta += mdiff.trivialdiffheader(len(d)) | 1093 prefix = mdiff.trivialdiffheader(len(d)) |
1094 else: | 1094 else: |
1095 d = self.revdiff(a, b) | 1095 d = self.revdiff(a, b) |
1096 yield changegroup.chunkheader(len(meta) + len(d)) | 1096 for c in bundler.revchunk(self, nb, p1, p2, prefix, d): |
1097 yield meta | 1097 yield c |
1098 yield d | 1098 |
1099 | 1099 yield bundler.close() |
1100 yield changegroup.closechunk() | |
1101 | 1100 |
1102 def addgroup(self, bundle, linkmapper, transaction): | 1101 def addgroup(self, bundle, linkmapper, transaction): |
1103 """ | 1102 """ |
1104 add a delta group | 1103 add a delta group |
1105 | 1104 |