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
--- 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
+