You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.4KB

  1. """Contains library functions"""
  2. import logging
  3. import os
  4. import tempfile
  5. from git import (
  6. Repo
  7. )
  8. from git.db import (
  9. GitCmdObjectDB,
  10. GitDB
  11. )
  12. from git.test.lib import (
  13. TestBase
  14. )
  15. from git.util import rmtree
  16. import os.path as osp
  17. #{ Invariants
  18. k_env_git_repo = "GIT_PYTHON_TEST_GIT_REPO_BASE"
  19. #} END invariants
  20. #{ Base Classes
  21. class TestBigRepoR(TestBase):
  22. """TestCase providing access to readonly 'big' repositories using the following
  23. member variables:
  24. * gitrorepo
  25. * Read-Only git repository - actually the repo of git itself
  26. * puregitrorepo
  27. * As gitrepo, but uses pure python implementation
  28. """
  29. #{ Invariants
  30. #} END invariants
  31. def setUp(self):
  32. try:
  33. super(TestBigRepoR, self).setUp()
  34. except AttributeError:
  35. pass
  36. repo_path = os.environ.get(k_env_git_repo)
  37. if repo_path is None:
  38. logging.info(
  39. ("You can set the %s environment variable to a .git repository of" % k_env_git_repo) +
  40. "your choice - defaulting to the gitpython repository")
  41. repo_path = osp.dirname(__file__)
  42. # end set some repo path
  43. self.gitrorepo = Repo(repo_path, odbt=GitCmdObjectDB, search_parent_directories=True)
  44. self.puregitrorepo = Repo(repo_path, odbt=GitDB, search_parent_directories=True)
  45. def tearDown(self):
  46. self.gitrorepo.git.clear_cache()
  47. self.gitrorepo = None
  48. self.puregitrorepo.git.clear_cache()
  49. self.puregitrorepo = None
  50. class TestBigRepoRW(TestBigRepoR):
  51. """As above, but provides a big repository that we can write to.
  52. Provides ``self.gitrwrepo`` and ``self.puregitrwrepo``"""
  53. def setUp(self):
  54. self.gitrwrepo = None
  55. try:
  56. super(TestBigRepoRW, self).setUp()
  57. except AttributeError:
  58. pass
  59. dirname = tempfile.mktemp()
  60. os.mkdir(dirname)
  61. self.gitrwrepo = self.gitrorepo.clone(dirname, shared=True, bare=True, odbt=GitCmdObjectDB)
  62. self.puregitrwrepo = Repo(dirname, odbt=GitDB)
  63. def tearDown(self):
  64. super(TestBigRepoRW, self).tearDown()
  65. if self.gitrwrepo is not None:
  66. rmtree(self.gitrwrepo.working_dir)
  67. self.gitrwrepo.git.clear_cache()
  68. self.gitrwrepo = None
  69. self.puregitrwrepo.git.clear_cache()
  70. self.puregitrwrepo = None
  71. #} END base classes