summaryrefslogtreecommitdiff
path: root/tests/test_revmap_migrate.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_revmap_migrate.py')
-rw-r--r--tests/test_revmap_migrate.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/test_revmap_migrate.py b/tests/test_revmap_migrate.py
new file mode 100644
index 0000000..4d92b22
--- /dev/null
+++ b/tests/test_revmap_migrate.py
@@ -0,0 +1,72 @@
+import test_util
+
+from mercurial import util as hgutil
+from hgsubversion import svnmeta, maps
+from mercurial.node import hex
+
+class TestRevMapMigrate(test_util.TestBase):
+
+ def tearDown(self):
+ # revert changes to defaultrevmapclass
+ svnmeta.SVNMeta._defaultrevmapclass = maps.RevMap
+
+ def _test_revmap_migrate(self, fromclass, toclass):
+ # revmap interfaces to test
+ getters = [
+ lambda x: x.branchedits('the_branch', 3),
+ lambda x: x.branchedits('the_branch', 4),
+ lambda x: x.branchedits('the_branch', 5),
+ lambda x: x.branchedits('the_branch', 6),
+ lambda x: x.branchedits(None, 5),
+ lambda x: x.branchedits('non_existed', 10),
+ lambda x: x.branchmaxrevnum('the_branch', 3),
+ lambda x: x.branchmaxrevnum('the_branch', 4),
+ lambda x: x.branchmaxrevnum('the_branch', 5),
+ lambda x: x.branchmaxrevnum('the_branch', 6),
+ lambda x: x.branchmaxrevnum(None, 5),
+ lambda x: x.branchmaxrevnum('non_existed', 10),
+ lambda x: list(x.revhashes(3)),
+ lambda x: list(x.revhashes(4)),
+ lambda x: list(x.revhashes(42)),
+ lambda x: list(x.revhashes(105)),
+ lambda x: x.firstpulled,
+ lambda x: x.lastpulled,
+ lambda x: x.lasthash,
+ ]
+
+ svnmeta.SVNMeta._defaultrevmapclass = fromclass
+ repo = self._load_fixture_and_fetch('two_heads.svndump')
+ meta = svnmeta.SVNMeta(repo)
+ self.assertEqual(meta.revmap.__class__, fromclass)
+ origrevmap = meta.revmap
+
+ # insert fake special (duplicated, with '\0') data
+ origrevmap[103, None] = b'\0' * 20
+ origrevmap[104, None] = b'\0' * 18 + b'cd'
+ origrevmap[105, None] = b'ab\0cdefghijklmnopqrs'
+ origrevmap[104, None] = b'\0' * 18 + b'\xff\0'
+ origrevmap[105, 'ab'] = origrevmap[105, None]
+
+ origvalues = [f(meta.revmap) for f in getters]
+
+ # migrate to another format (transparently)
+ svnmeta.SVNMeta._defaultrevmapclass = toclass
+ meta = svnmeta.SVNMeta(repo)
+ self.assertEqual(meta.revmap.__class__, toclass)
+
+ # enable iteration otherwise we cannot use iteritems
+ origrevmap._allowiter = True
+ for k, v in origrevmap.iteritems():
+ newv = meta.revmap[k]
+ self.assertEqual(newv, v)
+ self.assertEqual(len(newv), 20)
+ self.assertEqual(meta.revmap[meta.revmap.hashes()[v]], v)
+
+ newvalues = [f(meta.revmap) for f in getters]
+ self.assertEqual(origvalues, newvalues)
+
+ def test_revmap_migrate_up(self):
+ self._test_revmap_migrate(maps.RevMap, maps.SqliteRevMap)
+
+ def test_revmap_migrate_down(self):
+ self._test_revmap_migrate(maps.SqliteRevMap, maps.RevMap)