[prev in list] [next in list] [prev in thread] [next in thread]
List: openembedded-core
Subject: [oe-core][RFC PATCH v2 3/6] package_manager: Add _find_task_pkg_deps helper method.
From: "Charlie Johnston" <charlie.johnston () ni ! com>
Date: 2023-07-31 21:43:00
Message-ID: 20230731215310.3949441-4-charlie.johnston () ni ! com
[Download RAW message or body]
To make the logic from create_feed_dir reusable, this
change splits the logic used to traverse the package
dependencies into a helper function.
Additionally, the logic used to find the initial
task was updated.
Signed-off-by: Charlie Johnston <charlie.johnston@ni.com>
---
meta/lib/oe/package_manager/__init__.py | 60 ++++++++++++++-----------
1 file changed, 35 insertions(+), 25 deletions(-)
diff --git a/meta/lib/oe/package_manager/__init__.py \
b/meta/lib/oe/package_manager/__init__.py index 0934cda89d..7d040bcaf2 100644
--- a/meta/lib/oe/package_manager/__init__.py
+++ b/meta/lib/oe/package_manager/__init__.py
@@ -449,7 +449,7 @@ class PackageManager(object, metaclass=ABCMeta):
return res
return _append(uris, base_paths)
-def create_packages_dir(d, subrepo_dir, deploydir, taskname, filterbydependencies):
+def create_packages_dir(d, subrepo_dir, deploydir, taskname, filterbydependencies, \
assumeprovidedfeeds = None): """
Go through our do_package_write_X dependencies and hardlink the packages we \
depend
upon into the repo directory. This prevents us seeing other packages that may
@@ -473,30 +473,15 @@ def create_packages_dir(d, subrepo_dir, deploydir, taskname, \
filterbydependencie oe.path.symlink(deploydir, subrepo_dir, True)
return
- start = None
- for dep in taskdepdata:
- data = taskdepdata[dep]
- if data[1] == mytaskname and data[0] == pn:
- start = dep
- break
- if start is None:
- bb.fatal("Couldn't find ourself in BB_TASKDEPDATA?")
- pkgdeps = set()
- start = [start]
- seen = set(start)
- # Support direct dependencies (do_rootfs -> do_package_write_X)
- # or indirect dependencies within PN (do_populate_sdk_ext -> do_rootfs -> \
do_package_write_X)
- while start:
- next = []
- for dep2 in start:
- for dep in taskdepdata[dep2][3]:
- if taskdepdata[dep][0] != pn:
- if "do_" + taskname in dep:
- pkgdeps.add(dep)
- elif dep not in seen:
- next.append(dep)
- seen.add(dep)
- start = next
+ pkgdeps = _find_task_pkg_deps(pn, taskdepdata, mytaskname, taskname)
+
+ # Find any packages which might already be provided in a separate feed or repo
+ # and remove them to avoid duplicates. This assumes any dependencies of the \
packages + # are already met as well.
+ if assumeprovidedfeeds is not None:
+ for pkg_pn in assumeprovidedfeeds.split():
+ provided_pkgdeps = _find_task_pkg_deps(pkg_pn, taskdepdata, mytaskname, \
taskname) + pkgdeps = pkgdeps.difference(provided_pkgdeps)
for dep in pkgdeps:
c = taskdepdata[dep][0]
@@ -533,6 +518,31 @@ def create_packages_dir(d, subrepo_dir, deploydir, taskname, \
filterbydependencie raise
+def _find_task_pkg_deps(pn, taskdepdata, mytaskname, taskname):
+ start_task = next((dep for dep, data in taskdepdata.items()
+ if data[1] == mytaskname and data[0] == pn), None)
+ if start_task is None:
+ bb.fatal("Couldn't find %s:%s in BB_TASKDEPDATA?" % (pn, mytaskname))
+ pkgdeps = set()
+ tasks = [start_task]
+ seen = set(start_task)
+ # Support direct dependencies (do_rootfs -> do_package_write_X)
+ # or indirect dependencies within PN (do_populate_sdk_ext -> do_rootfs -> \
do_package_write_X) + while tasks:
+ new_tasks = []
+ for task in tasks:
+ deps = taskdepdata[task][3]
+ for dep in deps:
+ if taskdepdata[dep][0] != pn:
+ if "do_" + taskname in dep:
+ pkgdeps.add(dep)
+ elif dep not in seen:
+ new_tasks.append(dep)
+ seen.add(dep)
+ tasks = new_tasks
+ return pkgdeps
+
+
def generate_index_files(d, feedname = None):
from oe.package_manager.rpm import RpmSubdirIndexer
from oe.package_manager.ipk import OpkgIndexer
--
2.41.0
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#185177): https://lists.openembedded.org/g/openembedded-core/message/185177
Mute This Topic: https://lists.openembedded.org/mt/100471804/4454766
Group Owner: openembedded-core+owner@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [openembedded-core@marc.info]
-=-=-=-=-=-=-=-=-=-=-=-
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic