diff options
Diffstat (limited to 'bpkg/package.cxx')
-rw-r--r-- | bpkg/package.cxx | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/bpkg/package.cxx b/bpkg/package.cxx index 4880623..ccaf6ba 100644 --- a/bpkg/package.cxx +++ b/bpkg/package.cxx @@ -194,11 +194,9 @@ namespace bpkg { for (const shared_ptr<repository_fragment> r: rps) { - shared_ptr<repository_fragment> ar (filter (r, ap, prereq)); - - if (ar != nullptr) + if (shared_ptr<repository_fragment> rf = filter (r, ap, prereq)) { - aps.emplace_back (move (ap), move (ar)); + aps.emplace_back (move (ap), move (rf)); break; } } @@ -207,6 +205,26 @@ namespace bpkg return aps; } + pair<shared_ptr<available_package>, shared_ptr<repository_fragment>> + filter_one (const vector<shared_ptr<repository_fragment>>& rps, + odb::result<available_package>&& apr, + bool prereq) + { + using result = pair<shared_ptr<available_package>, + shared_ptr<repository_fragment>>; + + for (shared_ptr<available_package> ap: pointer_result (apr)) + { + for (const shared_ptr<repository_fragment> r: rps) + { + if (shared_ptr<repository_fragment> rf = filter (r, ap, prereq)) + return result (move (ap), move (rf)); + } + } + + return result (); + } + void check_any_available (const dir_path& c, transaction& t, |