[zypp-commit] r9808 - /trunk/sat-solver/tools/repo_content.c
![](https://seccdn.libravatar.org/avatar/d931030449215d34e693fd9c2fb7933b.jpg?s=120&d=mm&r=g)
Author: matz Date: Thu Apr 24 17:57:52 2008 New Revision: 9808 URL: http://svn.opensuse.org/viewcvs/zypp?rev=9808&view=rev Log: Fix content parsing if PRODUCT isn't the first entry. Modified: trunk/sat-solver/tools/repo_content.c Modified: trunk/sat-solver/tools/repo_content.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_content.c?rev=9808&r1=9807&r2=9808&view=diff ============================================================================== --- trunk/sat-solver/tools/repo_content.c (original) +++ trunk/sat-solver/tools/repo_content.c Thu Apr 24 17:57:52 2008 @@ -41,7 +41,6 @@ } struct parsedata { - char *kind; Repo *repo; char *tmp; int tmpl; @@ -157,7 +156,7 @@ 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 @@ #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")) -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org
participants (1)
-
matz@svn.opensuse.org