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_lts()

Tip

What does LTS (mini-buildd speak) include for Debian?

For mini-buildd, LTS means Debian Long Term Support (LTS) including Debian Extended Long Term Support (ELTS).

See: https://www.debian.org/lts/, https://wiki.debian.org/LTS/Extended

class mini_buildd.dist.UbuntuDistroInfo

Bases: distro_info.UbuntuDistroInfo

mbd_lts()

Tip

What does LTS (mini-buildd speak) include for Ubuntu?

For mini-buildd, LTS means Ubuntu Long Term Support (LTS) including Ubuntu Extended Security Maintenance (ESM).

See: https://ubuntu.com/about/release-cycle

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

Bases: object

Attention

compat (python < 3.7): Not using namedtuple w/ defaults.

class mini_buildd.dist.Codenames

Bases: dict

get_supported(vendor)
get_supported_plus_lts(vendor)
classmethod get_working(vendor)
classmethod is_security(origin, codename)
get_lintian_options(codename, kind)

Get lintian options from SETUP.

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'