diff --git a/include/libdnf5/comps/environment/environment.hpp b/include/libdnf5/comps/environment/environment.hpp index 92799df52..b34cf84fc 100644 --- a/include/libdnf5/comps/environment/environment.hpp +++ b/include/libdnf5/comps/environment/environment.hpp @@ -56,6 +56,10 @@ class LIBDNF_API Environment { Environment(Environment && src) noexcept; Environment & operator=(Environment && src) noexcept; + /// @return The `Base` object to which this object belongs. + /// @since 5.2.6 + libdnf5::BaseWeakPtr get_base(); + /// @return The Environment id. /// @since 5.0 std::string get_environmentid() const; diff --git a/include/libdnf5/comps/environment/query.hpp b/include/libdnf5/comps/environment/query.hpp index 9443ade2e..2303ccdba 100644 --- a/include/libdnf5/comps/environment/query.hpp +++ b/include/libdnf5/comps/environment/query.hpp @@ -46,6 +46,10 @@ class LIBDNF_API EnvironmentQuery : public libdnf5::sack::Query { EnvironmentQuery(EnvironmentQuery && src) noexcept; EnvironmentQuery & operator=(EnvironmentQuery && src) noexcept; + /// @return The `Base` object to which this object belongs. + /// @since 5.2.6 + libdnf5::BaseWeakPtr get_base(); + void filter_environmentid(const std::string & pattern, sack::QueryCmp cmp = libdnf5::sack::QueryCmp::EQ); void filter_environmentid( const std::vector & patterns, sack::QueryCmp cmp = libdnf5::sack::QueryCmp::EQ); diff --git a/include/libdnf5/comps/group/group.hpp b/include/libdnf5/comps/group/group.hpp index 033e7005f..e90d3e389 100644 --- a/include/libdnf5/comps/group/group.hpp +++ b/include/libdnf5/comps/group/group.hpp @@ -57,6 +57,10 @@ class LIBDNF_API Group { Group(Group && src) noexcept; Group & operator=(Group && src) noexcept; + /// @return The `Base` object to which this object belongs. + /// @since 5.2.6 + libdnf5::BaseWeakPtr get_base(); + /// @return The Group id. /// @since 5.0 std::string get_groupid() const; diff --git a/include/libdnf5/comps/group/query.hpp b/include/libdnf5/comps/group/query.hpp index fddfabf9f..41710b11d 100644 --- a/include/libdnf5/comps/group/query.hpp +++ b/include/libdnf5/comps/group/query.hpp @@ -46,6 +46,10 @@ class LIBDNF_API GroupQuery : public libdnf5::sack::Query { GroupQuery(GroupQuery && src) noexcept; GroupQuery & operator=(GroupQuery && src) noexcept; + /// @return The `Base` object to which this object belongs. + /// @since 5.2.6 + libdnf5::BaseWeakPtr get_base(); + void filter_groupid(const std::string & pattern, sack::QueryCmp cmp = libdnf5::sack::QueryCmp::EQ); void filter_groupid(const std::vector & patterns, sack::QueryCmp cmp = libdnf5::sack::QueryCmp::EQ); diff --git a/libdnf5/comps/environment/environment.cpp b/libdnf5/comps/environment/environment.cpp index fe3b4a363..d6c2e1fa7 100644 --- a/libdnf5/comps/environment/environment.cpp +++ b/libdnf5/comps/environment/environment.cpp @@ -23,6 +23,7 @@ along with libdnf. If not, see . #include "utils/xml.hpp" #include "libdnf5/base/base.hpp" +#include "libdnf5/base/base_weak.hpp" #include "libdnf5/comps/environment/query.hpp" #include "libdnf5/utils/bgettext/bgettext-mark-domain.h" @@ -106,6 +107,10 @@ bool Environment::operator<(const Environment & rhs) const { return get_environmentid() < rhs.get_environmentid() || get_repos() < rhs.get_repos(); } +libdnf5::BaseWeakPtr Environment::get_base() { + return p_impl->base; +} + std::string Environment::get_environmentid() const { return solv::CompsPool::split_solvable_name( get_comps_pool(p_impl->base).lookup_first_id_str(p_impl->environment_ids, SOLVABLE_NAME)) diff --git a/libdnf5/comps/environment/query.cpp b/libdnf5/comps/environment/query.cpp index 02285172a..589fa5556 100644 --- a/libdnf5/comps/environment/query.cpp +++ b/libdnf5/comps/environment/query.cpp @@ -22,6 +22,7 @@ along with libdnf. If not, see . #include "solv/pool.hpp" #include "libdnf5/base/base.hpp" +#include "libdnf5/base/base_weak.hpp" #include "libdnf5/comps/environment/environment.hpp" extern "C" { @@ -137,6 +138,10 @@ EnvironmentQuery & EnvironmentQuery::operator=(const EnvironmentQuery & src) { } EnvironmentQuery & EnvironmentQuery::operator=(EnvironmentQuery && src) noexcept = default; +libdnf5::BaseWeakPtr EnvironmentQuery::get_base() { + return p_impl->base; +} + void EnvironmentQuery::filter_environmentid(const std::string & pattern, sack::QueryCmp cmp) { filter(Impl::F::environmentid, pattern, cmp); } diff --git a/libdnf5/comps/group/group.cpp b/libdnf5/comps/group/group.cpp index 6b6323595..54766447a 100644 --- a/libdnf5/comps/group/group.cpp +++ b/libdnf5/comps/group/group.cpp @@ -24,6 +24,7 @@ along with libdnf. If not, see . #include "utils/xml.hpp" #include "libdnf5/base/base.hpp" +#include "libdnf5/base/base_weak.hpp" #include "libdnf5/comps/group/package.hpp" #include "libdnf5/comps/group/query.hpp" #include "libdnf5/utils/bgettext/bgettext-mark-domain.h" @@ -106,6 +107,10 @@ bool Group::operator<(const Group & rhs) const { } +libdnf5::BaseWeakPtr Group::get_base() { + return p_impl->base; +} + std::string Group::get_groupid() const { return solv::CompsPool::split_solvable_name( get_comps_pool(p_impl->base).lookup_first_id_str(p_impl->group_ids, SOLVABLE_NAME)) diff --git a/libdnf5/comps/group/query.cpp b/libdnf5/comps/group/query.cpp index 6c2afdfe9..49a80f1f6 100644 --- a/libdnf5/comps/group/query.cpp +++ b/libdnf5/comps/group/query.cpp @@ -22,6 +22,7 @@ along with libdnf. If not, see . #include "solv/pool.hpp" #include "libdnf5/base/base.hpp" +#include "libdnf5/base/base_weak.hpp" #include "libdnf5/comps/group/group.hpp" extern "C" { @@ -136,6 +137,10 @@ GroupQuery & GroupQuery::operator=(const GroupQuery & src) { } GroupQuery & GroupQuery::operator=(GroupQuery && src) noexcept = default; +libdnf5::BaseWeakPtr GroupQuery::get_base() { + return p_impl->base; +} + void GroupQuery::filter_package_name(const std::vector & patterns, sack::QueryCmp cmp) { for (auto it = get_data().begin(); it != get_data().end();) { // Copy group so we can call `get_packages()`, this is needed because `it` is from a std::set and thus const diff --git a/test/python3/libdnf5/comps/test_comps_iterators.py b/test/python3/libdnf5/comps/test_comps_iterators.py index b53247045..cf8d80785 100644 --- a/test/python3/libdnf5/comps/test_comps_iterators.py +++ b/test/python3/libdnf5/comps/test_comps_iterators.py @@ -24,8 +24,10 @@ class TestCompsIterators(base_test_case.BaseTestCase): def test_group_query_iterable(self): query = libdnf5.comps.GroupQuery(self.base) + self.assertIsInstance(query.get_base().get(), libdnf5.base.Base) _ = [grp.get_groupid() for grp in query] def test_environment_query_iterable(self): query = libdnf5.comps.EnvironmentQuery(self.base) + self.assertIsInstance(query.get_base().get(), libdnf5.base.Base) _ = [env.get_environmentid() for env in query]