diff options
Diffstat (limited to 'apkkit/base/package.py')
-rw-r--r-- | apkkit/base/package.py | 103 |
1 files changed, 97 insertions, 6 deletions
diff --git a/apkkit/base/package.py b/apkkit/base/package.py index a8e1192..109cf04 100644 --- a/apkkit/base/package.py +++ b/apkkit/base/package.py @@ -3,6 +3,7 @@ from jinja2 import Template import logging import os +import time PACKAGE_LOGGER = logging.getLogger(__name__) @@ -10,24 +11,43 @@ PACKAGE_LOGGER = logging.getLogger(__name__) PKGINFO_TEMPLATE = Template(""" # Generated by APK Kit for Adélie Linux -# {{ builduser }}@{{ buildhost }} {{ builddate }} +# {{ builduser }}@{{ buildhost }} {{ self.builddate }} pkgname = {{ package.name }} pkgver = {{ package.version }} pkgdesc = {{ package.description }} arch = {{ package.arch }} size = {{ package.size }} +{%- if package.license %} +license = {{ package.license }} +{%- endif %} {%- if package.url %} url = {{ package.url }} {%- endif %} +{%- if package.origin %} +origin = {{ package.origin }} +{%- endif %} {%- if package.provides %}{%- for provided in package.provides %} provides = {{ provided }} {%- endfor %}{%- endif %} {%- if package.depends %}{%- for depend in package.depends %} depend = {{ depend }} {%- endfor %}{%- endif %} +{%- if package.replaces %}{%- for replace in package.replaces %} +replaces = {{ replace }} +{%- endfor %}{%- endif %} +{%- if package.install_if %}{%- for iif in package.install_if %} +install_if = {{ iif }} +{%- endfor %}{%- endif %} +builddate = {{ builddate }} +{%- if package.commit %} +commit = {{ package.commit }} +{%- endif %} {%- if package.data_hash %} datahash = {{ package.data_hash }} {%- endif %} +{%- if package.maintainer %} +maintainer = {{ package.maintainer }} +{%- endif %} """) """The template used for generating .PKGINFO""" @@ -37,7 +57,9 @@ class Package: """The base package class.""" def __init__(self, name, version, arch, description=None, url=None, size=0, - provides=None, depends=None, **kwargs): + provides=None, depends=None, license=None, origin=None, + replaces=None, commit=None, maintainer=None, builddate=0, + install_if=None, **kwargs): """Initialise a package object. :param str name: @@ -67,6 +89,30 @@ class Package: :param list depends: (Optional) One or more packages that are required to be installed to use this package. + + :param str license: + (Recommended) The license this package is under. + + :param str origin: + (Optional) The origin package, if this package is a subpackage. + Defaults to `name`. + + :param list replaces: + (Optional) One or more packages that this package replaces. + + :param str commit: + (Recommended) The hash of the git commit the repository was on when + this package was built. + + :param str maintainer: + (Recommended) The maintainer of the package. + + :param int builddate: + (Optional) The date the package was built, in UNIX timestamp. + Defaults to right now. + + :param list install_if: + (Optional) Read the APKBUILD.5 manpage. """ self._pkgname = name @@ -77,6 +123,13 @@ class Package: self._arch = arch self._provides = provides or list() self._depends = depends or list() + self._replaces = replaces or list() + self._iif = install_if or list() + self._license = license + self._origin = origin or name + self._commit = commit + self._maintainer = maintainer + self._builddate = builddate or time.time() if '_datahash' in kwargs: self._datahash = kwargs.pop('_datahash') @@ -136,6 +189,36 @@ class Package: return self._depends @property + def replaces(self): + """The packages this package replaces.""" + return self._replaces + + @property + def install_if(self): + """The packages that pull in this package.""" + return self._iif + + @property + def license(self): + """The license of the package.""" + return self._license + + @property + def origin(self): + """The origin package of this package.""" + return self._origin + + @property + def commit(self): + """The hash of the git commit the build repository was on.""" + return self._commit + + @property + def maintainer(self): + """The maintainer of the package.""" + return self._maintainer + + @property def data_hash(self): """The hash of the package's data, or None if not available.""" return getattr(self, '_datahash', None) @@ -148,10 +231,14 @@ class Package: def __repr__(self): return 'Package(name="{name}", version="{ver}", arch="{arch}", '\ 'description="{desc}", url="{url}", size={size}, '\ - 'provides={prov}, depends={dep})'.format( + 'provides={prov}, depends={dep}, license={lic}, '\ + 'origin="{origin}", replaces={rep}, commit="{git}", '\ + 'maintainer="{m}", builddate={ts}, install_if={iif})'.format( name=self._pkgname, ver=self._pkgver, arch=self._arch, desc=self._pkgdesc, prov=self._provides, dep=self._depends, - url=self._url, size=self._size) + url=self._url, size=self._size, lic=self._license, + origin=self._origin, rep=self._replaces, git=self._commit, + m=self._maintainer, ts=self._builddate, iif=self._iif) def to_pkginfo(self): """Serialises the package's information into the PKGINFO format. @@ -184,11 +271,15 @@ class Package: param_map = {'pkgname': 'name', 'pkgver': 'version', 'arch': 'arch', 'pkgdesc': 'description', 'provides': 'provides', 'depend': 'depends', 'url': 'url', 'size': 'size', - 'datahash': '_datahash'} - list_keys = {'provides', 'depend'} + 'replaces': 'replaces', 'builddate': 'builddate', + 'license': 'license', 'datahash': '_datahash', + 'maintainer': 'maintainer', 'commit': 'commit', + 'install_if': 'install_if'} + list_keys = {'provides', 'depend', 'replaces', 'install_if'} params['provides'] = list() params['depends'] = list() + params['replaces'] = list() for line in buf.readlines(): if not isinstance(line, str): |