#include "pool.h"
#include "repo.h"
+#include "solver.h"
#include "evr.h"
+#include "bitmap.h"
#include "linkedpkg.h"
#ifdef ENABLE_LINKED_PKGS
/* oh no! Look up reference file */
Dataiterator di;
const char *refbasename = solvable_lookup_str(s, PRODUCT_REFERENCEFILE);
- dataiterator_init(&di, pool, s->repo, 0, SOLVABLE_FILELIST, refbasename, SEARCH_STRING);
- while (dataiterator_step(&di))
- queue_push(qr, di.solvid);
- dataiterator_free(&di);
- if (qp)
+ if (refbasename)
{
- dataiterator_init(&di, pool, s->repo, 0, PRODUCT_REFERENCEFILE, refbasename, SEARCH_STRING);
+ dataiterator_init(&di, pool, s->repo, 0, SOLVABLE_FILELIST, refbasename, SEARCH_STRING);
while (dataiterator_step(&di))
- queue_push(qp, di.solvid);
+ {
+ if (di.key->type != REPOKEY_TYPE_DIRSTRARRAY)
+ continue;
+ if (strcmp(repodata_dir2str(di.data, di.kv.id, 0), "/etc/products.d") != 0)
+ continue;
+ queue_push(qr, di.solvid);
+ }
dataiterator_free(&di);
+ if (qp)
+ {
+ dataiterator_init(&di, pool, s->repo, 0, PRODUCT_REFERENCEFILE, refbasename, SEARCH_STRING);
+ while (dataiterator_step(&di))
+ queue_push(qp, di.solvid);
+ dataiterator_free(&di);
+ }
}
}
else if (qp)
return 0;
}
+void
+extend_updatemap_to_buddies(Solver *solv)
+{
+ Pool *pool = solv->pool;
+ Repo *installed = solv->installed;
+ Solvable *s;
+ int p, ip;
+
+ if (!installed)
+ return;
+ if (!solv->updatemap.size || !solv->instbuddy)
+ return;
+ FOR_REPO_SOLVABLES(installed, p, s)
+ {
+ if (!MAPTST(&solv->updatemap, p - installed->start))
+ continue;
+ if ((ip = solv->instbuddy[p - installed->start]) <= 1)
+ continue;
+ if (!has_package_link(pool, s)) /* only look at pseudo -> real relations */
+ continue;
+ if (ip < installed->start || ip >= installed->end || pool->solvables[ip].repo != installed)
+ continue; /* just in case... */
+ MAPSET(&solv->updatemap, ip - installed->start);
+ }
+}
#endif