comparison mercurial/hg.py @ 561:cdddf4652aec

Fix dodiff/changes -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Fix dodiff/changes dodiff was failing to pass both nodes to changes changes was comparing things backwards, resulting in added/deleted confusion in dodiff changes was deleting things from cached manifests, use copy() changes now sorts output lists manifest hash: 6ad972b0895b9d855e246efef49c2ebd943946b3 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCxZhZywK+sNU5EO8RApZWAJ9mYv1zc7IjXPIMwbVsfroQs8jfBACgn7R7 rTqLTTyIkM1OpL/ebnMtCOY= =VcIr -----END PGP SIGNATURE-----
author mpm@selenic.com
date Fri, 01 Jul 2005 11:24:09 -0800
parents b9fee419a1bd
children b2c9b36bd639
comparison
equal deleted inserted replaced
560:f9ad1a2c72eb 561:cdddf4652aec
93 revlog.__init__(self, opener, "00manifest.i", "00manifest.d") 93 revlog.__init__(self, opener, "00manifest.i", "00manifest.d")
94 94
95 def read(self, node): 95 def read(self, node):
96 if node == nullid: return {} # don't upset local cache 96 if node == nullid: return {} # don't upset local cache
97 if self.mapcache and self.mapcache[0] == node: 97 if self.mapcache and self.mapcache[0] == node:
98 return self.mapcache[1].copy() 98 return self.mapcache[1]
99 text = self.revision(node) 99 text = self.revision(node)
100 map = {} 100 map = {}
101 flag = {} 101 flag = {}
102 self.listcache = (text, text.splitlines(1)) 102 self.listcache = (text, text.splitlines(1))
103 for l in self.listcache[1]: 103 for l in self.listcache[1]:
685 self.dirstate.update(new, "n") 685 self.dirstate.update(new, "n")
686 self.dirstate.forget(remove) 686 self.dirstate.forget(remove)
687 687
688 def changes(self, node1, node2, files=None): 688 def changes(self, node1, node2, files=None):
689 # changed, added, deleted, unknown 689 # changed, added, deleted, unknown
690 c, a, d, u, mf1 = [], [], [], [], None 690 c, a, d, u, mf2 = [], [], [], [], None
691 691
692 def fcmp(fn, mf): 692 def fcmp(fn, mf):
693 t1 = self.wfile(fn).read() 693 t1 = self.wfile(fn).read()
694 t2 = self.file(fn).revision(mf[fn]) 694 t2 = self.file(fn).revision(mf[fn])
695 return cmp(t1, t2) 695 return cmp(t1, t2)
696 696
697 # are we comparing the working directory? 697 # are we comparing the working directory?
698 if not node1: 698 if not node2:
699 l, c, a, d, u = self.dirstate.changes(files, self.ignore) 699 l, c, a, d, u = self.dirstate.changes(files, self.ignore)
700 700
701 # are we comparing working dir against its parent? 701 # are we comparing working dir against its parent?
702 if not node2: 702 if not node1:
703 if l: 703 if l:
704 # do a full compare of any files that might have changed 704 # do a full compare of any files that might have changed
705 change = self.changelog.read(self.dirstate.parents()[0]) 705 change = self.changelog.read(self.dirstate.parents()[0])
706 mf1 = self.manifest.read(change[0]) 706 mf2 = self.manifest.read(change[0])
707 for f in l: 707 for f in l:
708 if fcmp(f, mf1): 708 if fcmp(f, mf2):
709 c.append(f) 709 c.append(f)
710
711 for l in c, a, d, u:
712 l.sort()
713
710 return (c, a, d, u) 714 return (c, a, d, u)
711 715
712 # are we comparing working dir against non-tip? 716 # are we comparing working dir against non-tip?
713 # generate a pseudo-manifest for the working dir 717 # generate a pseudo-manifest for the working dir
714 if not node1: 718 if not node2:
715 if not mf1: 719 if not mf2:
716 change = self.changelog.read(self.dirstate.parents()[0]) 720 change = self.changelog.read(self.dirstate.parents()[0])
717 mf1 = self.manifest.read(change[0]) 721 mf2 = self.manifest.read(change[0]).copy()
718 for f in a + c + l: 722 for f in a + c + l:
719 mf1[f] = "" 723 mf2[f] = ""
720 for f in d: 724 for f in d:
721 if f in mf1: del mf1[f] 725 if f in mf2: del mf2[f]
722 else: 726 else:
723 change = self.changelog.read(node1) 727 change = self.changelog.read(node2)
724 mf1 = self.manifest.read(change[0]) 728 mf2 = self.manifest.read(change[0])
725 729
726 change = self.changelog.read(node2) 730 change = self.changelog.read(node1)
727 mf2 = self.manifest.read(change[0]) 731 mf1 = self.manifest.read(change[0]).copy()
728 732
729 for fn in mf2: 733 for fn in mf2:
730 if mf1.has_key(fn): 734 if mf1.has_key(fn):
731 if mf1[fn] != mf2[fn]: 735 if mf1[fn] != mf2[fn]:
732 if mf1[fn] != "" or fcmp(fn, mf2): 736 if mf2[fn] != "" or fcmp(fn, mf1):
733 c.append(fn) 737 c.append(fn)
734 del mf1[fn] 738 del mf1[fn]
735 else: 739 else:
736 a.append(fn) 740 a.append(fn)
737 741
738 d = mf1.keys() 742 d = mf1.keys()
739 d.sort() 743
744 for l in c, a, d, u:
745 l.sort()
740 746
741 return (c, a, d, u) 747 return (c, a, d, u)
742 748
743 def add(self, list): 749 def add(self, list):
744 for f in list: 750 for f in list: