diff 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
line wrap: on
line diff
--- a/mercurial/hg.py	Fri Jul 01 11:21:04 2005 -0800
+++ b/mercurial/hg.py	Fri Jul 01 11:24:09 2005 -0800
@@ -95,7 +95,7 @@
     def read(self, node):
         if node == nullid: return {} # don't upset local cache
         if self.mapcache and self.mapcache[0] == node:
-            return self.mapcache[1].copy()
+            return self.mapcache[1]
         text = self.revision(node)
         map = {}
         flag = {}
@@ -687,7 +687,7 @@
 
     def changes(self, node1, node2, files=None):
         # changed, added, deleted, unknown
-        c, a, d, u, mf1 = [], [], [], [], None
+        c, a, d, u, mf2 = [], [], [], [], None
 
         def fcmp(fn, mf):
             t1 = self.wfile(fn).read()
@@ -695,48 +695,54 @@
             return cmp(t1, t2)
 
         # are we comparing the working directory?
-        if not node1:
+        if not node2:
             l, c, a, d, u = self.dirstate.changes(files, self.ignore)
 
             # are we comparing working dir against its parent?
-            if not node2:
+            if not node1:
                 if l:
                     # do a full compare of any files that might have changed
                     change = self.changelog.read(self.dirstate.parents()[0])
-                    mf1 = self.manifest.read(change[0])
+                    mf2 = self.manifest.read(change[0])
                     for f in l:
-                        if fcmp(f, mf1):
+                        if fcmp(f, mf2):
                             c.append(f)
+
+                for l in c, a, d, u:
+                    l.sort()
+
                 return (c, a, d, u)
 
         # are we comparing working dir against non-tip?
         # generate a pseudo-manifest for the working dir
-        if not node1:
-            if not mf1:
+        if not node2:
+            if not mf2:
                 change = self.changelog.read(self.dirstate.parents()[0])
-                mf1 = self.manifest.read(change[0])
+                mf2 = self.manifest.read(change[0]).copy()
             for f in a + c + l:
-                mf1[f] = ""
+                mf2[f] = ""
             for f in d:
-                if f in mf1: del mf1[f]
+                if f in mf2: del mf2[f]
         else:
-            change = self.changelog.read(node1)
-            mf1 = self.manifest.read(change[0])
+            change = self.changelog.read(node2)
+            mf2 = self.manifest.read(change[0])
 
-        change = self.changelog.read(node2)
-        mf2 = self.manifest.read(change[0])
+        change = self.changelog.read(node1)
+        mf1 = self.manifest.read(change[0]).copy()
 
         for fn in mf2:
             if mf1.has_key(fn):
                 if mf1[fn] != mf2[fn]:
-                    if mf1[fn] != "" or fcmp(fn, mf2):
+                    if mf2[fn] != "" or fcmp(fn, mf1):
                         c.append(fn)
                 del mf1[fn]
             else:
                 a.append(fn)
 
         d = mf1.keys()
-        d.sort()
+
+        for l in c, a, d, u:
+            l.sort()
 
         return (c, a, d, u)