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