Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 1458:1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
function in terms of it.
revlog.group now takes a list of nodes, and some callback functions
instead of a linkmap.
author | Eric Hopper <hopper@omnifarious.org> |
---|---|
date | Fri, 07 Oct 2005 10:57:11 -0700 |
parents | 518da3c3b6ce |
children | 106fdec8e1fb |
comparison
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 |