"""Contains library functions""" import logging import os import tempfile from git import ( Repo ) from git.db import ( GitCmdObjectDB, GitDB ) from test.lib import ( TestBase ) from git.util import rmtree import os.path as osp #{ Invariants k_env_git_repo = "GIT_PYTHON_TEST_GIT_REPO_BASE" #} END invariants #{ Base Classes class TestBigRepoR(TestBase): """TestCase providing access to readonly 'big' repositories using the following member variables: * gitrorepo * Read-Only git repository - actually the repo of git itself * puregitrorepo * As gitrepo, but uses pure python implementation """ #{ Invariants #} END invariants def setUp(self): try: super(TestBigRepoR, self).setUp() except AttributeError: pass repo_path = os.environ.get(k_env_git_repo) if repo_path is None: logging.info( ("You can set the %s environment variable to a .git repository of" % k_env_git_repo) + "your choice - defaulting to the gitpython repository") repo_path = osp.dirname(__file__) # end set some repo path self.gitrorepo = Repo(repo_path, odbt=GitCmdObjectDB, search_parent_directories=True) self.puregitrorepo = Repo(repo_path, odbt=GitDB, search_parent_directories=True) def tearDown(self): self.gitrorepo.git.clear_cache() self.gitrorepo = None self.puregitrorepo.git.clear_cache() self.puregitrorepo = None class TestBigRepoRW(TestBigRepoR): """As above, but provides a big repository that we can write to. Provides ``self.gitrwrepo`` and ``self.puregitrwrepo``""" def setUp(self): self.gitrwrepo = None try: super(TestBigRepoRW, self).setUp() except AttributeError: pass dirname = tempfile.mktemp() os.mkdir(dirname) self.gitrwrepo = self.gitrorepo.clone(dirname, shared=True, bare=True, odbt=GitCmdObjectDB) self.puregitrwrepo = Repo(dirname, odbt=GitDB) def tearDown(self): super(TestBigRepoRW, self).tearDown() if self.gitrwrepo is not None: rmtree(self.gitrwrepo.working_dir) self.gitrwrepo.git.clear_cache() self.gitrwrepo = None self.puregitrwrepo.git.clear_cache() self.puregitrwrepo = None #} END base classes