changeset 1117:30ab5b8ee8ec

fix some rename/copy bugs - delete copy information when we update dirstate hg was keeping the copy state and marking things as copied on multiple commits - files that are renamed should have no parents if you do a rename/copy to an existing file, it should not be marked as descending from its previous revisions. - remove spurious print from filelog.renamed - add some more copy tests
author mpm@selenic.com
date Sat, 27 Aug 2005 22:04:17 -0700
parents 0cdd73b0767c
children 63b5f68d8167
files mercurial/dirstate.py mercurial/filelog.py mercurial/localrepo.py tests/test-copy2 tests/test-copy2.out
diffstat 5 files changed, 83 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dirstate.py	Sat Aug 27 20:58:53 2005 -0700
+++ b/mercurial/dirstate.py	Sat Aug 27 22:04:17 2005 -0700
@@ -141,6 +141,8 @@
                 st_size = kw.get('st_size', s.st_size)
                 st_mtime = kw.get('st_mtime', s.st_mtime)
                 self.map[f] = (state, s.st_mode, st_size, st_mtime)
+            if self.copies.has_key(f):
+                del self.copies[f]
 
     def forget(self, files):
         if not files: return
--- a/mercurial/filelog.py	Sat Aug 27 20:58:53 2005 -0700
+++ b/mercurial/filelog.py	Sat Aug 27 22:04:17 2005 -0700
@@ -59,7 +59,6 @@
 
     def renamed(self, node):
         if 0 and self.parents(node)[0] != nullid:
-            print "shortcut"
             return False
         m = self.readmeta(node)
         if m and m.has_key("copy"):
--- a/mercurial/localrepo.py	Sat Aug 27 20:58:53 2005 -0700
+++ b/mercurial/localrepo.py	Sat Aug 27 22:04:17 2005 -0700
@@ -329,16 +329,18 @@
                 self.ui.warn("trouble committing %s!\n" % f)
                 raise
 
+            r = self.file(f)
+
             meta = {}
             cp = self.dirstate.copied(f)
             if cp:
                 meta["copy"] = cp
                 meta["copyrev"] = hex(m1.get(cp, m2.get(cp, nullid)))
                 self.ui.debug(" %s: copy %s:%s\n" % (f, cp, meta["copyrev"]))
-
-            r = self.file(f)
-            fp1 = m1.get(f, nullid)
-            fp2 = m2.get(f, nullid)
+                fp1, fp2 = nullid, nullid
+            else:
+                fp1 = m1.get(f, nullid)
+                fp2 = m2.get(f, nullid)
 
             # is the same revision on two branches of a merge?
             if fp2 == fp1:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-copy2	Sat Aug 27 22:04:17 2005 -0700
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+hg init
+echo foo > foo
+hg add foo
+hg commit -m1 -d"0 0"
+
+echo "# should show copy"
+cp foo bar
+hg copy foo bar
+hg debugstate
+
+echo "# shouldn't show copy"
+hg commit -m2 -d"0 0"
+hg debugstate
+
+echo "# should match"
+hg debugindex .hg/data/foo.i
+hg debugrename bar
+
+echo bleah > foo
+echo quux > bar
+hg commit -m3 -d"0 0"
+
+echo "# should not be renamed"
+hg debugrename bar
+
+cp foo bar
+hg copy foo bar
+echo "# should show copy"
+hg debugstate
+hg commit -m3 -d"0 0"
+
+echo "# should show no parents for tip"
+hg debugindex .hg/data/bar.i
+echo "# should match"
+hg debugindex .hg/data/foo.i
+hg debugrename bar
+
+echo "# should show no copies"
+hg debugstate
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-copy2.out	Sat Aug 27 22:04:17 2005 -0700
@@ -0,0 +1,34 @@
+# should show copy
+a 644          4 08/28/05 05:00:19 bar
+n 644          4 08/28/05 05:00:19 foo
+
+foo -> bar
+# shouldn't show copy
+n 644          4 08/28/05 05:00:19 bar
+n 644          4 08/28/05 05:00:19 foo
+
+# should match
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0       5      0       0 2ed2a3912a0b 000000000000 000000000000
+renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
+# should not be renamed
+not renamed
+# should show copy
+n 644          5 08/28/05 05:00:19 bar
+n 644          6 08/28/05 05:00:19 foo
+
+foo -> bar
+# should show no parents for tip
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0      69      0       1 6ca237634e1f 000000000000 000000000000
+     1        69       6      1       2 7a1ff8e75f5b 6ca237634e1f 000000000000
+     2        75      82      1       3 243dfe60f3d9 000000000000 000000000000
+# should match
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0       5      0       0 2ed2a3912a0b 000000000000 000000000000
+     1         5       7      1       2 dd12c926cf16 2ed2a3912a0b 000000000000
+renamed from foo:dd12c926cf165e3eb4cf87b084955cb617221c17
+# should show no copies
+n 644          6 08/28/05 05:00:19 bar
+n 644          6 08/28/05 05:00:19 foo
+