Commit 474acd99 authored by Guido Günther's avatar Guido Günther

Allow to automatically etermine the dist to build for

Setting --git-dist=DEP14 will follow the DEP14 proposal to determine the
suite to build for via vendor/suite. The exception is sid where DIST is
just set to be empty as well as native packages.
parent 3775a4d7
......@@ -197,7 +197,14 @@
<para>
Build for distribution <replaceable>DIST</replaceable> when using
<command>--git-pbuilder</command>. If unset build for the unstable
distribution.
distribution. The special value <option>DEP14</option> will set
the distribution to build for from the branch name. I.e. if you're
starting the build from a branch named
<replaceable>debian/wheezy-backports</replaceable> the
distribution is set
to <replaceable>wheezy-backports</replaceable>. If the branch is
named <replaceable>downstream/sid</replaceable> the distribution
would be set to <replaceable>downstream_sid</replaceable>.
</para>
</listitem>
</varlistentry>
......
......@@ -103,4 +103,9 @@ def compare_versions(version1, version2):
return DpkgCompareVersions()(version1, version2)
def get_vendor():
pipe = subprocess.Popen(["dpkg-vendor", "--query", "Vendor"], shell=False, stdout=subprocess.PIPE)
return pipe.stdout.readline().strip()
# vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·:
......@@ -328,12 +328,39 @@ def guess_comp_type(repo, comp_type, cp, tarball_dir):
return comp_type
def setup_pbuilder(options):
def get_pbuilder_dist(options, repo, native=False):
"""
Determin the dist to build for with pbuilder/cowbuilder
"""
if options.pbuilder_dist == 'DEP14':
branch = repo.branch
if not branch:
raise GbpError("Failed to setup DIST for %s. "
"Can't determine current branch." % options.builder)
else:
parts = branch.rsplit('/')
if len(parts) == 2:
vendor = du.get_vendor().lower()
suite = parts[1]
if vendor == parts[0]:
dist = '' if suite == 'sid' else suite
else:
dist = '%s_%s' % (parts[0], suite)
elif len(parts) == 1 and native and branch in ['master', 'sid']:
dist = ''
else:
raise GbpError("DEP14 DIST setup needs branch name to be vendor/suite")
else:
dist = options.pbuilder_dist
return dist
def setup_pbuilder(options, repo, native):
"""setup everything to use git-pbuilder"""
if options.use_pbuilder or options.use_qemubuilder:
options.builder = 'git-pbuilder'
options.cleaner = '/bin/true'
os.environ['DIST'] = options.pbuilder_dist
os.environ['DIST'] = get_pbuilder_dist(options, repo, native)
if options.pbuilder_arch:
os.environ['ARCH'] = options.pbuilder_arch
if options.use_qemubuilder:
......@@ -342,6 +369,8 @@ def setup_pbuilder(options):
os.environ['GIT_PBUILDER_AUTOCONF'] = "no"
if options.pbuilder_options:
os.environ['GIT_PBUILDER_OPTIONS'] = options.pbuilder_options
gbp.log.info("Building with %s for %s" % (os.getenv('BUILDER') or '(cowbuilder)',
os.getenv('DIST') or '(sid)'))
def disable_hooks(options):
......@@ -586,7 +615,7 @@ def main(argv):
extra_env={'GBP_GIT_DIR': repo.git_dir,
'GBP_BUILD_DIR': build_dir})(dir=build_dir)
setup_pbuilder(options)
setup_pbuilder(options, repo, source.is_native())
# Finally build the package:
RunAtCommand(options.builder, dpkg_args, shell=True,
extra_env={'GBP_BUILD_DIR': build_dir})(dir=build_dir)
......
# vim: set fileencoding=utf-8 :
"""Test L{gbp.command_wrappers.Command}'s tarball unpack"""
from gbp.scripts.buildpackage import get_pbuilder_dist, GbpError
from . testutils import DebianGitTestRepo
from mock import patch
class TestGbpBuildpackage(DebianGitTestRepo):
class Options(object):
pass
def setUp(self):
DebianGitTestRepo.setUp(self)
self.add_file('doesnotmatter')
self.options = self.Options()
self.options.pbuilder_dist = 'DEP14'
@patch('gbp.deb.get_vendor', return_value='Debian')
def test_get_pbuilder_dist_no_dep14(self, patch):
self.options.pbuilder_dist = 'notdep14'
self.assertEqual(get_pbuilder_dist(self.options, self.repo),
self.options.pbuilder_dist)
@patch('gbp.deb.get_vendor', return_value='Debian')
def test_get_pbuilder_dist_dep14_debian_sid(self, patch):
branch = 'debian/sid'
self.repo.create_branch(branch)
self.repo.set_branch(branch)
self.assertEqual(get_pbuilder_dist(self.options, self.repo), '')
patch.assert_called_once_with()
@patch('gbp.deb.get_vendor', return_value='Debian')
def test_get_pbuilder_dist_dep14_debian_suite(self, patch):
branch = 'debian/squeeze-lts'
self.repo.create_branch(branch)
self.repo.set_branch(branch)
self.assertEqual(get_pbuilder_dist(self.options, self.repo), 'squeeze-lts')
patch.assert_called_once_with()
@patch('gbp.deb.get_vendor', return_value='Debian')
def test_get_pbuilder_dist_dep14_debian_native(self, patch):
self.assertEqual(get_pbuilder_dist(self.options, self.repo, True), '')
@patch('gbp.deb.get_vendor', return_value='Debian')
def test_get_pbuilder_dist_dep14_vendor_sid(self, patch):
branch = 'downstream/sid'
self.repo.create_branch(branch)
self.repo.set_branch(branch)
self.assertEqual(get_pbuilder_dist(self.options, self.repo), 'downstream_sid')
patch.assert_called_once_with()
@patch('gbp.deb.get_vendor', return_value='Debian')
def test_get_pbuilder_dist_dep14_vendor_suite(self, patch):
branch = 'downstream/mies-lts'
self.repo.create_branch(branch)
self.repo.set_branch(branch)
self.assertEqual(get_pbuilder_dist(self.options, self.repo), 'downstream_mies-lts')
@patch('gbp.deb.get_vendor', return_value='Debian')
def test_get_pbuilder_dist_dep14_no_vendor(self, patch):
branch = 'sid'
self.repo.create_branch(branch)
self.repo.set_branch(branch)
with self.assertRaisesRegexp(GbpError,
'DEP14 DIST setup needs branch name to be vendor/suite'):
get_pbuilder_dist(self.options, self.repo)
def test_get_pbuilder_dist_dep14_too_many_slashes(self):
branch = 'too/many/slashed'
self.repo.create_branch(branch)
self.repo.set_branch(branch)
with self.assertRaisesRegexp(GbpError,
'DEP14 DIST setup needs branch name to be vendor/suite'):
get_pbuilder_dist(self.options, self.repo)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment