aboutsummaryrefslogtreecommitdiff
path: root/bpkg/package.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bpkg/package.cxx')
-rw-r--r--bpkg/package.cxx26
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,