1
0
mirror of https://github.com/openSUSE/libsolv.git synced 2026-02-05 12:45:46 +01:00

also translate autoproduct strings

This commit is contained in:
Michael Schroeder
2014-01-28 13:38:26 +01:00
parent c473540b19
commit cbfff346a9
3 changed files with 32 additions and 3 deletions

View File

@@ -212,6 +212,9 @@ find_pattern_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Qu
*prvidp = aprel;
}
/* the following two functions are used in solvable_lookup_str_base to do
* translated lookups on the product/pattern packages
*/
Id
find_autopattern_name(Pool *pool, Solvable *s)
{
@@ -228,6 +231,22 @@ find_autopattern_name(Pool *pool, Solvable *s)
return 0;
}
Id
find_autoproduct_name(Pool *pool, Solvable *s)
{
Id prv, *prvp;
if (!s->provides)
return 0;
for (prvp = s->repo->idarraydata + s->provides; (prv = *prvp++) != 0; )
if (ISRELDEP(prv))
{
Reldep *rd = GETRELDEP(pool, prv);
if (rd->flags == REL_EQ && !strcmp(pool_id2str(pool, rd->name), "autoproduct()"))
return strncmp(pool_id2str(pool, rd->evr), "product:", 8) != 0 ? rd->evr : 0;
}
return 0;
}
void
find_package_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp)
{

View File

@@ -30,6 +30,7 @@ extern void find_product_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id
extern void find_pattern_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp);
extern Id find_autopattern_name(Pool *pool, Solvable *s);
extern Id find_autoproduct_name(Pool *pool, Solvable *s);
/* generic */
extern void find_package_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp);

View File

@@ -172,9 +172,18 @@ solvable_lookup_str_base(Solvable *s, Id keyname, Id basekeyname, int usebase)
return str;
}
#ifdef ENABLE_LINKED_PKGS
/* autopattern translation magic */
if (pass && !strncmp("pattern:", pool_id2str(pool, name), 8) && (name = find_autopattern_name(pool, s)) != 0)
pass = -1;
/* autopattern/product translation magic */
if (pass)
{
const char *n = pool_id2str(pool, name);
if (*n == 'p')
{
if (!strncmp("pattern:", n, 8) && (name = find_autopattern_name(pool, s)) != 0)
pass = -1;
if (!strncmp("product:", n, 8) && (name = find_autoproduct_name(pool, s)) != 0)
pass = -1;
}
}
#endif
}
return usebase ? basestr : 0;