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 140 141 142 143 144
|
# vim: set fileencoding=utf-8 :
"""Test submodule L{GitRepository} submodule methods"""
from . import context
import os
import shutil
import tarfile
from nose.tools import eq_, ok_
import gbp.log
import gbp.git
import gbp.command_wrappers
from gbp.scripts import buildpackage
REPO = None
REPODIR = None
SUBMODULES = []
SUBMODULE_NAMES = ["test_submodule", "sub module"]
TMPDIR = None
TESTFILE_NAME = "testfile"
class Submodule(object):
"""Class representing remote repo for Git submodule"""
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():
"""Test module setup"""
global REPO, REPODIR, SUBMODULES, TMPDIR
TMPDIR = context.new_tmpdir(__name__)
REPODIR = TMPDIR.join('test_repo')
REPO = gbp.git.GitRepository.create(REPODIR)
for name in SUBMODULE_NAMES:
SUBMODULES.append(Submodule(name, str(TMPDIR)))
context.chdir(REPODIR)
def teardown():
"""Test module teardown"""
context.teardown()
def test_empty_has_submodules():
"""Test empty repo for submodules"""
ok_(not REPO.has_submodules())
def _add_dummy_data(repo, msg):
"""Commit dummy data to a Git repository"""
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")
ok_(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)
ok_(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"""
ok_(REPO.has_submodules())
def test_get_submodules():
"""Check for submodules list of (name, hash)"""
modules = REPO.get_submodules("master")[0]
eq_(modules[0] , 'test_submodule')
eq_(len(modules[1]) , 40)
def test_dump_tree():
"""Dump the repository and check if files exist"""
dumpdir = TMPDIR.join("dump")
os.mkdir(dumpdir)
ok_(buildpackage.dump_tree(REPO, dumpdir, "master", True))
ok_(os.path.exists(os.path.join(dumpdir, TESTFILE_NAME)))
ok_(os.path.exists(os.path.join(dumpdir, SUBMODULES[0].name,
TESTFILE_NAME)))
def test_create_tarballs():
"""Create an upstream tarball"""
# Tarball with submodules
changelog = { "Source": "test", "Upstream-Version": "0.1" }
ok_(buildpackage.git_archive(REPO, changelog, str(TMPDIR), "HEAD", "bzip2",
"9", True))
# Tarball without submodules
changelog = { "Source": "test", "Upstream-Version": "0.2" }
ok_(buildpackage.git_archive(REPO, changelog, str(TMPDIR), "HEAD", "bzip2",
"9", False))
def test_check_tarfiles():
"""Check the contents of the created tarfile"""
# Check tarball with submodules
tarobj = tarfile.open(TMPDIR.join("test_0.1.orig.tar.bz2"), 'r:*')
files = tarobj.getmembers()
ok_("test-0.1/.gitmodules" in [ f.name for f in files ])
eq_(len(files) , 6)
# Check tarball without submodules
tarobj = tarfile.open(TMPDIR.join("test_0.2.orig.tar.bz2"), 'r:*')
files = tarobj.getmembers()
ok_(("test-0.2/%s" % TESTFILE_NAME) in [ f.name for f in files ])
eq_(len(files) , 4)
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")
eq_(len(module), len(SUBMODULE_NAMES))
for module in REPO.get_submodules("master"):
eq_(len(module[1]) , 40)
ok_(os.path.basename(module[0]) in SUBMODULE_NAMES)
# vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·:
|