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
|
# vim: set fileencoding=utf-8 :
from . import context
import os
import shutil
import subprocess
import tempfile
import unittest
import gbp.log
import gbp.deb.git
import gbp.errors
from gbp.deb.changelog import ChangeLog
class DebianGitTestRepo(unittest.TestCase):
"""Scratch repo for a single unit test"""
def setUp(self):
self.tmpdir = context.new_tmpdir(__name__)
repodir = self.tmpdir.join('test_repo')
self.repo = gbp.deb.git.DebianGitRepository.create(repodir)
def tearDown(self):
context.teardown()
def add_file(self, name, content=None, msg=None):
"""
Add a single file with name I{name} and content I{content}. If
I{content} is C{none} the content of the file is undefined.
@param name: the file's path relativ to the git repo
@type name: C{str}
@param content: the file's content
@type content: C{str}
"""
path = os.path.join(self.repo.path, name)
d = os.path.dirname(path)
if not os.path.exists(d):
os.makedirs(d)
with open(path, 'w+') as f:
content == None or f.write(content)
self.repo.add_files(name, force=True)
self.repo.commit_files(path, msg or "added %s" % name)
class OsReleaseFile(object):
"""Repesents a simple file with key-value pairs"""
def __init__(self, filename):
self._values = {}
try:
with open(filename, 'r') as filed:
for line in filed.readlines():
try:
key, value = line.split('=', 1)
except ValueError:
pass
else:
self._values[key] = value.strip()
except IOError as err:
gbp.log.info('Failed to read OS release file %s: %s' %
(filename, err))
def __getitem__(self, key):
if key in self._values:
return self._values[key]
return None
def __contains__(self, key):
return key in self._values
def __str__(self):
return str(self._values)
def __repr__(self):
return repr(self._values)
class MockedChangeLog(ChangeLog):
contents = """foo (%s) experimental; urgency=low
%s
-- Debian Maintainer <maint@debian.org> Sat, 01 Jan 2012 00:00:00 +0100"""
def __init__(self, version, changes = "a important change"):
ChangeLog.__init__(self,
contents=self.contents % (version, changes))
def get_dch_default_urgency():
"""Determine the default urgency level used by dch"""
urgency = 'medium'
tempdir = tempfile.mkdtemp()
tmp_dch_name = os.path.join(tempdir, 'changelog')
try:
dch_cmd = ['dch', '--create', '--empty', '--changelog', tmp_dch_name,
'--package=foo', '--newversion=1',
'--distribution=UNRELEASED']
ret = subprocess.Popen(dch_cmd).wait()
except OSError:
pass
else:
if ret == 0:
with open(tmp_dch_name) as dchfile:
header = dchfile.readline().strip()
urgency = header.split()[-1].replace('urgency=', '')
finally:
if os.path.isdir(tempdir):
shutil.rmtree(tempdir)
return urgency
|