summaryrefslogtreecommitdiff
path: root/test/performance/lib.py
blob: c793d771f859157b4ab07c0f9be2eb964313a6f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"""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