From cd736d2602aae5502cbc86d5672505c2d534c79f Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 23 Mar 2022 19:07:59 +0300 Subject: Fix reconfiguring dependents in pkg-build --- bpkg/pkg-build.cxx | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/bpkg/pkg-build.cxx b/bpkg/pkg-build.cxx index 60674b6..4821099 100644 --- a/bpkg/pkg-build.cxx +++ b/bpkg/pkg-build.cxx @@ -8238,13 +8238,27 @@ namespace bpkg // assert (sp->state == package_state::unpacked); - // First try to find an existing available package for the selected - // package and, if not found, create a transient one. + // First try to avoid the package manifest parsing, searching for an + // existing available package for the selected package and, if not + // found, create a transient one. // - shared_ptr dap ( - find_available_one (dependent_repo_configs (pdb), - sp->name, - version_constraint (sp->version)).first); + // Note that we don't use find_available*() here since we don't care + // about the repository fragment the package comes from and only need + // its manifest information. + // + shared_ptr dap; + + available_package_id pid (sp->name, sp->version); + for (database& db: dependent_repo_configs (pdb)) + { + shared_ptr ap (db.find (pid)); + + if (ap != nullptr && !ap->stub ()) + { + dap = move (ap); + break; + } + } if (dap == nullptr) dap = make_available (o, pdb, sp); -- cgit v1.1