Author: mlschroe Date: Mon Sep 1 19:55:07 2008 New Revision: 10905 URL: http://svn.opensuse.org/viewcvs/zypp?rev=10905&view=rev Log: - implement otherproviders() Modified: trunk/sat-solver/src/knownid.h trunk/sat-solver/src/pool.c trunk/sat-solver/src/repo.c trunk/sat-solver/src/repo.h trunk/sat-solver/src/repo_helix.c trunk/sat-solver/src/solver.c trunk/sat-solver/tools/repo_content.c trunk/sat-solver/tools/repo_patchxml.c trunk/sat-solver/tools/repo_rpmdb.c trunk/sat-solver/tools/repo_rpmmd.c trunk/sat-solver/tools/repo_susetags.c Modified: trunk/sat-solver/src/knownid.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/knownid.h?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/src/knownid.h (original) +++ trunk/sat-solver/src/knownid.h Mon Sep 1 19:55:07 2008 @@ -48,6 +48,7 @@ KNOWNID(NAMESPACE_SPLITPROVIDES, "namespace:splitprovides"), KNOWNID(NAMESPACE_LANGUAGE, "namespace:language"), KNOWNID(NAMESPACE_FILESYSTEM, "namespace:filesystem"), +KNOWNID(NAMESPACE_OTHERPROVIDERS, "namespace:otherproviders"), KNOWNID(SYSTEM_SYSTEM, "system:system"), KNOWNID(ARCH_SRC, "src"), KNOWNID(ARCH_NOSRC, "nosrc"), Modified: trunk/sat-solver/src/pool.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/pool.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/src/pool.c (original) +++ trunk/sat-solver/src/pool.c Mon Sep 1 19:55:07 2008 @@ -496,6 +496,12 @@ queue_pushunique(&plist, p); break; case REL_NAMESPACE: + if (name == NAMESPACE_OTHERPROVIDERS) + { + pp = pool_whatprovides(pool, evr); + pool->whatprovides_rel[d] = pp - pool->whatprovidesdata; + return pp; + } if (pool->nscallback) { /* ask callback which packages provide the dependency Modified: trunk/sat-solver/src/repo.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repo.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/src/repo.c (original) +++ trunk/sat-solver/src/repo.c Mon Sep 1 19:55:07 2008 @@ -316,7 +316,7 @@ } Offset -repo_fix_legacy(Repo *repo, Offset provides, Offset supplements, Offset freshens) +repo_fix_supplements(Repo *repo, Offset provides, Offset supplements, Offset freshens) { Pool *pool = repo->pool; Id id, idp, idl; @@ -507,6 +507,35 @@ return supplements; } +Offset +repo_fix_conflicts(Repo *repo, Offset conflicts) +{ + char buf[1024], *p, *dep; + Pool *pool = repo->pool; + Id id; + int i; + + if (!conflicts) + return conflicts; + for (i = conflicts; repo->idarraydata[i]; i++) + { + id = repo->idarraydata[i]; + if (ISRELDEP(id)) + continue; + dep = (char *)id2str(pool, id); + if (!strncmp(dep, "otherproviders(", 15) && strlen(dep) < sizeof(buf) - 2) + { + strcpy(buf, dep + 15); + if ((p = strchr(buf, ')')) != 0) + *p = 0; + id = str2id(pool, buf, 1); + id = rel2id(pool, NAMESPACE_OTHERPROVIDERS, id, REL_NAMESPACE, 1); + repo->idarraydata[i] = id; + } + } + return conflicts; +} + struct matchdata { Pool *pool; Modified: trunk/sat-solver/src/repo.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repo.h?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/src/repo.h (original) +++ trunk/sat-solver/src/repo.h Mon Sep 1 19:55:07 2008 @@ -61,7 +61,8 @@ extern Offset repo_addid(Repo *repo, Offset olddeps, Id id); extern Offset repo_addid_dep(Repo *repo, Offset olddeps, Id id, Id marker); extern Offset repo_reserve_ids(Repo *repo, Offset olddeps, int num); -extern Offset repo_fix_legacy(Repo *repo, Offset provides, Offset supplements, Offset freshens); +extern Offset repo_fix_supplements(Repo *repo, Offset provides, Offset supplements, Offset freshens); +extern Offset repo_fix_conflicts(Repo *repo, Offset conflicts); static inline const char *repo_name(const Repo *repo) { Modified: trunk/sat-solver/src/repo_helix.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repo_helix.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/src/repo_helix.c (original) +++ trunk/sat-solver/src/repo_helix.c Mon Sep 1 19:55:07 2008 @@ -622,7 +622,8 @@ /* ensure self-provides */ if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) s->provides = repo_addid_dep(pd->repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); - s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements, pd->freshens); + s->supplements = repo_fix_supplements(pd->repo, s->provides, s->supplements, pd->freshens); + s->conflicts = repo_fix_conflicts(pd->repo, s->conflicts); pd->freshens = 0; /* see bugzilla bnc#190163 */ Modified: trunk/sat-solver/src/solver.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/solver.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/src/solver.c (original) +++ trunk/sat-solver/src/solver.c Mon Sep 1 19:55:07 2008 @@ -1280,7 +1280,15 @@ continue; /* p == n: self conflict */ if (p == n && !solv->allowselfconflicts) - p = 0; /* make it a negative assertion, aka 'uninstallable' */ + { + if (ISRELDEP(con)) + { + Reldep *rd = GETRELDEP(pool, con); + if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_OTHERPROVIDERS) + continue; + } + p = 0; /* make it a negative assertion, aka 'uninstallable' */ + } if (p && ispatch && solv->noobsoletes.size && MAPTST(&solv->noobsoletes, p) && ISRELDEP(con)) { /* our patch conflicts with a noobsoletes (aka multiversion) package */ Modified: trunk/sat-solver/tools/repo_content.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_content.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/tools/repo_content.c (original) +++ trunk/sat-solver/tools/repo_content.c Mon Sep 1 19:55:07 2008 @@ -289,7 +289,7 @@ 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 && code10) - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, 0); + s->supplements = repo_fix_supplements(repo, s->provides, s->supplements, 0); /* Only support one product. */ s = pool_id2solvable(pool, repo_add_solvable(repo)); repodata_extend(data, s - pool->solvables); @@ -397,7 +397,7 @@ { s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); if (code10) - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, 0); + s->supplements = repo_fix_supplements(repo, s->provides, s->supplements, 0); } if (pd.tmp) Modified: trunk/sat-solver/tools/repo_patchxml.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_patchxml.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/tools/repo_patchxml.c (original) +++ trunk/sat-solver/tools/repo_patchxml.c Mon Sep 1 19:55:07 2008 @@ -620,7 +620,8 @@ s->arch = ARCH_NOARCH; if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) s->provides = repo_addid_dep(pd->repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); - s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements, pd->freshens); + s->supplements = repo_fix_supplements(pd->repo, s->provides, s->supplements, pd->freshens); + s->conflicts = repo_fix_conflicts(pd->repo, s->conflicts); pd->freshens = 0; break; case STATE_NAME: Modified: trunk/sat-solver/tools/repo_rpmdb.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_rpmdb.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/tools/repo_rpmdb.c (original) +++ trunk/sat-solver/tools/repo_rpmdb.c Mon Sep 1 19:55:07 2008 @@ -837,7 +837,8 @@ s->suggests = makedeps(pool, repo, rpmhead, TAG_SUGGESTSNAME, TAG_SUGGESTSVERSION, TAG_SUGGESTSFLAGS, 1); s->supplements = makedeps(pool, repo, rpmhead, TAG_ENHANCESNAME, TAG_ENHANCESVERSION, TAG_ENHANCESFLAGS, 2); s->enhances = makedeps(pool, repo, rpmhead, TAG_ENHANCESNAME, TAG_ENHANCESVERSION, TAG_ENHANCESFLAGS, 1); - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, 0); + s->supplements = repo_fix_supplements(repo, s->provides, s->supplements, 0); + s->conflicts = repo_fix_conflicts(repo, s->conflicts); if (repodata) { Modified: trunk/sat-solver/tools/repo_rpmmd.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_rpmmd.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/tools/repo_rpmmd.c (original) +++ trunk/sat-solver/tools/repo_rpmmd.c Mon Sep 1 19:55:07 2008 @@ -915,7 +915,8 @@ s->evr = ID_EMPTY; /* some patterns have this */ if (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); - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, pd->freshens); + s->supplements = repo_fix_supplements(repo, s->provides, s->supplements, pd->freshens); + s->conflicts = repo_fix_conflicts(repo, s->conflicts); pd->freshens = 0; pd->kind = 0; break; Modified: trunk/sat-solver/tools/repo_susetags.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/repo_susetags.c?rev=10905&r1=10904&r2=10905&view=diff ============================================================================== --- trunk/sat-solver/tools/repo_susetags.c (original) +++ trunk/sat-solver/tools/repo_susetags.c Mon Sep 1 19:55:07 2008 @@ -458,7 +458,8 @@ rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); /* XXX This uses repo_addid_dep internally, so should also be harmless to do twice. */ - s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements, freshens); + s->supplements = repo_fix_supplements(pd->repo, s->provides, s->supplements, freshens); + s->conflicts = repo_fix_conflicts(pd->repo, s->conflicts); if (pd->ndirs) commit_diskusage (pd, handle); } -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org