From cbfff346a94de6b55797d027aa8d605976ed4aaa Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Tue, 28 Jan 2014 13:38:26 +0100 Subject: [PATCH] also translate autoproduct strings --- src/linkedpkg.c | 19 +++++++++++++++++++ src/linkedpkg.h | 1 + src/solvable.c | 15 ++++++++++++--- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/linkedpkg.c b/src/linkedpkg.c index d8ecc71..ebdfe5f 100644 --- a/src/linkedpkg.c +++ b/src/linkedpkg.c @@ -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) { diff --git a/src/linkedpkg.h b/src/linkedpkg.h index 3114702..25894c9 100644 --- a/src/linkedpkg.h +++ b/src/linkedpkg.h @@ -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); diff --git a/src/solvable.c b/src/solvable.c index 5afb481..8e94976 100644 --- a/src/solvable.c +++ b/src/solvable.c @@ -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; -- 2.7.4