# HG changeset patch # User Augie Fackler # Date 1227651717 21600 # Node ID e58c2f1de05924ae2af26b0369103a954fc4dd8e # Parent 5497d1264b4d2d39b97f1d2e0f483eb129f6c466 Fix a regression in converting repositories with files copied in from outside branches/tags/trunk where repo root != project root. diff --git a/fetch_command.py b/fetch_command.py --- a/fetch_command.py +++ b/fetch_command.py @@ -124,7 +124,8 @@ def replay_convert_rev(hg_editor, svn, r if p[-1] == '/': dirpath = p[len(rootpath):] files_to_grab.update((dirpath + f for f,k in - svn.list_files(p, r.revnum) if k == 'f')) + svn.list_files(dirpath, r.revnum) + if k == 'f')) else: files_to_grab.add(p[len(rootpath):]) hg_editor.ui.status('\nFetching files...\n') diff --git a/tests/fixtures/fetch_missing_files_subdir.svndump b/tests/fixtures/fetch_missing_files_subdir.svndump new file mode 100644 --- /dev/null +++ b/tests/fixtures/fetch_missing_files_subdir.svndump @@ -0,0 +1,184 @@ +SVN-fs-dump-format-version: 2 + +UUID: 90158077-d23c-442d-9351-5dd160359962 + +Revision-number: 0 +Prop-content-length: 56 +Content-length: 56 + +K 8 +svn:date +V 27 +2008-11-25T21:55:11.516061Z +PROPS-END + +Revision-number: 1 +Prop-content-length: 112 +Content-length: 112 + +K 7 +svn:log +V 12 +initial add. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-11-25T22:00:55.483808Z +PROPS-END + +Node-path: foo +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: foo/branches +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: foo/tags +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: foo/trunk +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: foo/trunk/foo +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 4 +Text-content-md5: d3b07384d113edec49eaa6238ad5ff00 +Content-length: 14 + +PROPS-END +foo + + +Revision-number: 2 +Prop-content-length: 130 +Content-length: 130 + +K 7 +svn:log +V 30 +commit bar in the wrong place. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-11-25T22:01:32.415795Z +PROPS-END + +Node-path: foo/bar +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: foo/bar/alpha +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 6 +Text-content-md5: 9f9f90dbe3e5ee1218c86b8839db1995 +Content-length: 16 + +PROPS-END +alpha + + +Node-path: foo/bar/beta +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 5 +Text-content-md5: f0cf2a92516045024a0c99147b28f05b +Content-length: 15 + +PROPS-END +beta + + +Node-path: foo/bar/delta +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 6 +Text-content-md5: d2840cc81bc032bd1141b56687d0f93c +Content-length: 16 + +PROPS-END +delta + + +Node-path: foo/bar/gamma +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 6 +Text-content-md5: 303febb9068384eca46b5b6516843b35 +Content-length: 16 + +PROPS-END +gamma + + +Revision-number: 3 +Prop-content-length: 126 +Content-length: 126 + +K 7 +svn:log +V 26 +move bar to the sane place +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-11-25T22:02:24.410165Z +PROPS-END + +Node-path: foo/trunk/bar +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 2 +Node-copyfrom-path: foo/bar + + +Node-path: foo/bar +Node-action: delete + + 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 @@ -8,9 +8,9 @@ import test_util class TestBasicRepoLayout(test_util.TestBase): - def _load_fixture_and_fetch(self, fixture_name): + def _load_fixture_and_fetch(self, fixture_name, subdir=''): return test_util.load_fixture_and_fetch(fixture_name, self.repo_path, - self.wc_path) + self.wc_path, subdir=subdir) def test_fresh_fetch_single_rev(self): repo = self._load_fixture_and_fetch('single_rev.svndump') @@ -95,6 +95,16 @@ class TestBasicRepoLayout(test_util.Test 'file_renamed_in_from_outside_btt.svndump') self.assert_('LICENSE.file' in repo['tip']) + def test_renamed_dir_in_from_outside_btt_not_repo_root(self): + repo = self._load_fixture_and_fetch( + 'fetch_missing_files_subdir.svndump', subdir='foo') + self.assertEqual(node.hex(repo['tip'].node()), + '2fae2544a5858d0bc6c04976683b3dcc0416d6e3') + self.assert_('bar/alpha' in repo['tip']) + self.assert_('foo' in repo['tip']) + self.assert_('bar/alpha' not in repo['tip'].parents()[0]) + self.assert_('foo' in repo['tip'].parents()[0]) + def test_oldest_not_trunk_and_tag_vendor_branch(self): repo = self._load_fixture_and_fetch( 'tagged_vendor_and_oldest_not_trunk.svndump') diff --git a/tests/test_util.py b/tests/test_util.py --- a/tests/test_util.py +++ b/tests/test_util.py @@ -40,8 +40,10 @@ def load_svndump_fixture(path, fixture_n proc.stdin.flush() proc.communicate() -def load_fixture_and_fetch(fixture_name, repo_path, wc_path, stupid=False): +def load_fixture_and_fetch(fixture_name, repo_path, wc_path, stupid=False, subdir=''): load_svndump_fixture(repo_path, fixture_name) + if subdir: + repo_path += '/' + subdir fetch_command.fetch_revisions(ui.ui(), svn_url=fileurl(repo_path), hg_repo_path=wc_path,