mercurial/revlog.py
changeset 1458 1033892bbb87
parent 1457 518da3c3b6ce
child 1459 106fdec8e1fb
equal deleted inserted replaced
1457:518da3c3b6ce 1458:1033892bbb87
   620                 gy = y.next()
   620                 gy = y.next()
   621             else:
   621             else:
   622                 #print "next x"
   622                 #print "next x"
   623                 gx = x.next()
   623                 gx = x.next()
   624 
   624 
   625     def group(self, linkmap):
   625     def group(self, nodelist, lookup, infocollect = None):
   626         """calculate a delta group
   626         """calculate a delta group
   627 
   627 
   628         Given a list of changeset revs, return a set of deltas and
   628         Given a list of changeset revs, return a set of deltas and
   629         metadata corresponding to nodes. the first delta is
   629         metadata corresponding to nodes. the first delta is
   630         parent(nodes[0]) -> nodes[0] the receiver is guaranteed to
   630         parent(nodes[0]) -> nodes[0] the receiver is guaranteed to
   631         have this parent as it has all history before these
   631         have this parent as it has all history before these
   632         changesets. parent is parent[0]
   632         changesets. parent is parent[0]
   633         """
   633         """
   634         revs = []
   634         revs = [self.rev(n) for n in nodelist]
   635         needed = {}
   635         needed = dict.fromkeys(revs, 1)
   636 
       
   637         # find file nodes/revs that match changeset revs
       
   638         for i in xrange(0, self.count()):
       
   639             if self.index[i][3] in linkmap:
       
   640                 revs.append(i)
       
   641                 needed[i] = 1
       
   642 
   636 
   643         # if we don't have any revisions touched by these changesets, bail
   637         # if we don't have any revisions touched by these changesets, bail
   644         if not revs:
   638         if not revs:
   645             yield struct.pack(">l", 0)
   639             yield struct.pack(">l", 0)
   646             return
   640             return
   704         deltas = []
   698         deltas = []
   705         for d in xrange(0, len(revs) - 1):
   699         for d in xrange(0, len(revs) - 1):
   706             a, b = revs[d], revs[d + 1]
   700             a, b = revs[d], revs[d + 1]
   707             n = self.node(b)
   701             n = self.node(b)
   708 
   702 
       
   703             if infocollect is not None:
       
   704                 infocollect(n)
       
   705 
   709             # do we need to construct a new delta?
   706             # do we need to construct a new delta?
   710             if a + 1 != b or self.base(b) == b:
   707             if a + 1 != b or self.base(b) == b:
   711                 if a >= 0:
   708                 if a >= 0:
   712                     base = self.base(a)
   709                     base = self.base(a)
   713                     ta = chunks[self.base(a)]
   710                     ta = chunks[self.base(a)]
   725                 d = self.diff(ta, tb)
   722                 d = self.diff(ta, tb)
   726             else:
   723             else:
   727                 d = chunks[b]
   724                 d = chunks[b]
   728 
   725 
   729             p = self.parents(n)
   726             p = self.parents(n)
   730             meta = n + p[0] + p[1] + linkmap[self.linkrev(n)]
   727             meta = n + p[0] + p[1] + lookup(n)
   731             l = struct.pack(">l", len(meta) + len(d) + 4)
   728             l = struct.pack(">l", len(meta) + len(d) + 4)
   732             yield l
   729             yield l
   733             yield meta
   730             yield meta
   734             yield d
   731             yield d
   735 
   732