From 5165b6b1d824e80008b09f1ff6319e41b20de09f Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 25 Jun 2011 19:05:10 +0200 Subject: [PATCH] Fix adding order dependent dependency resolution PackageFSRoot::_AddPackage(): When adding a resolvable which isn't known yet, make sure all already added matching dependencies are resolved. --- .../file_systems/packagefs/DependencyFamily.h | 13 +++++++++++++ .../kernel/file_systems/packagefs/PackageFSRoot.cpp | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/src/add-ons/kernel/file_systems/packagefs/DependencyFamily.h b/src/add-ons/kernel/file_systems/packagefs/DependencyFamily.h index 3971bc07f7..fa9daf1d0b 100644 --- a/src/add-ons/kernel/file_systems/packagefs/DependencyFamily.h +++ b/src/add-ons/kernel/file_systems/packagefs/DependencyFamily.h @@ -17,6 +17,9 @@ public: void AddDependency(Dependency* dependency); void RemoveDependency(Dependency* dependency); + void AddDependenciesToList( + ResolvableDependencyList& list) const; + const char* Name() const; bool IsLastDependency(Dependency* dependency) const; @@ -45,6 +48,16 @@ DependencyFamily::RemoveDependency(Dependency* dependency) } +inline void +DependencyFamily::AddDependenciesToList(ResolvableDependencyList& list) const +{ + for (FamilyDependencyList::ConstIterator it = fDependencies.GetIterator(); + Dependency* dependency = it.Next();) { + list.Add(dependency); + } +} + + inline const char* DependencyFamily::Name() const { diff --git a/src/add-ons/kernel/file_systems/packagefs/PackageFSRoot.cpp b/src/add-ons/kernel/file_systems/packagefs/PackageFSRoot.cpp index a19b7f6cf5..e7e20eb5a8 100644 --- a/src/add-ons/kernel/file_systems/packagefs/PackageFSRoot.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/PackageFSRoot.cpp @@ -246,6 +246,12 @@ PackageFSRoot::_AddPackage(Package* package) family->AddResolvable(resolvable, dependenciesToUpdate); fResolvables.Insert(family); + + // add pre-existing dependencies for that resolvable + if (DependencyFamily* dependencyFamily + = fDependencies.Lookup(resolvable->Name())) { + dependencyFamily->AddDependenciesToList(dependenciesToUpdate); + } } }