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 |