diff --git a/hgext/convert/filemap.py b/hgext/convert/filemap.py --- a/hgext/convert/filemap.py +++ b/hgext/convert/filemap.py @@ -358,12 +358,13 @@ class filemap_source(converter_source): # original filename in the rev part of the return value. changes, copies = self.base.getchanges(rev) newnames = {} - files = [] + files = {} for f, r in changes: newf = self.filemapper(f) - if newf: - files.append((newf, (f, r))) + if newf and (newf != f or newf not in files): + files[newf] = (f, r) newnames[f] = newf + files = sorted(files.items()) ncopies = {} for c in copies: diff --git a/tests/test-convert-filemap.t b/tests/test-convert-filemap.t --- a/tests/test-convert-filemap.t +++ b/tests/test-convert-filemap.t @@ -376,6 +376,39 @@ exercise incremental conversion at the s o 0 "addb" files: b +filemap rename undoing revision rename + + $ hg init renameundo + $ cd renameundo + $ echo 1 > a + $ echo 1 > c + $ hg ci -qAm add + $ hg mv -q a b/a + $ hg mv -q c b/c + $ hg ci -qm rename + $ echo 2 > b/a + $ echo 2 > b/c + $ hg ci -qm modify + $ cd .. + + $ echo "rename b ." > renameundo.fmap + $ hg convert --filemap renameundo.fmap renameundo renameundo2 + initializing destination renameundo2 repository + scanning source... + sorting... + converting... + 2 add + 1 rename + filtering out empty revision + repository tip rolled back to revision 0 (undo commit) + 0 modify + $ glog -R renameundo2 + o 1 "modify" files: a c + | + o 0 "add" files: a c + + + test merge parents/empty merges pruning $ glog()