mirror of
https://gitlab.com/kupfer/kupferbootstrap.git
synced 2025-06-25 18:08:22 -04:00
packages/flavour: implement flavourinfo.json parsing
This commit is contained in:
parent
3c91abd175
commit
eebca29c55
2 changed files with 31 additions and 2 deletions
|
@ -200,3 +200,5 @@ MAKEPKG_CMD = [
|
||||||
|
|
||||||
SRCINFO_FILE = 'SRCINFO'
|
SRCINFO_FILE = 'SRCINFO'
|
||||||
SRCINFO_METADATA_FILE = 'srcinfo_meta.json'
|
SRCINFO_METADATA_FILE = 'srcinfo_meta.json'
|
||||||
|
|
||||||
|
FLAVOUR_INFO_FILE = 'flavourinfo.json'
|
||||||
|
|
|
@ -1,23 +1,35 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import click
|
import click
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from config import config
|
from config import config
|
||||||
|
from constants import FLAVOUR_INFO_FILE
|
||||||
|
|
||||||
from .pkgbuild import discover_pkgbuilds, get_pkgbuild_by_name, init_pkgbuilds, Pkgbuild
|
from .pkgbuild import discover_pkgbuilds, get_pkgbuild_by_name, init_pkgbuilds, Pkgbuild
|
||||||
|
|
||||||
profile_option = click.option('-p', '--profile', help="name of the profile to use", required=False, default=None)
|
profile_option = click.option('-p', '--profile', help="name of the profile to use", required=False, default=None)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class FlavourInfo:
|
||||||
|
rootfs_size: int # rootfs size in GB
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f'rootfs_size: {self.rootfs_size}'
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Flavour:
|
class Flavour:
|
||||||
name: str
|
name: str
|
||||||
pkgbuild: Pkgbuild
|
pkgbuild: Pkgbuild
|
||||||
description: str
|
description: str
|
||||||
|
flavour_info: Optional[FlavourInfo]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_pkgbuild(pkgbuild: Pkgbuild) -> Flavour:
|
def from_pkgbuild(pkgbuild: Pkgbuild) -> Flavour:
|
||||||
|
@ -27,10 +39,25 @@ class Flavour:
|
||||||
if name.endswith('-common'):
|
if name.endswith('-common'):
|
||||||
raise Exception(f'Flavour package "{name}" ends with "-common": "{name}"')
|
raise Exception(f'Flavour package "{name}" ends with "-common": "{name}"')
|
||||||
name = name[8:] # split off 'flavour-'
|
name = name[8:] # split off 'flavour-'
|
||||||
return Flavour(name=name, pkgbuild=pkgbuild, description=pkgbuild.description)
|
return Flavour(name=name, pkgbuild=pkgbuild, description=pkgbuild.description, flavour_info=None)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f'Flavour "{self.name}": "{self.description}", package: {self.pkgbuild.name if self.pkgbuild else "??? PROBABLY A BUG!"}'
|
return f'Flavour "{self.name}": "{self.description}", package: {self.pkgbuild.name if self.pkgbuild else "??? PROBABLY A BUG!"}{f", {self.flavour_info}" if self.flavour_info else ""}'
|
||||||
|
|
||||||
|
def parse_flavourinfo(self, lazy: bool = True):
|
||||||
|
if lazy and self.flavour_info is not None:
|
||||||
|
return self.flavour_info
|
||||||
|
infopath = os.path.join(config.get_path('pkgbuilds'), self.pkgbuild.path, FLAVOUR_INFO_FILE)
|
||||||
|
if not os.path.exists(infopath):
|
||||||
|
raise Exception(f"Error parsing flavour info for flavour {self.name}: file doesn't exist: {infopath}")
|
||||||
|
try:
|
||||||
|
with open(infopath, 'r') as fd:
|
||||||
|
infodict = json.load(fd)
|
||||||
|
i = FlavourInfo(**infodict)
|
||||||
|
except Exception as ex:
|
||||||
|
raise Exception(f"Error parsing {FLAVOUR_INFO_FILE} for flavour {self.name}: {ex}")
|
||||||
|
self.flavour_info = i
|
||||||
|
return i
|
||||||
|
|
||||||
|
|
||||||
_flavours_discovered: bool = False
|
_flavours_discovered: bool = False
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue