# HG changeset patch # User Augie Fackler # Date 1223507849 18000 # Node ID 8626f3d2e50be930e6750cdfae6fa8517677c0a1 # Parent 2953c867ca99a38fdc7756d09c9ebf6ecf9a7640 Add a small stack of tests that exercise some of the interesting special cases. diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -1,3 +1,5 @@ syntax:glob *.pyc .DS_Store +*.swp +.coverage diff --git a/tests/fixtures/many_special_cases.svndump b/tests/fixtures/many_special_cases.svndump new file mode 100644 --- /dev/null +++ b/tests/fixtures/many_special_cases.svndump @@ -0,0 +1,508 @@ +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: 107 +Content-length: 107 + +K 7 +svn:log +V 8 +Add beta +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-07T23:28:22.651398Z +PROPS-END + +Node-path: trunk/beta +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 13 +Text-content-md5: 981d1eb5fd0bbe05354c292105944863 +Content-length: 23 + +PROPS-END +Data of beta + + +Revision-number: 4 +Prop-content-length: 113 +Content-length: 113 + +K 7 +svn:log +V 13 +Make a branch +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T01:35:39.984789Z +PROPS-END + +Node-path: branches/the_branch +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 3 +Node-copyfrom-path: trunk +Prop-content-length: 34 +Content-length: 34 + +K 13 +svn:mergeinfo +V 0 + +PROPS-END + + +Revision-number: 5 +Prop-content-length: 123 +Content-length: 123 + +K 7 +svn:log +V 23 +add delta on the branch +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T01:39:05.520779Z +PROPS-END + +Node-path: branches/the_branch/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 + + +Revision-number: 6 +Prop-content-length: 119 +Content-length: 119 + +K 7 +svn:log +V 19 +Add gamma on trunk. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T01:39:29.950892Z +PROPS-END + +Node-path: trunk/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: 7 +Prop-content-length: 192 +Content-length: 192 + +K 7 +svn:log +V 92 +Add a dir that is part of another file so I can delete it to test a case in the delete code. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T21:58:28.902105Z +PROPS-END + +Node-path: trunk/gam +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: trunk/gam/bar +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 4 +Text-content-md5: c157a79031e1c40f85931829bc5fc552 +Content-length: 14 + +PROPS-END +bar + + +Node-path: trunk/gam/baz +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 4 +Text-content-md5: 258622b1688250cb619f3c9ccaefb7eb +Content-length: 14 + +PROPS-END +baz + + +Node-path: trunk/gam/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: 8 +Prop-content-length: 150 +Content-length: 150 + +K 7 +svn:log +V 50 +delete gam to test that previously-mentioned case. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T21:58:43.789735Z +PROPS-END + +Node-path: trunk/gam +Node-action: delete + + +Revision-number: 9 +Prop-content-length: 113 +Content-length: 113 + +K 7 +svn:log +V 13 +Add a symlink +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T22:44:17.202691Z +PROPS-END + +Node-path: trunk/delta +Node-kind: file +Node-action: add +Prop-content-length: 33 +Text-content-length: 10 +Text-content-md5: 9d4142e2eb58c20531a1ac599bb0f7fd +Content-length: 43 + +K 11 +svn:special +V 1 +* +PROPS-END +link alpha + +Revision-number: 10 +Prop-content-length: 149 +Content-length: 149 + +K 7 +svn:log +V 49 +redirect an existing symlink to a different file. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T22:45:46.927432Z +PROPS-END + +Node-path: trunk/delta +Node-kind: file +Node-action: change +Text-content-length: 9 +Text-content-md5: 404afec23f4019f7d784b2f78ff5503d +Content-length: 9 + +link beta + +Revision-number: 11 +Prop-content-length: 117 +Content-length: 117 + +K 7 +svn:log +V 17 +remove a symlink. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T22:46:50.607212Z +PROPS-END + +Node-path: trunk/delta +Node-action: delete + + +Revision-number: 12 +Prop-content-length: 123 +Content-length: 123 + +K 7 +svn:log +V 23 +add an executable file. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T22:47:47.863563Z +PROPS-END + +Node-path: trunk/delta +Node-kind: file +Node-action: add +Prop-content-length: 36 +Text-content-length: 6 +Text-content-md5: d2840cc81bc032bd1141b56687d0f93c +Content-length: 42 + +K 14 +svn:executable +V 1 +* +PROPS-END +delta + + +Revision-number: 13 +Prop-content-length: 127 +Content-length: 127 + +K 7 +svn:log +V 27 +remove execute from a file. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T22:48:13.734895Z +PROPS-END + +Node-path: trunk/delta +Node-kind: file +Node-action: change +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Revision-number: 14 +Prop-content-length: 124 +Content-length: 124 + +K 7 +svn:log +V 24 +add executable to a file +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T22:48:33.143919Z +PROPS-END + +Node-path: trunk/delta +Node-kind: file +Node-action: change +Prop-content-length: 36 +Content-length: 36 + +K 14 +svn:executable +V 1 +* +PROPS-END + + +Revision-number: 15 +Prop-content-length: 131 +Content-length: 131 + +K 7 +svn:log +V 31 +Add epsilon as a copy of alpha. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-10-08T23:15:08.250550Z +PROPS-END + +Node-path: trunk/epsilon +Node-kind: file +Node-action: add +Node-copyfrom-rev: 3 +Node-copyfrom-path: trunk/alpha +Text-copy-source-md5: 3c72ebf8bbd7fa88b1fdcee5398b5a17 +Prop-content-length: 34 +Text-content-length: 14 +Text-content-md5: dc626a565ffebe5389e0109508e8ee31 +Content-length: 48 + +K 13 +svn:mergeinfo +V 0 + +PROPS-END +file: epsilon + + 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 @@ -24,18 +24,18 @@ class TestBasicRepoLayout(unittest.TestC def test_fresh_fetch_single_rev(self): test_util.load_svndump_fixture(self.repo_path, 'single_rev.svndump') - fetch_command.fetch_revisions(ui.ui(), - svn_url='file://%s' % self.repo_path, + fetch_command.fetch_revisions(ui.ui(), + svn_url='file://%s' % self.repo_path, hg_repo_path=self.wc_path) repo = hg.repository(ui.ui(), self.wc_path) - self.assertEqual(node.hex(repo['tip'].node()), + self.assertEqual(node.hex(repo['tip'].node()), 'a47d0ce778660a91c31bf2c21c448e9ee296ac90') self.assertEqual(repo['tip'], repo[0]) def test_fresh_fetch_two_revs(self): test_util.load_svndump_fixture(self.repo_path, 'two_revs.svndump') - fetch_command.fetch_revisions(ui.ui(), - svn_url='file://%s' % self.repo_path, + fetch_command.fetch_revisions(ui.ui(), + svn_url='file://%s' % self.repo_path, hg_repo_path=self.wc_path) repo = hg.repository(ui.ui(), self.wc_path) # TODO there must be a better way than repo[0] for this check @@ -47,8 +47,8 @@ class TestBasicRepoLayout(unittest.TestC def test_branches(self): test_util.load_svndump_fixture(self.repo_path, 'simple_branch.svndump') - fetch_command.fetch_revisions(ui.ui(), - svn_url='file://%s' % self.repo_path, + fetch_command.fetch_revisions(ui.ui(), + svn_url='file://%s' % self.repo_path, hg_repo_path=self.wc_path) repo = hg.repository(ui.ui(), self.wc_path) # TODO there must be a better way than repo[0] for this check @@ -62,8 +62,8 @@ class TestBasicRepoLayout(unittest.TestC def test_two_branches_with_heads(self): test_util.load_svndump_fixture(self.repo_path, 'two_heads.svndump') - fetch_command.fetch_revisions(ui.ui(), - svn_url='file://%s' % self.repo_path, + fetch_command.fetch_revisions(ui.ui(), + svn_url='file://%s' % self.repo_path, hg_repo_path=self.wc_path) repo = hg.repository(ui.ui(), self.wc_path) # TODO there must be a better way than repo[0] for this check @@ -79,6 +79,43 @@ class TestBasicRepoLayout(unittest.TestC self.assertEqual(repo['tip'], repo['default']) self.assertEqual(len(repo.heads()), 2) + def test_many_special_cases_replay(self): + test_util.load_svndump_fixture(self.repo_path, + 'many_special_cases.svndump') + fetch_command.fetch_revisions(ui.ui(), + svn_url='file://%s' % self.repo_path, + hg_repo_path=self.wc_path) + repo = hg.repository(ui.ui(), self.wc_path) + # TODO there must be a better way than repo[0] for this check + self._many_special_cases_checks(repo) + + + def test_many_special_cases_diff(self): + test_util.load_svndump_fixture(self.repo_path, + 'many_special_cases.svndump') + fetch_command.fetch_revisions(ui.ui(), + svn_url='file://%s' % self.repo_path, + hg_repo_path=self.wc_path, + stupid = True) + repo = hg.repository(ui.ui(), self.wc_path) + # TODO there must be a better way than repo[0] for this check + self._many_special_cases_checks(repo) + + def _many_special_cases_checks(self, repo): + self.assertEqual(node.hex(repo[0].node()), + 'a47d0ce778660a91c31bf2c21c448e9ee296ac90') + self.assertEqual(node.hex(repo['tip'].node()), + 'a7742757189db8aea5f4c6721cbbfb1a09f00ddf') + self.assertEqual(node.hex(repo['the_branch'].node()), + '8ccaba5f0eae124487e413abd904a013f7f6fdeb') + self.assertEqual(node.hex(repo['the_branch'].parents()[0].node()), + '9dfb0a19494f45c36e22f3c6d1b21d80638a7f6e') + self.assertEqual(len(repo['tip'].parents()), 1) + self.assertEqual(repo['tip'], repo['default']) + self.assertEqual(len(repo.heads()), 2) + + + class TestStupidPull(unittest.TestCase): def setUp(self): @@ -93,8 +130,8 @@ class TestStupidPull(unittest.TestCase): def test_stupid(self): test_util.load_svndump_fixture(self.repo_path, 'two_heads.svndump') - fetch_command.fetch_revisions(ui.ui(), - svn_url='file://%s' % self.repo_path, + fetch_command.fetch_revisions(ui.ui(), + svn_url='file://%s' % self.repo_path, hg_repo_path=self.wc_path, stupid=True) repo = hg.repository(ui.ui(), self.wc_path)