--- a/mercurial/merge.py Mon Feb 26 12:12:29 2007 -0600
+++ b/mercurial/merge.py Tue Feb 27 16:47:16 2007 -0600
@@ -184,7 +184,7 @@
invalid[dsrc] = True
del dirmove[dsrc]
else:
- dirmove[dsrc] = ddst
+ dirmove[dsrc + "/"] = ddst + "/"
del d1, d2, invalid
@@ -194,9 +194,10 @@
# check unaccounted nonoverlapping files
for f in u1 + u2:
if f not in fullcopy:
- d = os.path.dirname(f)
- if d in dirmove:
- copy[f] = dirmove[d] + "/" + os.path.basename(f)
+ for d in dirmove:
+ if f.startswith(d):
+ copy[f] = dirmove[d] + f[len(d):]
+ break
return copy
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rename-dir-merge2 Tue Feb 27 16:47:16 2007 -0600
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+mkdir r1
+cd r1
+hg init
+mkdir a
+echo foo > a/f
+hg add a
+hg ci -m "a/f == foo"
+cd ..
+
+hg clone r1 r2
+cd r2
+hg mv a b
+echo foo1 > b/f
+hg ci -m" a -> b, b/f == foo1"
+cd ..
+
+cd r1
+mkdir a/aa
+echo bar > a/aa/g
+hg add a/aa
+hg ci -m "a/aa/g"
+hg pull ../r2
+
+hg merge
+
+hg st -C
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rename-dir-merge2.out Tue Feb 27 16:47:16 2007 -0600
@@ -0,0 +1,19 @@
+adding a/f
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+copying a/f to b/f
+removing a/f
+adding a/aa/g
+pulling from ../r2
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files (+1 heads)
+(run 'hg heads' to see heads, 'hg merge' to merge)
+2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+M b/f
+A b/aa/g
+ a/aa/g
+R a/aa/g
+R a/f