mirror of
https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git
synced 2025-07-13 11:29:46 +03:00
Unmaintained devices are device packages that: - Are known to be broken in some way without an active maintainer who can investigate how to fix it, or - Have not received any updates for a very long time, or - Are discouraged from using because they are just intended for testing. An example for this are ports using the downstream kernel for devices which have a mainline port that is working quite well. Unmaintained devices are still built by bpo (otherwise it would not make sense to keep them), but they do not show up in "pmbootstrap init". However, it is possible to manually select them by entering the name. pmbootstrap will warn in that case. Unmaintained packages should have a # Unmaintained: <reason> comment in the APKBUILD, this comment is displayed in "pmbootstrap init" so that the user knows why the device should not be used unless they know what they are doing.
73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
# Copyright 2021 Oliver Smith
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
import os
|
|
import glob
|
|
import pmb.parse
|
|
|
|
|
|
def find_path(args, codename, file=''):
|
|
"""
|
|
Find path to device APKBUILD under `device/*/device-`.
|
|
:param codename: device codename
|
|
:param file: file to look for (e.g. APKBUILD or deviceinfo), may be empty
|
|
:returns: path to APKBUILD
|
|
"""
|
|
g = glob.glob(args.aports + "/device/*/device-" + codename + '/' + file)
|
|
if not g:
|
|
return None
|
|
|
|
if len(g) != 1:
|
|
raise RuntimeError(codename + " found multiple times in the device"
|
|
" subdirectory of pmaports")
|
|
|
|
return g[0]
|
|
|
|
|
|
def list_codenames(args, vendor=None, unmaintained=True):
|
|
"""
|
|
Get all devices, for which aports are available
|
|
:param vendor: vendor name to choose devices from, or None for all vendors
|
|
:param unmaintained: include unmaintained devices
|
|
:returns: ["first-device", "second-device", ...]
|
|
"""
|
|
ret = []
|
|
for path in glob.glob(args.aports + "/device/*/device-*"):
|
|
if not unmaintained and '/unmaintained/' in path:
|
|
continue
|
|
device = os.path.basename(path).split("-", 1)[1]
|
|
if (vendor is None) or device.startswith(vendor + '-'):
|
|
ret.append(device)
|
|
return ret
|
|
|
|
|
|
def list_vendors(args):
|
|
"""
|
|
Get all device vendors, for which aports are available
|
|
:returns: {"vendor1", "vendor2", ...}
|
|
"""
|
|
ret = set()
|
|
for path in glob.glob(args.aports + "/device/*/device-*"):
|
|
vendor = os.path.basename(path).split("-", 2)[1]
|
|
ret.add(vendor)
|
|
return ret
|
|
|
|
|
|
def list_apkbuilds(args):
|
|
"""
|
|
:returns: { "first-device": {"pkgname": ..., "pkgver": ...}, ... }
|
|
"""
|
|
ret = {}
|
|
for device in list_codenames(args):
|
|
apkbuild_path = args.aports + "/device/*/device-" + device + "/APKBUILD"
|
|
ret[device] = pmb.parse.apkbuild(args, apkbuild_path)
|
|
return ret
|
|
|
|
|
|
def list_deviceinfos(args):
|
|
"""
|
|
:returns: { "first-device": {"name": ..., "screen_width": ...}, ... }
|
|
"""
|
|
ret = {}
|
|
for device in list_codenames(args):
|
|
ret[device] = pmb.parse.deviceinfo(args, device)
|
|
return ret
|