1
0
mirror of git://projects.qi-hardware.com/wernermisc.git synced 2025-04-21 12:27:27 +03:00

qpkg: added detection of cyclic dependencies

We define a cyclic dependency as the possibility (!) of the prerequisites
of a package X including a package that depends on X, and issue an error
if encountering such a situation.

Note that, if the dependencies of X can be resolved in a manner that does
not include the cyclic dependency, qpkg will still fail if it encounters
the cycle. Also note that qpkg (at least so far) does no perform an
exhaustive search to ferret out cyclic dependencies.

Furthermore, we don't consider that a cyclic dependency may not necessarily
imply a real life problem. E.g., if a package A contains elements X and
Y, with X needing package B, and the content of package B has a run-time
dependency on Y, the cyclic dependency between A and B would not exist
when considering its constituents. Since we don't have this information, we
just err on the side of caution.

- qpkg.h (enum flags): divide flags into categories (parse-time and
  run-time) and add flag QPKG_ADDING to mark packets whose dependencies we
  are processing
- prereq.c (resolve, prereq): track which packages we're tentatively
  considering for installation and detect cyclic dependencies
- test/cyclic: regression test for detection of cyclic dependencies
- TODO: updated with recent changes
This commit is contained in:
Werner Almesberger
2010-11-21 20:31:20 -03:00
parent 0229051f07
commit 0bc4b6046b
4 changed files with 90 additions and 5 deletions

View File

@@ -13,6 +13,8 @@ Still left to do
- consider Architecture:
Update: we parse and record it now but don't use it yet.
- what to do with explicit and implicit replacement ?
- if we can't resolve the prerequisites, give at least a hint of what one
@@ -20,6 +22,8 @@ Still left to do
- check database for internal consistency
Update: added detection of cyclic dependencies (in progress)
- implement keyword search
- consider also supporting the similar but not identical (parent ?) format