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