From: Michael Matz Date: Thu, 24 Apr 2008 15:57:52 +0000 (+0000) Subject: Fix content parsing if PRODUCT isn't the first entry. X-Git-Tag: BASE-SuSE-Code-12_1-Branch~308^2~388 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=0b749bf5766262b50d2eb604338af93b3fdc6c28;p=thirdparty%2Flibsolv.git Fix content parsing if PRODUCT isn't the first entry. --- diff --git a/tools/repo_content.c b/tools/repo_content.c index 141cd6a7..ab00a10f 100644 --- a/tools/repo_content.c +++ b/tools/repo_content.c @@ -41,7 +41,6 @@ split(char *l, char **sp, int m) } struct parsedata { - char *kind; Repo *repo; char *tmp; int tmpl; @@ -157,7 +156,7 @@ repo_add_content(Repo *repo, FILE *fp) Pool *pool = repo->pool; char *line, *linep; int aline; - Solvable *s; + Solvable *s, *firsts; struct parsedata pd; memset(&pd, 0, sizeof(pd)); @@ -202,17 +201,27 @@ repo_add_content(Repo *repo, FILE *fp) #define istag(x) !strcmp (key, x) if (istag ("PRODUCT")) { - /* finish old solvable */ - if (s && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) - s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); - if (s) - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements); - /* Only support one product. */ - pd.kind = "product"; - s = pool_id2solvable(pool, repo_add_solvable(repo)); - s->name = str2id(pool, join(&pd, pd.kind, ":", value), 1); + /* Finish old solvable, but only if it wasn't created + on demand without seeing a PRODUCT entry. */ + if (!firsts) + { + if (s && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) + s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); + if (s) + s->supplements = repo_fix_legacy(repo, s->provides, s->supplements); + /* Only support one product. */ + s = pool_id2solvable(pool, repo_add_solvable(repo)); + } + firsts = 0; + s->name = str2id(pool, join(&pd, "product", ":", value), 1); + continue; } - else if (istag ("VERSION")) + + /* Sometimes PRODUCT is not the first entry, but we need a solvable + from here on. */ + if (!s) + firsts = s = pool_id2solvable(pool, repo_add_solvable(repo)); + if (istag ("VERSION")) /* without a release? but that's like zypp implements it */ s->evr = makeevr(pool, value); else if (istag ("DISTPRODUCT"))