WIP: discover_packages(): export name->package dict, also build local depends

Signed-off-by: InsanePrawn <insane.prawny@gmail.com>
This commit is contained in:
InsanePrawn 2021-08-05 18:52:25 +02:00
parent 29e1914ca1
commit 838124b856

View file

@ -30,6 +30,7 @@ pacman_cmd = ['pacman',
class Package: class Package:
name = ''
names = [] names = []
depends = [] depends = []
local_depends = None local_depends = None
@ -49,7 +50,10 @@ class Package:
names = [] names = []
depends = [] depends = []
for line in lines: for line in lines:
if line.startswith('pkgbase') or line.startswith('\tpkgname') or line.startswith('\tprovides'): if line.startswith('\tpkgname'):
self.name = line.split(' = ')[1]
names.append(self.name)
if line.startswith('pkgbase') or line.startswith('\tprovides'):
names.append(line.split(' = ')[1]) names.append(line.split(' = ')[1])
if line.startswith('\tdepends') or line.startswith('\tmakedepends') or line.startswith('\tcheckdepends') or line.startswith('\toptdepends'): if line.startswith('\tdepends') or line.startswith('\tmakedepends') or line.startswith('\tcheckdepends') or line.startswith('\toptdepends'):
depends.append(line.split(' = ')[1].split('=')[0]) depends.append(line.split(' = ')[1].split('=')[0])
@ -133,8 +137,8 @@ def setup_chroot(chroot_path='/chroot/root'):
exit(1) exit(1)
def discover_packages() -> list[Package]: def discover_packages() -> dict[str, Package]:
packages = [] packages = {}
paths = [] paths = []
for dir in os.listdir('main'): for dir in os.listdir('main'):
@ -145,14 +149,15 @@ def discover_packages() -> list[Package]:
for path in paths: for path in paths:
logging.debug(f'Discovered {path}') logging.debug(f'Discovered {path}')
packages.append(Package(path)) package = Package(path)
packages[package.name] = package
# This filters the deps to only include the ones that are provided in this repo # This filters the deps to only include the ones that are provided in this repo
for package in packages: for package in packages.values():
package.local_depends = package.depends.copy() package.local_depends = package.depends.copy()
for dep in package.depends.copy(): for dep in package.depends.copy():
found = False found = False
for p in packages: for p in packages.values():
for name in p.names: for name in p.names:
if dep == name: if dep == name:
found = True found = True
@ -357,13 +362,16 @@ def cmd_build(verbose, path):
check_prebuilts() check_prebuilts()
if path == 'all': packages = discover_packages()
packages = discover_packages()
else:
package = Package(path)
packages = package.local_depends + [package]
package_order = generate_package_order(packages) if path != 'all':
selection = []
for package in packages.values():
if package.path == path:
# TODO: currently matches through package.name only, no provides
selection += [ packages[pkg] for pkg in package.local_depends] + [package]
package_order = generate_package_order(list(packages.values()))
need_build = [] need_build = []
for package in package_order: for package in package_order:
update_package_version_and_sources(package) update_package_version_and_sources(package)