summaryrefslogtreecommitdiff
path: root/apkkit/base/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'apkkit/base/package.py')
-rw-r--r--apkkit/base/package.py103
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):