Also add pool_intersect_evrs.
if (!keyname)
rflags = selection_make(pool, &job2, argv[i], flags);
else
- rflags = selection_make_deps(pool, &job2, argv[i], flags, pool_str2id(pool, keyname, 1));
+ rflags = selection_make_matchdeps(pool, &job2, argv[i], flags, pool_str2id(pool, keyname, 1), 0);
if (repofilter.count)
selection_filter(pool, &job2, &repofilter);
if (!job2.count)
if (!keyname)
rflags = selection_make(pool, &job2, argv[i], flags);
else
- rflags = selection_make_deps(pool, &job2, argv[i], flags, pool_str2id(pool, keyname, 1));
+ rflags = selection_make_matchdeps(pool, &job2, argv[i], flags, pool_str2id(pool, keyname, 1), 0);
if (repofilter.count)
selection_filter(pool, &job2, &repofilter);
if (job2.count)
str = solvable_lookup_str(s, SOLVABLE_LICENSE);
if (str)
printf("License: %s\n", str);
+#if 0
+ str = solvable_lookup_sourcepkg(s);
+ if (str)
+ printf("Source: %s\n", str);
+#endif
printf("Description:\n%s\n", solvable_lookup_str(s, SOLVABLE_DESCRIPTION));
printf("\n");
}
pool_id2langid;
pool_id2rel;
pool_id2str;
+ pool_intersect_evrs;
pool_isemptyupdatejob;
pool_job2solvables;
pool_job2str;
selection_add;
selection_filter;
selection_make;
- selection_make_deps;
+ selection_make_matchdeps;
selection_solvables;
solv_bin2hex;
solv_calloc;
#endif
/* check if a package's nevr matches a dependency */
+/* semi-private, called from public pool_match_nevr */
int
pool_match_nevr_rel(Pool *pool, Solvable *s, Id d)
}
#endif
+/* public (i.e. not inlined) version of pool_match_flags_evr */
+int
+pool_intersect_evrs(Pool *pool, int pflags, Id pevr, int flags, int evr)
+{
+ return pool_match_flags_evr(pool, pflags, pevr, flags, evr);
+}
+
/* match two dependencies (d1 = provider) */
int
if (!pool_match_dep(pool, rd1->name, rd2->name))
return 0;
/* name matches, check flags and evr */
- return pool_match_flags_evr(pool, rd1->flags, rd1->evr, rd2->flags, rd2->evr);
+ return pool_intersect_evrs(pool, rd1->flags, rd1->evr, rd2->flags, rd2->evr);
}
Id
/* intersect dependencies in keyname with dep, return list of matching packages */
void
-pool_whatmatchesdep(Pool *pool, Id keyname, Id dep, Queue *q)
+pool_whatmatchesdep(Pool *pool, Id keyname, Id dep, Queue *q, int marker)
{
Id p;
continue;
if (s->repo != pool->installed && !pool_installable(pool, s))
continue;
- if (solvable_matchesdep(s, keyname, dep))
+ if (solvable_matchesdep(s, keyname, dep, marker))
queue_push(q, p);
}
}
void pool_create_state_maps(Pool *pool, Queue *installed, Map *installedmap, Map *conflictsmap);
-int pool_match_nevr_rel(Pool *pool, Solvable *s, Id d);
+int pool_intersect_evrs(Pool *pool, int pflags, Id pevr, int flags, int evr);
int pool_match_dep(Pool *pool, Id d1, Id d2);
+/* semi private, used in pool_match_nevr */
+int pool_match_nevr_rel(Pool *pool, Solvable *s, Id d);
+
static inline int pool_match_nevr(Pool *pool, Solvable *s, Id d)
{
if (!ISRELDEP(d))
return pool->whatprovidesdata + off;
}
-void pool_whatmatchesdep(Pool *pool, Id keyname, Id dep, Queue *q);
+void pool_whatmatchesdep(Pool *pool, Id keyname, Id dep, Queue *q, int marker);
/* search the pool. the following filters are available:
* p - search just this solvable
* deps in keyname instead of provides.
*/
int
-selection_make_deps(Pool *pool, Queue *selection, const char *name, int flags, int keyname)
+selection_make_matchdeps(Pool *pool, Queue *selection, const char *name, int flags, int keyname, int marker)
{
char *rname, *r;
int rflags = 0;
if ((s->arch == ARCH_SRC || s->arch == ARCH_NOSRC) && !(flags & SELECTION_SOURCE_ONLY) && !(flags & SELECTION_WITH_SOURCE))
continue;
queue_empty(&q);
- repo_lookup_idarray(s->repo, p, keyname, &q);
+ repo_lookup_deparray(s->repo, p, keyname, &q, marker);
for (i = 0; i < q.count; i++)
{
Id id = q.elements[i];
#define SELECTION_WITH_SOURCE (1 << 13)
extern int selection_make(Pool *pool, Queue *selection, const char *name, int flags);
-extern int selection_make_deps(Pool *pool, Queue *selection, const char *name, int flags, int keyname);
+extern int selection_make_matchdeps(Pool *pool, Queue *selection, const char *name, int flags, int keyname, int marker);
extern void selection_filter(Pool *pool, Queue *sel1, Queue *sel2);
extern void selection_add(Pool *pool, Queue *sel1, Queue *sel2);
/* return true if a dependency intersects dep in the keyname array */
int
-solvable_matchesdep(Solvable *s, Id keyname, Id dep)
+solvable_matchesdep(Solvable *s, Id keyname, Id dep, int marker)
{
int i;
Pool *pool = s->repo->pool;
Queue q;
queue_init(&q);
- solvable_lookup_idarray(s, keyname, &q);
+ solvable_lookup_deparray(s, keyname, &q, marker);
for (i = 0; i < q.count; i++)
if (pool_match_dep(pool, q.elements[i], dep))
break;
int solvable_identical(Solvable *s1, Solvable *s2);
Id solvable_selfprovidedep(Solvable *s);
-int solvable_matchesdep(Solvable *s, Id keyname, Id dep);
+int solvable_matchesdep(Solvable *s, Id keyname, Id dep, int marker);
#ifdef __cplusplus
}