Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/revlog.py @ 3044:fcadf7a32425
Merge with mpm
author | Josef "Jeff" Sipek <jeffpc@josefsipek.net> |
---|---|
date | Sun, 03 Sep 2006 06:06:02 -0400 |
parents | 5df3e5cf16bc |
children | baa3873eb387 |
comparison
equal
deleted
inserted
replaced
3043:2a4d4aecb2b4 | 3044:fcadf7a32425 |
---|---|
2 revlog.py - storage back-end for mercurial | 2 revlog.py - storage back-end for mercurial |
3 | 3 |
4 This provides efficient delta storage with O(1) retrieve and append | 4 This provides efficient delta storage with O(1) retrieve and append |
5 and O(changes) merge between branches | 5 and O(changes) merge between branches |
6 | 6 |
7 Copyright 2005 Matt Mackall <mpm@selenic.com> | 7 Copyright 2005, 2006 Matt Mackall <mpm@selenic.com> |
8 | 8 |
9 This software may be used and distributed according to the terms | 9 This software may be used and distributed according to the terms |
10 of the GNU General Public License, incorporated herein by reference. | 10 of the GNU General Public License, incorporated herein by reference. |
11 """ | 11 """ |
12 | 12 |
742 continue | 742 continue |
743 return c | 743 return c |
744 | 744 |
745 def lookup(self, id): | 745 def lookup(self, id): |
746 """locate a node based on revision number or subset of hex nodeid""" | 746 """locate a node based on revision number or subset of hex nodeid""" |
747 if id in self.nodemap: | |
748 return id | |
749 if type(id) == type(0): | 747 if type(id) == type(0): |
750 return self.node(id) | 748 return self.node(id) |
751 try: | 749 try: |
752 rev = int(id) | 750 rev = int(id) |
753 if str(rev) != id: raise ValueError | 751 if str(rev) != id: raise ValueError |
758 c = [] | 756 c = [] |
759 for n in self.nodemap: | 757 for n in self.nodemap: |
760 if hex(n).startswith(id): | 758 if hex(n).startswith(id): |
761 c.append(n) | 759 c.append(n) |
762 if len(c) > 1: raise RevlogError(_("Ambiguous identifier")) | 760 if len(c) > 1: raise RevlogError(_("Ambiguous identifier")) |
763 if len(c) < 1: raise RevlogError(_("No match found")) | 761 if len(c) == 1: return c[0] |
764 return c[0] | 762 |
765 | 763 # might need fixing if we change hash lengths |
766 return None | 764 if len(id) == 20 and id in self.nodemap: |
765 return id | |
766 | |
767 raise RevlogError(_("No match found")) | |
768 | |
769 def cmp(self, node, text): | |
770 """compare text with a given file revision""" | |
771 p1, p2 = self.parents(node) | |
772 return hash(text, p1, p2) != node | |
773 | |
774 def makenode(self, node, text): | |
775 """calculate a file nodeid for text, descended or possibly | |
776 unchanged from node""" | |
777 | |
778 if self.cmp(node, text): | |
779 return hash(text, node, nullid) | |
780 return node | |
767 | 781 |
768 def diff(self, a, b): | 782 def diff(self, a, b): |
769 """return a delta between two revisions""" | 783 """return a delta between two revisions""" |
770 return mdiff.textdiff(a, b) | 784 return mdiff.textdiff(a, b) |
771 | 785 |