diff mercurial/localrepo.py @ 5245:0d28d4e5fe1f

Merge with crew-stable.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Mon, 27 Aug 2007 14:55:33 -0300
parents 5517aa5aafb0 dee573ba79f1
children b534c502bfb3
line wrap: on
line diff
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -630,7 +630,9 @@ class localrepository(repo.repository):
             elif fp1 != nullid: # copied on local side, reversed
                 meta["copyrev"] = hex(manifest2.get(cp))
                 fp2 = fp1
-            else: # directory rename
+            elif cp in manifest2: # directory rename on local side
+                meta["copyrev"] = hex(manifest2[cp])
+            else: # directory rename on remote side
                 meta["copyrev"] = hex(manifest1.get(cp, nullid))
             self.ui.debug(_(" %s: copy %s:%s\n") %
                           (fn, cp, meta["copyrev"]))
@@ -644,7 +646,7 @@ class localrepository(repo.repository):
                 fp2 = nullid
 
         # is the file unmodified from the parent? report existing entry
-        if fp2 == nullid and not fl.cmp(fp1, t):
+        if fp2 == nullid and not fl.cmp(fp1, t) and not meta:
             return fp1
 
         changelist.append(fn)
@@ -736,7 +738,8 @@ class localrepository(repo.repository):
                     new[f] = self.filecommit(f, m1, m2, linkrev, trp, changed)
                     new_exec = is_exec(f)
                     new_link = is_link(f)
-                    if not changed or changed[-1] != f:
+                    if ((not changed or changed[-1] != f) and
+                        m2.get(f) != new[f]):
                         # mention the file in the changelog if some
                         # flag changed, even if there was no content
                         # change.