mirror of
https://gitlab.com/kupfer/kupferbootstrap.git
synced 2025-02-23 05:35:44 -05:00
distro.py: add $repo.db parsing
This commit is contained in:
parent
b623d017be
commit
f5e6590e29
1 changed files with 38 additions and 1 deletions
39
distro.py
39
distro.py
|
@ -1,4 +1,10 @@
|
|||
from copy import deepcopy
|
||||
import urllib.request
|
||||
import tempfile
|
||||
import os
|
||||
import tarfile
|
||||
import logging
|
||||
|
||||
from constants import ARCHES, BASE_DISTROS, REPOSITORIES, KUPFER_HTTPS
|
||||
from config import config
|
||||
|
||||
|
@ -28,6 +34,18 @@ class PackageInfo:
|
|||
self.filename = filename
|
||||
self.resolved_url = resolved_url
|
||||
|
||||
def __repr__(self):
|
||||
return f'{self.name}@{self.version}'
|
||||
|
||||
def parse_desc(desc_str: str, resolved_url=None):
|
||||
"""Parses a desc file, returning a PackageInfo"""
|
||||
|
||||
pruned_lines = ([line.strip() for line in desc_str.split('%') if line.strip()])
|
||||
desc = {}
|
||||
for key, value in zip(pruned_lines[0::2], pruned_lines[1::2]):
|
||||
desc[key.strip()] = value.strip()
|
||||
return PackageInfo(desc['NAME'], desc['VERSION'], desc['FILENAME'], resolved_url=resolved_url)
|
||||
|
||||
|
||||
class RepoInfo:
|
||||
options: dict[str, str] = {}
|
||||
|
@ -49,10 +67,29 @@ class Repo(RepoInfo):
|
|||
def scan(self):
|
||||
self.resolved_url = resolve_url(self.url_template, repo_name=self.name, arch=self.arch)
|
||||
self.remote = not self.resolved_url.startswith('file://')
|
||||
# TODO
|
||||
uri = f'{self.resolved_url}/{self.name}.db'
|
||||
file_handle = None
|
||||
path = ''
|
||||
if self.remote:
|
||||
logging.debug(f'Downloading repo file from {uri}')
|
||||
with urllib.request.urlopen(uri) as request:
|
||||
fd, path = tempfile.mkstemp()
|
||||
with open(fd, 'wb') as writable:
|
||||
writable.write(request.read())
|
||||
else:
|
||||
path = uri.split('file://')[1]
|
||||
logging.debug(f'Parsing repo file at {path}')
|
||||
with tarfile.open(path) as index:
|
||||
for node in index.getmembers():
|
||||
if os.path.basename(node.name) == 'desc':
|
||||
logging.debug(f'Parsing desc file for {os.path.dirname(node.name)}')
|
||||
pkg = PackageInfo.parse_desc(index.extractfile(node).read().decode(), self.resolved_url)
|
||||
self.packages[pkg.name] = pkg
|
||||
|
||||
self.scanned = True
|
||||
|
||||
def __init__(self, name: str, url_template: str, arch: str, options={}, scan=True):
|
||||
self.packages = {}
|
||||
self.name = name
|
||||
self.url_template = url_template
|
||||
self.arch = arch
|
||||
|
|
Loading…
Add table
Reference in a new issue