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, infocollect=None, fullrev=False): |
1061 def group(self, nodelist, lookup, infocollect=None): |
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 |
1067 first parent(nodelist[0]) -> nodelist[0], the receiver is |
1067 first parent(nodelist[0]) -> nodelist[0], the receiver is |
1068 guaranteed to have this parent as it has all history before |
1068 guaranteed to have this parent as it has all history before |
1069 these changesets. In the case firstparent is nullrev the |
1069 these changesets. In the case firstparent is nullrev the |
1070 changegroup starts with a full revision. |
1070 changegroup starts with a full revision. |
1071 fullrev forces the insertion of the full revision, necessary |
|
1072 in the case of shallow clones where the first parent might |
|
1073 not exist at the reciever. |
|
1074 """ |
1071 """ |
1075 |
1072 |
1076 revs = [self.rev(n) for n in nodelist] |
1073 revs = [self.rev(n) for n in nodelist] |
1077 |
1074 |
1078 # 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 |
1094 if infocollect is not None: |
1089 if infocollect is not None: |
1095 infocollect(nb) |
1090 infocollect(nb) |
1096 |
1091 |
1097 p = self.parents(nb) |
1092 p = self.parents(nb) |
1098 meta = nb + p[0] + p[1] + lookup(nb) |
1093 meta = nb + p[0] + p[1] + lookup(nb) |
1099 if fullrev: |
1094 if a == nullrev: |
1100 d = self.revision(nb) |
1095 d = self.revision(nb) |
1101 meta += mdiff.trivialdiffheader(len(d)) |
1096 meta += mdiff.trivialdiffheader(len(d)) |
1102 fullrev = False |
|
1103 else: |
1097 else: |
1104 d = self.revdiff(a, b) |
1098 d = self.revdiff(a, b) |
1105 yield changegroup.chunkheader(len(meta) + len(d)) |
1099 yield changegroup.chunkheader(len(meta) + len(d)) |
1106 yield meta |
1100 yield meta |
1107 yield d |
1101 yield d |