summaryrefslogtreecommitdiff
path: root/tests/test_find_repositories_below.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_find_repositories_below.py')
-rw-r--r--tests/test_find_repositories_below.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/test_find_repositories_below.py b/tests/test_find_repositories_below.py
new file mode 100644
index 0000000..ff3c4bf
--- /dev/null
+++ b/tests/test_find_repositories_below.py
@@ -0,0 +1,101 @@
+
+import mercurial_extension_utils as meu
+import os
+import tempfile
+import shutil
+import subprocess
+import unittest
+
+
+class RepoBuffer(object):
+ def __init__(self):
+ self.location = tempfile.mkdtemp()
+ self.setup_repos()
+
+ def __del__(self):
+ shutil.rmtree(self.location)
+
+ def setup_repos(self):
+ self._exec_in_top("hg", "init", "c/c1/c11-repo")
+ self._exec_in_top("hg", "init", "a-repo")
+ self._exec_in_top("hg", "init", "b/b3/b3a-repo")
+ self._exec_in_top("hg", "init", "b/b1-repo")
+ self._exec_in_top("hg", "init", "b/b2-repo")
+ self._exec_in_top("hg", "init", "b/b3/b3b-repo")
+ self._exec_in_top("hg", "init", "a-repo/a1-subrepo")
+ self._exec_in_top("hg", "init", "b/b1-repo/b11-subrepo")
+
+ def _exec_in_top(self, *args):
+ status = subprocess.Popen(args, cwd=self.location).wait()
+ if status:
+ raise subprocess.CalledProcessError(status, args[0])
+
+
+class TestFindRepositories(unittest.TestCase):
+
+ buffer = RepoBuffer()
+
+ def _check_path_and_fix(self, repo_path, where):
+ self.assertTrue(os.path.isdir(repo_path))
+ self.assertTrue(os.path.isabs(repo_path))
+ self.assertTrue(os.path.isdir(os.path.join(repo_path, b".hg")))
+ norm_where = meu.normalize_path(where)
+ fixed_path = meu.pycompat.bytestr(repo_path.replace(norm_where, b"/xxx"))
+ if fixed_path == repo_path:
+ self.fail("Failed to normalize path, repo_path %s, where %s" % (repo_path, norm_where))
+ return fixed_path
+
+ def test_std(self):
+ where = self.buffer.location
+ items = []
+ for repo_path in meu.find_repositories_below(where):
+ items.append(self._check_path_and_fix(repo_path, where))
+ self.assertEqual(items, [meu.pycompat.bytestr(x) for x in [
+ "/xxx/a-repo",
+ "/xxx/b/b1-repo",
+ "/xxx/b/b2-repo",
+ "/xxx/b/b3/b3a-repo",
+ "/xxx/b/b3/b3b-repo",
+ "/xxx/c/c1/c11-repo",
+ ]])
+
+ def test_std_check_inside(self):
+ where = self.buffer.location
+ items = []
+ for repo_path in meu.find_repositories_below(where, check_inside=True):
+ items.append(self._check_path_and_fix(repo_path, where))
+ self.assertEqual(items, [meu.pycompat.bytestr(x) for x in [
+ "/xxx/a-repo",
+ "/xxx/a-repo/a1-subrepo",
+ "/xxx/b/b1-repo",
+ "/xxx/b/b1-repo/b11-subrepo",
+ "/xxx/b/b2-repo",
+ "/xxx/b/b3/b3a-repo",
+ "/xxx/b/b3/b3b-repo",
+ "/xxx/c/c1/c11-repo",
+ ]])
+
+ def test_from_repo(self):
+ where = self.buffer.location
+ items = []
+ for repo_path in meu.find_repositories_below(
+ os.path.join(where, "a-repo")):
+ items.append(self._check_path_and_fix(repo_path, where))
+ self.assertEqual(items, [meu.pycompat.bytestr(x) for x in [
+ "/xxx/a-repo",
+ ]])
+
+ def test_from_repo_check_inside(self):
+ where = self.buffer.location
+ items = []
+ for repo_path in meu.find_repositories_below(
+ os.path.join(where, "a-repo"), check_inside=True):
+ items.append(self._check_path_and_fix(repo_path, where))
+ self.assertEqual(items, [meu.pycompat.bytestr(x) for x in [
+ "/xxx/a-repo",
+ "/xxx/a-repo/a1-subrepo",
+ ]])
+
+
+if __name__ == "__main__":
+ unittest.main()