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