aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/04_test_submodules.py
blob: 5ae1f5fa02ba1d023ed45f36e85fb7df821fb0a7 (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# vim: set fileencoding=utf-8 :

"""Test submodule L{GitRepository} submodule methods"""

import os
import shutil
import tarfile
import tempfile

import gbp.log
import gbp.git
import gbp.command_wrappers

from gbp.scripts import buildpackage

top = None
repo = None
repodir = None

submodules = []
submodule_names = ["test_submodule", "sub module"]
tmpdir = None
testfile_name = "testfile"

class Submodule(object):
    def __init__(self, name, tmpdir):
        self.name = name
        self.dir = os.path.join(tmpdir, name)
        self.repo = gbp.git.GitRepository.create(self.dir)


def setup():
    global repo, repodir, submodules, top, tmpdir

    gbp.log.setup(False, False)
    top = os.path.abspath(os.curdir)
    tmpdir =os.path.join(top,'gbp_%s_repo' % __name__)
    os.mkdir(tmpdir)

    repodir = os.path.join(tmpdir, 'test_repo')
    repo = gbp.git.GitRepository.create(repodir)

    for name in submodule_names:
        submodules.append(Submodule(name, tmpdir))

    os.chdir(repodir)


def teardown():
    os.chdir(top)
    if not os.getenv("GBP_TESTS_NOCLEAN") and tmpdir:
        shutil.rmtree(tmpdir)


def test_empty_has_submodules():
    """Test empty repo for submodules"""
    assert not repo.has_submodules()


def _add_dummy_data(repo, msg):
    shutil.copy(".git/HEAD", testfile_name)
    repo.add_files('.', force=True)
    repo.commit_all(msg)


def test_add_files():
    """Add some dummy data"""
    _add_dummy_data(repo, "initial commit")
    assert True


def test_add_submodule_files():
    """Add some dummy data"""
    for submodule in submodules:
        os.chdir(submodule.dir)
        _add_dummy_data(submodule.repo, "initial commit in submodule")
        os.chdir(repodir)
    assert True


def test_add_submodule():
    """Add a submodule"""
    repo.add_submodule(submodules[0].dir)
    repo.commit_all(msg='Added submodule %s' % submodules[0].dir)

def test_has_submodules():
    """Check for submodules"""
    assert repo.has_submodules()


def test_get_submodules():
    """Check for submodules list of  (name, hash)"""
    modules = repo.get_submodules("master")[0]
    assert modules[0] == './test_submodule'
    assert len(modules[1]) == 40


def test_dump_tree():
    """Dump the repository and check if files exist"""
    dumpdir = os.path.join(tmpdir, "dump")
    os.mkdir(dumpdir)
    assert buildpackage.dump_tree(repo, dumpdir, "master", True)
    assert os.path.exists(os.path.join(dumpdir, testfile_name))
    assert os.path.exists(os.path.join(dumpdir, submodules[0].name, testfile_name))


def test_create_tarball():
    """Create an upstream tarball"""
    cp = { "Source": "test", "Upstream-Version": "0.1" }
    assert buildpackage.git_archive(repo,
                                        cp,
                                        tmpdir,
                                        "HEAD",
                                        "bzip2",
                                        "9",
                                        True)

def test_check_tarfile():
    """Check the contents of the created tarfile"""
    t = tarfile.open(os.path.join(tmpdir,"test_0.1.orig.tar.bz2"), 'r:*')
    files = t.getmembers()
    assert "test-0.1/.gitmodules" in [ f.name for f in files ]
    assert len(files) == 6

def test_add_whitespace_submodule():
    """Add a second submodule with name containing whitespace"""
    repo.add_submodule(submodules[1].dir)
    repo.commit_all(msg='Added submodule %s' % submodules[0].dir)

def test_get_more_submodules():
    """Check for submodules list of  (name, hash)"""
    module = repo.get_submodules("master")
    assert(len(module) == len(submodule_names))
    for module in repo.get_submodules("master"):
        assert len(module[1]) == 40
        assert os.path.basename(module[0]) in submodule_names


# vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·: