diff --git a/hgext/convert/subversion.py b/hgext/convert/subversion.py --- a/hgext/convert/subversion.py +++ b/hgext/convert/subversion.py @@ -598,7 +598,7 @@ class svn_source(converter_source): copies[self.recode(copyto_entry)] = self.recode(entry) # copy from quux splort/quuxfile - return (entries, copies) + return (util.unique(entries), copies) def _fetch_revisions(self, from_revnum, to_revnum): if from_revnum < to_revnum: diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -687,6 +687,8 @@ class localrepository(repo.repository): p1=None, p2=None, extra={}, empty_ok=False): wlock = lock = tr = None valid = 0 # don't save the dirstate if this isn't set + if files: + files = util.unique(files) try: commit = [] remove = [] diff --git a/tests/test-convert-svn-branches.out b/tests/test-convert-svn-branches.out --- a/tests/test-convert-svn-branches.out +++ b/tests/test-convert-svn-branches.out @@ -89,7 +89,7 @@ o 9 branch trunk@1 into old2 files: | | | | o | 3 change letter files: letter.txt | | | -+---o 2 branch trunk, remove letter3 files: letter.txt letter.txt letter2.txt letter2.txt ++---o 2 branch trunk, remove letter3 files: letter.txt letter2.txt | | | o 1 hello files: letter.txt letter2.txt letter3.txt |/ diff --git a/tests/test-convert-svn-source b/tests/test-convert-svn-source --- a/tests/test-convert-svn-source +++ b/tests/test-convert-svn-source @@ -103,13 +103,16 @@ hg convert $svnurl A-hg echo % update svn repository again cd A echo "see second letter" >> letter.txt -echo "nice to meet you" > letter2.txt -svn add letter2.txt +# Put it in a subdirectory to test duplicate file records +# from svn source (issue 714) +mkdir todo +echo "nice to meet you" > todo/letter2.txt +svn add todo svn ci -m "second letter" svn copy -m "tag v0.2" $svnurl/trunk $svnurl/tags/v0.2 -echo "blah-blah-blah" >> letter2.txt +echo "blah-blah-blah" >> todo/letter2.txt svn ci -m "work in progress" cd .. diff --git a/tests/test-convert-svn-source.out b/tests/test-convert-svn-source.out --- a/tests/test-convert-svn-source.out +++ b/tests/test-convert-svn-source.out @@ -82,14 +82,16 @@ 1 world 0 nice day updating tags % update svn repository again -A letter2.txt +A todo +A todo/letter2.txt Sending letter.txt -Adding letter2.txt +Adding todo +Adding todo/letter2.txt Transmitting file data .. Committed revision 9. Committed revision 10. -Sending letter2.txt +Sending todo/letter2.txt Transmitting file data . Committed revision 11. % test incremental conversion @@ -101,9 +103,9 @@ 0 work in progress updating tags o 7 update tags files: .hgtags | -o 6 work in progress files: letter2.txt +o 6 work in progress files: todo/letter2.txt | -o 5 second letter files: letter.txt letter2.txt +o 5 second letter files: letter.txt todo/letter2.txt | o 4 update tags files: .hgtags |