mini_buildd.dist module

Distribution setups && support.

Dist-like variable naming convention

  • diststr: Instance of str: “buster-test-unstable”.

  • dist: Instance of mini_buildd.dist.Dist: diststr parsed && support.

  • distribution: Instance of mini_buildd.model.distribution.Distribution: Configured distribution.

class mini_buildd.dist.DebianDistroInfo

Bases: distro_info.DebianDistroInfo

mbd_supported(with_lts=False)
class mini_buildd.dist.UbuntuDistroInfo

Bases: distro_info.UbuntuDistroInfo

mbd_supported(with_lts=False)
class mini_buildd.dist.SourceSetup(origin, codename, apt_keys, extra_options='')

Bases: object

Note

pycompat: With python 3.7, this could be a namedtuple w/ defaults.

mini_buildd.dist.get_codenames(vendors=None, with_unsupported=False, with_lts=False)
mini_buildd.dist.is_security_codename(origin, codename)
mini_buildd.dist.get_lintian_options(codename, kind)

Get lintian options from SETUP.

>>> get_lintian_options("bullseye", "common")
['--suppress-tags', 'bad-distribution-in-changes-file']
>>> get_lintian_options("bullseye", "warnfail")
['--fail-on', 'error,warning']
>>> get_lintian_options("buster", "common")
['--suppress-tags', 'bad-distribution-in-changes-file']
>>> get_lintian_options("buster", "warnfail")
['--fail-on-warnings']
class mini_buildd.dist.SbuildCheck(checker, mode)

Bases: object

Generic support for sbuild checks (lintian, piuparts, autopkgtest).

>>> SbuildCheck("lindian", "disabled")
Traceback (most recent call last):
...
mini_buildd.HTTPBadRequest: HTTP 400: Unknown sbuild checker: lindian (valid options: lintian,piuparts,autopkgtest)
>>> SbuildCheck("lintian", "warnfall")
Traceback (most recent call last):
...
mini_buildd.HTTPBadRequest: HTTP 400: Unknown sbuild check mode: warnfall (valid options: DISABLED,IGNORE,ERRFAIL,WARNFAIL)
>>> sc = SbuildCheck("lintian", "warnfail")
>>> sc.checker
'lintian'
>>> sc.mode
<Mode.WARNFAIL: 3>
class Mode(value)

Bases: enum.Enum

An enumeration.

DISABLED = 0
IGNORE = 1
ERRFAIL = 2
WARNFAIL = 3
CHECKERS = ['lintian', 'piuparts', 'autopkgtest']
CHOICES = [(0, 'DISABLED'), (1, 'IGNORE'), (2, 'ERRFAIL'), (3, 'WARNFAIL')]
STATUSES_PASS = ['pass', 'info']

From sbuild source code: We may expect these textual statuses:

STATUSES_WARN = ['warn', 'no tests']
STATUSES_FAIL = ['error', 'fail']
classmethod desc()
classmethod usage()
check(status, ignore=False)

Check if status is ok in this mode.

lintian_options(codename)
class mini_buildd.dist.Dist(diststr)

Bases: object

A mini-buildd distribution string.

Normal distribution:

>>> d = Dist("squeeze-test-stable")
>>> d.codename, d.repository, d.suite
('squeeze', 'test', 'stable')
>>> d.get()
'squeeze-test-stable'

Rollback distribution:

>>> d = Dist("squeeze-test-stable-rollback5")
>>> d.is_rollback
True
>>> d.get(rollback=False)
'squeeze-test-stable'
>>> d.codename, d.repository, d.suite, d.rollback
('squeeze', 'test', 'stable', 'rollback5')
>>> d.get()
'squeeze-test-stable-rollback5'
>>> d.rollback_no
5

Malformed distributions:

>>> Dist("-squeeze-stable")
Traceback (most recent call last):
...
mini_buildd.HTTPBadRequest: HTTP 400: Malformed distribution '-squeeze-stable': Must be '<codename>-<repoid>-<suite>[-rollback<n>]'
>>> Dist("squeeze--stable")
Traceback (most recent call last):
...
mini_buildd.HTTPBadRequest: HTTP 400: Malformed distribution 'squeeze--stable': Must be '<codename>-<repoid>-<suite>[-rollback<n>]'
>>> Dist("squeeze-test-stable-")
Traceback (most recent call last):
...
mini_buildd.HTTPBadRequest: HTTP 400: Malformed distribution 'squeeze-test-stable-': Must be '<codename>-<repoid>-<suite>[-rollback<n>]'
>>> Dist("squeeze-test-stable-rollback")
Traceback (most recent call last):
...
mini_buildd.HTTPBadRequest: HTTP 400: Malformed distribution 'squeeze-test-stable-rollback': Must be '<codename>-<repoid>-<suite>[-rollback<n>]'
>>> Dist("squeeze-test-stable-rolback0")
Traceback (most recent call last):
...
mini_buildd.HTTPBadRequest: HTTP 400: Malformed distribution 'squeeze-test-stable-rolback0': Must be '<codename>-<repoid>-<suite>[-rollback<n>]'
get(rollback=True)
mini_buildd.dist.guess_codeversion(release)

Guess the ‘codeversion’.

Aka the first two digits of a Debian release version; for releases without version, this falls back to the uppercase codename.

In Debian,
  • point release <= sarge had the ‘M.PrN’ syntax (with 3.1 being a major release).

  • point release in squeeze used ‘M.0.N’ syntax.

  • point releases for >= wheezy have the ‘M.N’ syntax (with 7.1 being a point release).

  • testing and unstable do not gave a version in Release and fall back to uppercase codename

Ubuntu just uses YY.MM which we can use as-is.

>>> guess_codeversion({"Origin": "Debian", "Version": "3.1r8", "Codename": "sarge"})
'31'
>>> guess_codeversion({"Origin": "Debian", "Version": "4.0r9", "Codename": "etch"})
'40'
>>> guess_codeversion({"Origin": "Debian", "Version": "6.0.6", "Codename": "squeeze"})
'60'
>>> guess_codeversion({"Origin": "Debian", "Version": "7.0", "Codename": "wheezy"})
'7'
>>> guess_codeversion({"Origin": "Debian", "Version": "7.1", "Codename": "wheezy"})
'7'
>>> guess_codeversion({"Origin": "Debian", "Codename": "jessie"})
'~JESSIE'
>>> guess_codeversion({"Origin": "Debian", "Codename": "sid"})
'~SID'
>>> guess_codeversion({"Origin": "Ubuntu", "Version": "12.10", "Codename": "quantal"})
'1210'