changeset 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 (current diff) dee573ba79f1 (diff)
children 585471802a01
files mercurial/localrepo.py
diffstat 5 files changed, 63 insertions(+), 3 deletions(-) [+]
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.
new file mode 100755
--- /dev/null
+++ b/tests/test-changelog-exec
@@ -0,0 +1,32 @@
+#!/bin/sh
+# b51a8138292a introduced a regression where we would mention in the
+# changelog executable files added by the second parent of a merge.
+# Test that that doesn't happen anymore
+
+"$TESTDIR/hghave" execbit || exit 80
+
+hg init repo
+cd repo
+echo foo > foo
+hg ci -qAm 'add foo' -d '0 0'
+
+echo bar > bar
+chmod +x bar
+hg ci -qAm 'add bar' -d '0 0'
+echo '% manifest of p2:'
+hg manifest
+echo
+
+hg up -qC 0
+echo >> foo
+hg ci -m 'change foo' -d '0 0'
+echo '% manifest of p1:'
+hg manifest
+
+hg merge
+hg ci -m 'merge' -d '0 0'
+
+echo '% this should not mention bar:'
+hg tip -v
+
+hg debugindex .hg/store/data/bar.i
new file mode 100644
--- /dev/null
+++ b/tests/test-changelog-exec.out
@@ -0,0 +1,21 @@
+% manifest of p2:
+bar
+foo
+
+% manifest of p1:
+foo
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+% this should not mention bar:
+changeset:   3:ef2fc9b4a51b
+tag:         tip
+parent:      2:ed1b79f46b9a
+parent:      1:d394a8db219b
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+description:
+merge
+
+
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0       5      0       1 b004912a8510 000000000000 000000000000
--- a/tests/test-rename-dir-merge
+++ b/tests/test-rename-dir-merge
@@ -24,9 +24,11 @@ hg merge --debug 1
 echo a/* b/*
 hg st -C
 hg ci -m "3 merge 2+1" -d "0 0"
+hg debugrename b/c
 
 hg co -C 1
 hg merge --debug 2
 echo a/* b/*
 hg st -C
 hg ci -m "4 merge 1+2" -d "0 0"
+hg debugrename b/c
--- a/tests/test-rename-dir-merge.out
+++ b/tests/test-rename-dir-merge.out
@@ -29,6 +29,7 @@ A b/c
 R a/a
 R a/b
 R a/c
+b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 resolving manifests
  overwrite None partial False
@@ -40,3 +41,4 @@ 1 files updated, 0 files merged, 0 files
 a/* b/a b/b b/c
 A b/c
   a/c
+b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88