# HG changeset patch # User Augie Fackler # Date 1225078757 18000 # Node ID 496c0354019cf52e608be17d6d7c7ad3394126d7 # Parent 9952f03ddfbe7462ddee7860fdccaab01344b661 Improved handling of copies from outside of trunk. diff --git a/hg_delta_editor.py b/hg_delta_editor.py --- a/hg_delta_editor.py +++ b/hg_delta_editor.py @@ -532,8 +532,10 @@ class HgChangeReceiver(delta.Editor): self.commit_branches_empty[branch] = True else: self.commit_branches_empty[branch] = False - if not (self._is_path_valid(path) and copyfrom_path and - self._is_path_valid(copyfrom_path)): + if not self._is_path_valid(path) or not copyfrom_path: + return + if copyfrom_path and not self._is_path_valid(copyfrom_path): + self.missing_plaintexts.add('%s/' % path) return cp_f, br_from = self._path_and_branch_for_path(copyfrom_path) diff --git a/tests/fixtures/test_files_copied_from_outside_btt.svndump b/tests/fixtures/test_files_copied_from_outside_btt.svndump new file mode 100644 --- /dev/null +++ b/tests/fixtures/test_files_copied_from_outside_btt.svndump @@ -0,0 +1,170 @@ +SVN-fs-dump-format-version: 2 + +UUID: df2126f7-00ab-4d49-b42c-7e981dde0bcf + +Revision-number: 0 +Prop-content-length: 56 +Content-length: 56 + +K 8 +svn:date +V 27 +2008-10-07T22:49:12.059692Z +PROPS-END + +Revision-number: 1 +Prop-content-length: 111 +Content-length: 111 + +K 7 +svn:log +V 11 +Empty dirs. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-07T22:49:41.118037Z +PROPS-END + +Node-path: branches +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: tags +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: trunk +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Revision-number: 2 +Prop-content-length: 108 +Content-length: 108 + +K 7 +svn:log +V 9 +Add alpha +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-07T23:23:02.991743Z +PROPS-END + +Node-path: trunk/alpha +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 12 +Text-content-md5: 3c72ebf8bbd7fa88b1fdcee5398b5a17 +Content-length: 22 + +PROPS-END +file: alpha + + +Revision-number: 3 +Prop-content-length: 115 +Content-length: 115 + +K 7 +svn:log +V 15 +Add third_party +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-27T03:16:13.831333Z +PROPS-END + +Node-path: third_party +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: third_party/magic +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: third_party/magic/the_magic_software +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 7 +Text-content-md5: bc82cb068ef102a1f4e296992e5979ef +Content-length: 17 + +PROPS-END +magic! + + +Revision-number: 4 +Prop-content-length: 131 +Content-length: 131 + +K 7 +svn:log +V 31 +Copy magic in from third_party. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-27T03:16:32.737023Z +PROPS-END + +Node-path: trunk/magic +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 3 +Node-copyfrom-path: third_party/magic +Prop-content-length: 34 +Content-length: 34 + +K 13 +svn:mergeinfo +V 0 + +PROPS-END + + diff --git a/tests/test_fetch_command.py b/tests/test_fetch_command.py --- a/tests/test_fetch_command.py +++ b/tests/test_fetch_command.py @@ -97,6 +97,12 @@ class TestBasicRepoLayout(unittest.TestC 'a47d0ce778660a91c31bf2c21c448e9ee296ac90') assert 'README' not in repo + def test_files_copied_from_outside_btt(self): + repo = self._load_fixture_and_fetch( + 'test_files_copied_from_outside_btt.svndump') + self.assertEqual(node.hex(repo['tip'].node()), + 'c4e669a763a70f751c71d4534a34a65f398d71d4') + self.assertEqual(len(repo.changelog), 2) class TestStupidPull(unittest.TestCase): def setUp(self):