@@ -154,6 +154,58 @@ std::vector<AdvisoryModule> Advisory::getModules() const
154
154
return moduleList;
155
155
}
156
156
157
+ void
158
+ Advisory::getApplicablePackages (std::vector<AdvisoryPkg> & pkglist, bool withFilemanes) const
159
+ {
160
+ Dataiterator di;
161
+ Dataiterator di_inner;
162
+ Pool *pool = dnf_sack_get_pool (sack);
163
+
164
+ dataiterator_init (&di, pool, 0 , advisory, UPDATE_COLLECTIONLIST, 0 , 0 );
165
+ while (dataiterator_step (&di)) {
166
+ dataiterator_setpos (&di);
167
+
168
+ bool isModuleCollectionApplicable = true ;
169
+ dataiterator_init (&di_inner, pool, 0 , SOLVID_POS, UPDATE_MODULE, 0 , 0 );
170
+ while (dataiterator_step (&di_inner)) {
171
+ dataiterator_setpos (&di_inner);
172
+ Id name = pool_lookup_id (pool, SOLVID_POS, UPDATE_MODULE_NAME);
173
+ Id stream = pool_lookup_id (pool, SOLVID_POS, UPDATE_MODULE_STREAM);
174
+ Id version = pool_lookup_id (pool, SOLVID_POS, UPDATE_MODULE_VERSION);
175
+ Id context = pool_lookup_id (pool, SOLVID_POS, UPDATE_MODULE_CONTEXT);
176
+ Id arch = pool_lookup_id (pool, SOLVID_POS, UPDATE_MODULE_ARCH);
177
+ AdvisoryModule moduleAdvisory (sack, advisory, name, stream, version, context, arch);
178
+ if (moduleAdvisory.isApplicable ()) {
179
+ isModuleCollectionApplicable = true ;
180
+ break ;
181
+ } else {
182
+ isModuleCollectionApplicable = false ;
183
+ }
184
+ }
185
+ dataiterator_free (&di_inner);
186
+
187
+ if (isModuleCollectionApplicable) {
188
+ const char * filename = nullptr ;
189
+ dataiterator_setpos (&di);
190
+
191
+ dataiterator_init (&di_inner, pool, 0 , SOLVID_POS, UPDATE_COLLECTION, 0 , 0 );
192
+ while (dataiterator_step (&di_inner)) {
193
+ dataiterator_setpos (&di_inner);
194
+ Id name = pool_lookup_id (pool, SOLVID_POS, UPDATE_COLLECTION_NAME);
195
+ Id evr = pool_lookup_id (pool, SOLVID_POS, UPDATE_COLLECTION_EVR);
196
+ Id arch = pool_lookup_id (pool, SOLVID_POS, UPDATE_COLLECTION_ARCH);
197
+ if (withFilemanes) {
198
+ filename = pool_lookup_str (pool, SOLVID_POS, UPDATE_COLLECTION_FILENAME);
199
+ }
200
+ pkglist.emplace_back (sack, advisory, name, evr, arch, filename);
201
+ }
202
+ dataiterator_free (&di_inner);
203
+ }
204
+ }
205
+
206
+ dataiterator_free (&di);
207
+ }
208
+
157
209
void
158
210
Advisory::getReferences (std::vector<AdvisoryRef> & reflist) const
159
211
{
0 commit comments