Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libsolv for openSUSE:Factory checked in at 2026-03-14 22:20:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libsolv (Old) and /work/SRC/openSUSE:Factory/.libsolv.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libsolv" Sat Mar 14 22:20:59 2026 rev:102 rq:1338716 version:0.7.36 Changes: -------- --- /work/SRC/openSUSE:Factory/libsolv/libsolv.changes 2026-01-13 21:23:07.407610238 +0100 +++ /work/SRC/openSUSE:Factory/.libsolv.new.8177/libsolv.changes 2026-03-14 22:21:26.810774555 +0100 @@ -1,0 +2,10 @@ +Thu Mar 12 10:11:18 CET 2026 - Michael Schroeder <[email protected]> + +- respect the "default" attribute in environment optionlist in + the comps parser +- support suse namespace deps in boolean dependencies [bsc#1258193] +- support for the Elbrus2000 (e2k) architecture +- support language() suse namespace rewriting +- bump version to 0.7.36 + +------------------------------------------------------------------- Old: ---- libsolv-0.7.35.tar.bz2 New: ---- libsolv-0.7.36.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libsolv.spec ++++++ --- /var/tmp/diff_new_pack.vMMfVa/_old 2026-03-14 22:21:27.810815953 +0100 +++ /var/tmp/diff_new_pack.vMMfVa/_new 2026-03-14 22:21:27.810815953 +0100 @@ -72,7 +72,7 @@ %bcond_with zypp Name: libsolv -Version: 0.7.35 +Version: 0.7.36 Release: 0 Summary: Package dependency solver using a satisfiability algorithm License: BSD-3-Clause ++++++ libsolv-0.7.35.tar.bz2 -> libsolv-0.7.36.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/NEWS new/libsolv-0.7.36/NEWS --- old/libsolv-0.7.35/NEWS 2025-08-04 11:20:06.000000000 +0200 +++ new/libsolv-0.7.36/NEWS 2026-03-12 10:20:08.000000000 +0100 @@ -1,6 +1,15 @@ This file contains the major changes between libsolv versions: +Version 0.7.36 +- selected bug fixes: + * respect the "default" attribute in environment optionlist in + the comps parser + * support suse namespace deps in boolean dependencies +- new features: + * support for the Elbrus2000 (e2k) architecture + * support language() suse namespace rewriting + Version 0.7.35 - selected bug fixes: * fixed rare crash in the handling of allowuninstall in combination diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/VERSION.cmake new/libsolv-0.7.36/VERSION.cmake --- old/libsolv-0.7.35/VERSION.cmake 2025-08-04 11:20:06.000000000 +0200 +++ new/libsolv-0.7.36/VERSION.cmake 2026-03-12 10:20:08.000000000 +0100 @@ -49,5 +49,5 @@ SET(LIBSOLV_MAJOR "0") SET(LIBSOLV_MINOR "7") -SET(LIBSOLV_PATCH "35") +SET(LIBSOLV_PATCH "36") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/examples/solv/repoinfo_download.c new/libsolv-0.7.36/examples/solv/repoinfo_download.c --- old/libsolv-0.7.35/examples/solv/repoinfo_download.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/examples/solv/repoinfo_download.c 2026-03-09 10:20:07.000000000 +0100 @@ -114,8 +114,8 @@ const char *path = cinfo->path && strcmp(cinfo->path, "/") != 0 ? cinfo->path : ""; int l = strlen(baseurl); int pl = strlen(path); - const char *sep = l && baseurl[l - 1] == '/' ? "" : "/"; - const char *psep = pl && cinfo->path[pl - 1] == '/' ? "" : "/"; + const char *sep = !l || baseurl[l - 1] == '/' ? "" : "/"; + const char *psep = !pl || cinfo->path[pl - 1] == '/' ? "" : "/"; snprintf(url, sizeof(url), "%s%s%s%s%s", baseurl, sep, path, psep, file); } fd = opentmpfile(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/examples/solv/solv.c new/libsolv-0.7.36/examples/solv/solv.c --- old/libsolv-0.7.35/examples/solv/solv.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/examples/solv/solv.c 2026-02-03 13:20:07.000000000 +0100 @@ -159,11 +159,6 @@ printf("unsolvable: "); else printf("%s %s: ", v < 0 ? "conflicted" : "installed", pool_solvidset2str(pool, &qp)); - if (type == 0) - { - printf("%s\n", solver_reason2str(solv, reason)); - continue; - } if (type == SOLVER_RULE_LEARNT && lq) { for (j = 0; j < lq->count; j++) @@ -175,7 +170,10 @@ continue; } } - printf("%s\n", solver_decisioninfo2str(solv, bits, type, from, to, dep)); + if (type == 0) /* for SOLVER_REASON_PREMISE */ + printf("%s\n", solver_reason2str(solv, reason)); + else + printf("%s\n", solver_decisioninfo2str(solv, bits, type, from, to, dep)); } queue_free(&qp); queue_free(&q); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/ext/repo_comps.c new/libsolv-0.7.36/ext/repo_comps.c --- old/libsolv-0.7.35/ext/repo_comps.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/ext/repo_comps.c 2026-03-09 16:00:06.000000000 +0100 @@ -108,6 +108,7 @@ const char *kind; int isdefault; int isvisible; + int groupid_isdefault; Id handle; }; @@ -188,6 +189,13 @@ break; } + case STATE_GROUPID: + { + const char *isdefault = solv_xmlparser_find_attr("default", atts); + pd->groupid_isdefault = (isdefault && !strcmp(isdefault, "true")); + break; + } + default: break; } @@ -240,7 +248,10 @@ case STATE_GROUPID: id = pool_str2id(pd->pool, join2(&pd->jd, "group", ":", content), 1); - repo_add_idarray(pd->repo, pd->handle, pd->reqtype, id); + if (pd->groupid_isdefault && pd->reqtype == SOLVABLE_SUGGESTS) + repo_add_idarray(pd->repo, pd->handle, SOLVABLE_RECOMMENDS, id); + else + repo_add_idarray(pd->repo, pd->handle, pd->reqtype, id); break; case STATE_USERVISIBLE: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/ext/repo_rpmdb_librpm.h new/libsolv-0.7.36/ext/repo_rpmdb_librpm.h --- old/libsolv-0.7.35/ext/repo_rpmdb_librpm.h 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/ext/repo_rpmdb_librpm.h 2026-02-03 13:20:07.000000000 +0100 @@ -54,9 +54,20 @@ return; } solv_free((char *)state->dbpath); - state->dbpath = access_rootdir(state, "/var/lib/rpm", W_OK) == -1 - && (access_rootdir(state, "/usr/share/rpm/Packages", R_OK) == 0 || access_rootdir(state, "/usr/share/rpm/rpmdb.sqlite", R_OK) == 0) - ? "/usr/share/rpm" : "/var/lib/rpm"; + if (access_rootdir(state, "/var/lib/rpm", W_OK) == -1) + { + if (access_rootdir(state, "/usr/share/rpm/Packages", R_OK) == 0 || access_rootdir(state, "/usr/share/rpm/rpmdb.sqlite", R_OK)) + { + state->dbpath = "/usr/share/rpm"; + return; + } + if (access_rootdir(state, "/usr/lib/sysimage/rpm/Packages.db", R_OK) == 0 || access_rootdir(state, "/usr/lib/sysimage/rpm/rpmdb.sqlite", R_OK) || access_rootdir(state, "/usr/lib/sysimage/rpm/Packages", R_OK)) + { + state->dbpath = "/usr/lib/sysimage/rpm"; + return; + } + } + state->dbpath = "/var/lib/rpm"; } static int diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/ext/solv_xfopen.c new/libsolv-0.7.36/ext/solv_xfopen.c --- old/libsolv-0.7.35/ext/solv_xfopen.c 2024-11-28 14:00:06.000000000 +0100 +++ new/libsolv-0.7.36/ext/solv_xfopen.c 2026-02-03 15:30:06.000000000 +0100 @@ -33,7 +33,7 @@ return funopen(cookie, (int (*)(void *, char *, int))(*mode == 'r' ? cread : NULL), /* readfn */ (int (*)(void *, const char *, int))(*mode == 'w' ? cwrite : NULL), /* writefn */ - (fpos_t (*)(void *, fpos_t, int))NULL, /* seekfn */ + NULL, /* seekfn */ cclose ); #elif defined(HAVE_FOPENCOOKIE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/ext/testcase.c new/libsolv-0.7.36/ext/testcase.c --- old/libsolv-0.7.35/ext/testcase.c 2025-07-29 10:10:07.000000000 +0200 +++ new/libsolv-0.7.36/ext/testcase.c 2026-03-09 10:20:07.000000000 +0100 @@ -2585,6 +2585,15 @@ id = 0; else if (!strcmp(pieces[1], "dep")) id = testcase_str2dep(pool, pieces[2]); + else if (!strcmp(pieces[1], "susedep")) + { + if (ngenid < 1) + { + pool_error(pool, 0, "testcase_read: genid: out of stack"); + break; + } + id = pool_rewrite_suse_dep(pool, pool_str2id(pool, pieces[2], -1), genid[--ngenid]); + } else { pool_error(pool, 0, "testcase_read: genid: unknown command '%s'", pieces[1]); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/package/libsolv.changes new/libsolv-0.7.36/package/libsolv.changes --- old/libsolv-0.7.35/package/libsolv.changes 2025-08-04 11:20:06.000000000 +0200 +++ new/libsolv-0.7.36/package/libsolv.changes 2026-03-12 10:20:08.000000000 +0100 @@ -1,4 +1,14 @@ ------------------------------------------------------------------- +Thu Mar 12 10:11:18 CET 2026 - Michael Schroeder <[email protected]> + +- respect the "default" attribute in environment optionlist in + the comps parser +- support suse namespace deps in boolean dependencies [bsc#1258193] +- support for the Elbrus2000 (e2k) architecture +- support language() suse namespace rewriting +- bump version to 0.7.36 + +------------------------------------------------------------------- Mon Aug 4 10:46:17 CEST 2025 - [email protected] - fixed rare crash in the handling of allowuninstall in combination diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/src/bitmap.c new/libsolv-0.7.36/src/bitmap.c --- old/libsolv-0.7.35/src/bitmap.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/src/bitmap.c 2026-03-06 09:40:07.000000000 +0100 @@ -69,6 +69,9 @@ end = ti + (t->size < s->size ? t->size : s->size); while (ti < end) *ti++ &= *si++; + end = t->map + t->size; + while (ti < end) + *ti++ = 0; } /* bitwise-ors maps t and s, stores the result in t. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/src/decision.c new/libsolv-0.7.36/src/decision.c --- old/libsolv-0.7.35/src/decision.c 2025-05-16 10:20:07.000000000 +0200 +++ new/libsolv-0.7.36/src/decision.c 2026-02-03 13:20:07.000000000 +0100 @@ -737,10 +737,10 @@ Pool *pool = solv->pool; Map dm; if ((flags & SOLVER_DECISIONLIST_TYPEMASK) != SOLVER_DECISIONLIST_SOLVABLE) - { - solver_get_proof(solv, id, flags, decisionlistq); - return; - } + { + solver_get_proof(solv, id, flags, decisionlistq); + return; + } map_init(&dm, pool->nsolvables); MAPSET(&dm, id); getdecisionlist(solv, &dm, flags, decisionlistq); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/src/libsolv.ver new/libsolv-0.7.36/src/libsolv.ver --- old/libsolv-0.7.35/src/libsolv.ver 2025-08-01 15:40:11.000000000 +0200 +++ new/libsolv-0.7.36/src/libsolv.ver 2026-03-09 10:20:07.000000000 +0100 @@ -96,6 +96,7 @@ pool_prepend_rootdir_tmp; pool_queuetowhatprovides; pool_rel2id; + pool_rewrite_suse_dep; pool_satisfieddep_map; pool_search; pool_selection2str; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/src/pool.h new/libsolv-0.7.36/src/pool.h --- old/libsolv-0.7.35/src/pool.h 2025-08-01 15:40:11.000000000 +0200 +++ new/libsolv-0.7.36/src/pool.h 2026-03-09 10:20:07.000000000 +0100 @@ -424,6 +424,7 @@ /* weird suse stuff */ void pool_trivial_installable_multiversionmap(Pool *pool, Map *installedmap, Queue *pkgs, Queue *res, Map *multiversionmap); void pool_trivial_installable(Pool *pool, Map *installedmap, Queue *pkgs, Queue *res); +Id pool_rewrite_suse_dep(Pool *pool, Id keyname, Id id); #ifdef __cplusplus } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/src/problems.c new/libsolv-0.7.36/src/problems.c --- old/libsolv-0.7.35/src/problems.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/src/problems.c 2026-02-03 13:20:07.000000000 +0100 @@ -1271,10 +1271,13 @@ /* * find problem rule * - * search for a rule that describes the problem to the - * user. Actually a pretty hopeless task that may leave the user + * search for a rule that describes the problem to the user. + * Actually a pretty hopeless task that may leave the user * puzzled. To get all of the needed information use * solver_findallproblemrules() instead. + * + * Also note that solver_get_decisionlist() can be used to get + * a "proof" for the problem. */ Id @@ -1351,6 +1354,9 @@ * return all rules that lead to the problem. This gives the user * all of the information to understand the problem, but the result * can be a large number of rules. + * + * Also note that solver_get_decisionlist() can be used to get + * a "proof" for the problem. */ void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/src/suse.c new/libsolv-0.7.36/src/suse.c --- old/libsolv-0.7.35/src/suse.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/src/suse.c 2026-03-10 14:10:06.000000000 +0100 @@ -19,12 +19,95 @@ #include "poolvendor.h" #include "util.h" +/* use a REL_NAMESPACE dep for modalias/filesystem/language dependencies */ +static Id +fix_namespace_dep_norel(Pool *pool, Id id) +{ + char buf[1024], *p, *bp; + const char *dep; + size_t depl; + + dep = pool_id2str(pool, id); + if (!strncmp(dep, "modalias(", 9) && dep[9] && dep[10]) + { + Id pkgid = 0; + depl = strlen(dep); + if (dep[depl - 1] != ')' || depl >= sizeof(buf)) + return id; + strcpy(buf, dep); /* need to make a copy for str2id */ + bp = buf; + bp[depl - 1] = 0; /* get rid of trailing ')' */ + p = strchr(bp + 9, ':'); + if (p && p != dep + 9 && strchr(p + 1, ':')) + { + pkgid = pool_strn2id(pool, bp + 9, p - (bp + 9), 1); + p++; + } + else + p = bp + 9; + id = pool_str2id(pool, p, 1); + id = pool_rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 1); + if (pkgid) + id = pool_rel2id(pool, pkgid, id, REL_AND, 1); + } + else if (!strncmp(dep, "filesystem(", 11) && dep[11] && dep[12]) + { + depl = strlen(dep); + if (dep[depl - 1] != ')' || depl >= sizeof(buf)) + return id; + strcpy(buf, dep); /* need to make a copy for str2id */ + bp = buf; + bp[depl - 1] = 0; /* get rid of trailing ')' */ + id = pool_str2id(pool, bp + 11, 1); + id = pool_rel2id(pool, NAMESPACE_FILESYSTEM, id, REL_NAMESPACE, 1); + } + else if (!strncmp(dep, "language(", 9) && dep[9] && dep[10] && dep[9] != ';') + { + char *p2; + depl = strlen(dep); + if (dep[depl - 1] != ')' || depl >= sizeof(buf)) + return id; + strcpy(buf, dep); /* need to make a copy for str2id */ + bp = buf; + bp[depl - 1] = 0; /* get rid of trailing ')' */ + id = 0; + for (p2 = bp + 9; *p2; p2 = *p ? p + 1 : p) + { + Id idl; + p = strchr(p2, ';'); + if (!p) + p = p2 + strlen(p2); + idl = pool_strn2id(pool, p2, p - p2, 1); + idl = pool_rel2id(pool, NAMESPACE_LANGUAGE, idl, REL_NAMESPACE, 1); + id = id ? pool_rel2id(pool, id, idl, REL_OR, 1) : idl; + } + } + return id; +} + +static Id +fix_namespace_dep(Pool *pool, Id id) +{ + Reldep *rd; + if (!ISRELDEP(id)) + return fix_namespace_dep_norel(pool, id); + rd = GETRELDEP(pool, id); + if (rd->flags == REL_AND || rd->flags == REL_OR || rd->flags == REL_COND || rd->flags == REL_UNLESS || rd->flags == REL_ELSE) + { + Id name = fix_namespace_dep(pool, rd->name); + Id evr = fix_namespace_dep(pool, rd->evr); + return name == rd->name && evr == rd->evr ? id : pool_rel2id(pool, name, evr, rd->flags, 1); + } + return id; +} + Offset repo_fix_supplements(Repo *repo, Offset provides, Offset supplements, Offset freshens) { Pool *pool = repo->pool; Id id, idp, idl; - char buf[1024], *p, *dep; + char buf[1024], *p, *bp; + const char *dep; int i, l; if (provides) @@ -34,41 +117,41 @@ id = repo->idarraydata[i]; if (ISRELDEP(id)) continue; - dep = (char *)pool_id2str(pool, id); + dep = pool_id2str(pool, id); if (!strncmp(dep, "locale(", 7) && strlen(dep) < sizeof(buf) - 2) { idp = 0; strcpy(buf + 2, dep); - dep = buf + 2 + 7; - if ((p = strchr(dep, ':')) != 0 && p != dep) + bp = buf + 2 + 7; + if ((p = strchr(bp, ':')) != 0 && p != bp) { *p++ = 0; - idp = pool_str2id(pool, dep, 1); - dep = p; + idp = pool_str2id(pool, bp, 1); + bp = p; } id = 0; - while ((p = strchr(dep, ';')) != 0) + while ((p = strchr(bp, ';')) != 0) { - if (p == dep) + if (p == bp) { - dep = p + 1; + bp = p + 1; continue; } *p++ = 0; - idl = pool_str2id(pool, dep, 1); + idl = pool_str2id(pool, bp, 1); idl = pool_rel2id(pool, NAMESPACE_LANGUAGE, idl, REL_NAMESPACE, 1); if (id) id = pool_rel2id(pool, id, idl, REL_OR, 1); else id = idl; - dep = p; + bp = p; } - if (dep[0] && dep[1]) + if (bp[0] && bp[1]) { - for (p = dep; *p && *p != ')'; p++) + for (p = bp; *p && *p != ')'; p++) ; *p = 0; - idl = pool_str2id(pool, dep, 1); + idl = pool_str2id(pool, bp, 1); idl = pool_rel2id(pool, NAMESPACE_LANGUAGE, idl, REL_NAMESPACE, 1); if (id) id = pool_rel2id(pool, id, idl, REL_OR, 1); @@ -103,64 +186,46 @@ { id = repo->idarraydata[i]; if (ISRELDEP(id)) - continue; - dep = (char *)pool_id2str(pool, id); - if (!strncmp(dep, "system:modalias(", 16)) - dep += 7; - if (!strncmp(dep, "modalias(", 9) && dep[9] && dep[10] && strlen(dep) < sizeof(buf)) { - strcpy(buf, dep); - p = strchr(buf + 9, ':'); - if (p && p != buf + 9 && strchr(p + 1, ':')) - { - *p++ = 0; - idp = pool_str2id(pool, buf + 9, 1); - p[strlen(p) - 1] = 0; - id = pool_str2id(pool, p, 1); - id = pool_rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 1); - id = pool_rel2id(pool, idp, id, REL_AND, 1); - } - else - { - p = buf + 9; - p[strlen(p) - 1] = 0; - id = pool_str2id(pool, p, 1); - id = pool_rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 1); - } - if (id) - repo->idarraydata[i] = id; + Reldep *rd = GETRELDEP(pool, id); + if (rd->flags == REL_AND || rd->flags == REL_OR || rd->flags == REL_COND || rd->flags == REL_UNLESS || rd->flags == REL_ELSE) + repo->idarraydata[i] = fix_namespace_dep(pool, id); + continue; } + dep = pool_id2str(pool, id); + if (!strncmp(dep, "modalias(", 9) || !strncmp(dep, "filesystem(", 11) || !strncmp(dep, "language(", 9)) + repo->idarraydata[i] = fix_namespace_dep_norel(pool, id); else if (!strncmp(dep, "packageand(", 11) && strlen(dep) < sizeof(buf)) { strcpy(buf, dep); id = 0; - dep = buf + 11; - while ((p = strchr(dep, ':')) != 0) + bp = buf + 11; + while ((p = strchr(bp, ':')) != 0) { - if (p == dep) + if (p == bp) { - dep = p + 1; + bp = p + 1; continue; } /* argh, allow pattern: prefix. sigh */ - if (p - dep == 7 && !strncmp(dep, "pattern", 7)) + if (p - bp == 7 && !strncmp(bp, "pattern", 7)) { p = strchr(p + 1, ':'); if (!p) break; } *p++ = 0; - idp = pool_str2id(pool, dep, 1); + idp = pool_str2id(pool, bp, 1); if (id) id = pool_rel2id(pool, id, idp, REL_AND, 1); else id = idp; - dep = p; + bp = p; } - if (dep[0] && dep[1]) + if (bp[0] && bp[1]) { - dep[strlen(dep) - 1] = 0; - idp = pool_str2id(pool, dep, 1); + bp[strlen(bp) - 1] = 0; + idp = pool_str2id(pool, bp, 1); if (id) id = pool_rel2id(pool, id, idp, REL_AND, 1); else @@ -169,15 +234,6 @@ if (id) repo->idarraydata[i] = id; } - else if (!strncmp(dep, "filesystem(", 11) && strlen(dep) < sizeof(buf)) - { - strcpy(buf, dep + 11); - if ((p = strrchr(buf, ')')) != 0) - *p = 0; - id = pool_str2id(pool, buf, 1); - id = pool_rel2id(pool, NAMESPACE_FILESYSTEM, id, REL_NAMESPACE, 1); - repo->idarraydata[i] = id; - } } } if (freshens && repo->idarraydata[freshens]) @@ -244,6 +300,32 @@ s->conflicts = repo_fix_conflicts(s->repo, s->conflicts); } +Id +pool_rewrite_suse_dep(Pool *pool, Id keyname, Id id) +{ + /* hack: use a synthetic repo. As this is only for testing it + * should not be a problem */ + Repo repo; + Id idarraydata[5]; + memset(&repo, 0, sizeof(repo)); + idarraydata[0] = 0; + idarraydata[1] = id; + idarraydata[2] = 0; + idarraydata[3] = 0; + idarraydata[4] = 0; + repo.pool = pool; + repo.idarraydata = idarraydata; + repo.idarraysize = 4; + repo.lastoff = 3; + if (keyname == SOLVABLE_PROVIDES) + return idarraydata[repo_fix_supplements(&repo, 1, 3, 0)]; + if (keyname == SOLVABLE_SUPPLEMENTS) + return idarraydata[repo_fix_supplements(&repo, 0, 1, 0)]; + if (keyname == SOLVABLE_CONFLICTS) + return idarraydata[repo_fix_conflicts(&repo, 1)]; + return 0; +} + /**********************************************************************************/ static inline Id diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/test/testcases/forcebest/forcebest_multiarch_implicitobsoleteusescolors.t new/libsolv-0.7.36/test/testcases/forcebest/forcebest_multiarch_implicitobsoleteusescolors.t --- old/libsolv-0.7.35/test/testcases/forcebest/forcebest_multiarch_implicitobsoleteusescolors.t 1970-01-01 01:00:00.000000000 +0100 +++ new/libsolv-0.7.36/test/testcases/forcebest/forcebest_multiarch_implicitobsoleteusescolors.t 2026-01-21 11:40:06.000000000 +0100 @@ -0,0 +1,54 @@ +repo @System 0 testtags <inline> +#>=Ver: 3.0 +#>=Pkg: a 1 1 x86_64 +#>=Prv: a = 1-1 +#>=Con: c < 1-1 +#> +#>=Pkg: c 1 1 x86_64 +#>=Req: c-dep = 1-1 +#>=Prv: c = 1-1 +#> +#>=Pkg: c-dep 1 1 x86_64 +#>=Prv: c-dep = 1-1 +#> +#>=Pkg: d 1 1 x86_64 +#>=Req: c = 1-1 +#>=Req: multiarch = 1-1 +#>=Prv: d = 1-1 +#> +#>=Pkg: multiarch 1 1 x86_64 +#>=Prv: multiarch = 1-1 + +repo available 0 testtags <inline> +#>=Ver: 3.0 +#>=Pkg: a 2 2 x86_64 +#>=Prv: a = 2-2 +#>=Con: c < 2-2 +#> +#>=Pkg: c 2 2 x86_64 +#>=Req: c-dep = 2-2 +#>=Prv: c = 2-2 +#> +#>=Pkg: c-dep 2 2 x86_64 +#>=Prv: c-dep = 2-2 +#> +#>=Pkg: d 2 2 x86_64 +#>=Req: multiarch >= 2-2 +#>=Prv: d = 2-2 +#> +#>=Pkg: multiarch 2 2 x86_64 +#>=Prv: multiarch = 2-2 +#> +#>=Pkg: multiarch 2 2 i686 +#>=Prv: multiarch = 2-2 + +system x86_64 rpm @System +poolflags implicitobsoleteusescolors +solverflags bestobeypolicy +job update oneof a-2-2.x86_64@available multiarch-1-1.x86_64@@System multiarch-2-2.i686@available [forcebest,targeted,setevr,setarch] +result transaction,problems <inline> +#>upgrade a-1-1.x86_64@@System a-2-2.x86_64@available +#>upgrade multiarch-1-1.x86_64@@System multiarch-2-2.x86_64@available +#>upgrade c-dep-1-1.x86_64@@System c-dep-2-2.x86_64@available +#>upgrade c-1-1.x86_64@@System c-2-2.x86_64@available +#>upgrade d-1-1.x86_64@@System d-2-2.x86_64@available diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/test/testcases/suse/susedep.t new/libsolv-0.7.36/test/testcases/suse/susedep.t --- old/libsolv-0.7.35/test/testcases/suse/susedep.t 1970-01-01 01:00:00.000000000 +0100 +++ new/libsolv-0.7.36/test/testcases/suse/susedep.t 2026-03-09 12:50:06.000000000 +0100 @@ -0,0 +1,125 @@ +genid dep modalias(bar:baz) +genid susedep solvable:supplements +result genid <inline> +#>genid 1: genid lit namespace:modalias +#>genid 2: genid lit bar:baz +#>genid 3: genid op <NAMESPACE> +#>genid dep namespace:modalias(bar:baz) +nextjob + +genid dep modalias(foo:bar:baz) +genid susedep solvable:supplements +result genid <inline> +#>genid 1: genid lit foo +#>genid 2: genid lit namespace:modalias +#>genid 3: genid lit bar:baz +#>genid 4: genid op <NAMESPACE> +#>genid 5: genid op & +#>genid dep foo & namespace:modalias(bar:baz) +nextjob + +genid dep kernel & modalias(foo:bar:baz) +genid susedep solvable:supplements +result genid <inline> +#>genid 1: genid lit kernel +#>genid 2: genid lit foo +#>genid 3: genid lit namespace:modalias +#>genid 4: genid lit bar:baz +#>genid 5: genid op <NAMESPACE> +#>genid 6: genid op & +#>genid 7: genid op & +#>genid dep kernel & foo & namespace:modalias(bar:baz) +nextjob + +genid dep filesystem(foo:bar) +genid susedep solvable:supplements +result genid <inline> +#>genid 1: genid lit namespace:filesystem +#>genid 2: genid lit foo:bar +#>genid 3: genid op <NAMESPACE> +#>genid dep namespace:filesystem(foo:bar) +nextjob + +genid dep packageand(foo:bar) +genid susedep solvable:supplements +result genid <inline> +#>genid 1: genid lit foo +#>genid 2: genid lit bar +#>genid 3: genid op & +#>genid dep foo & bar +nextjob + +genid dep packageand(foo:pattern:bar) +genid susedep solvable:supplements +result genid <inline> +#>genid 1: genid lit foo +#>genid 2: genid lit pattern:bar +#>genid 3: genid op & +#>genid dep foo & pattern:bar +nextjob + +genid dep otherproviders(foo:bar) +genid susedep solvable:conflicts +result genid <inline> +#>genid 1: genid lit namespace:otherproviders +#>genid 2: genid lit foo:bar +#>genid 3: genid op <NAMESPACE> +#>genid dep namespace:otherproviders(foo:bar) +nextjob + +genid dep foo:/bin/bar +genid susedep solvable:provides +result genid <inline> +#>genid 1: genid lit namespace:splitprovides +#>genid 2: genid lit foo +#>genid 3: genid lit /bin/bar +#>genid 4: genid op + +#>genid 5: genid op <NAMESPACE> +#>genid dep namespace:splitprovides(foo + /bin/bar) +nextjob + +genid dep locale(de) +genid susedep solvable:provides +result genid <inline> +#>genid 1: genid lit namespace:language +#>genid 2: genid lit de +#>genid 3: genid op <NAMESPACE> +#>genid dep namespace:language(de) +nextjob + +genid dep locale(foo:de;en) +genid susedep solvable:provides +result genid <inline> +#>genid 1: genid lit foo +#>genid 2: genid lit namespace:language +#>genid 3: genid lit de +#>genid 4: genid op <NAMESPACE> +#>genid 5: genid lit namespace:language +#>genid 6: genid lit en +#>genid 7: genid op <NAMESPACE> +#>genid 8: genid op | +#>genid 9: genid op & +#>genid dep foo & (namespace:language(de) | namespace:language(en)) +nextjob + +genid dep language(de) +genid susedep solvable:supplements +result genid <inline> +#>genid 1: genid lit namespace:language +#>genid 2: genid lit de +#>genid 3: genid op <NAMESPACE> +#>genid dep namespace:language(de) +nextjob + +genid dep language(de;en) +genid susedep solvable:supplements +result genid <inline> +#>genid 1: genid lit namespace:language +#>genid 2: genid lit de +#>genid 3: genid op <NAMESPACE> +#>genid 4: genid lit namespace:language +#>genid 5: genid lit en +#>genid 6: genid op <NAMESPACE> +#>genid 7: genid op | +#>genid dep namespace:language(de) | namespace:language(en) + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/tools/deb2solv.c new/libsolv-0.7.36/tools/deb2solv.c --- old/libsolv-0.7.35/tools/deb2solv.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/tools/deb2solv.c 2026-02-03 13:20:07.000000000 +0100 @@ -15,7 +15,6 @@ #include <stdlib.h> #include <unistd.h> #include <string.h> -#include <getopt.h> #include "util.h" #include "pool.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/tools/dumpsolv.c new/libsolv-0.7.36/tools/dumpsolv.c --- old/libsolv-0.7.35/tools/dumpsolv.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/tools/dumpsolv.c 2026-02-03 13:20:07.000000000 +0100 @@ -9,7 +9,6 @@ #include <stdlib.h> #include <unistd.h> #include <string.h> -#include <getopt.h> static int with_attr; static int dump_json; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/tools/mergesolv.c new/libsolv-0.7.36/tools/mergesolv.c --- old/libsolv-0.7.35/tools/mergesolv.c 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/tools/mergesolv.c 2026-02-03 13:20:07.000000000 +0100 @@ -16,7 +16,6 @@ #include <stdlib.h> #include <string.h> #include <assert.h> -#include <getopt.h> #include "pool.h" #include "repo_solv.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/tools/repo2solv.c new/libsolv-0.7.36/tools/repo2solv.c --- old/libsolv-0.7.35/tools/repo2solv.c 2025-05-14 14:10:07.000000000 +0200 +++ new/libsolv-0.7.36/tools/repo2solv.c 2026-02-03 13:20:07.000000000 +0100 @@ -5,7 +5,6 @@ * for further information */ -#include <getopt.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/tools/testsolv.c new/libsolv-0.7.36/tools/testsolv.c --- old/libsolv-0.7.35/tools/testsolv.c 2024-04-10 12:40:06.000000000 +0200 +++ new/libsolv-0.7.36/tools/testsolv.c 2026-02-03 13:20:07.000000000 +0100 @@ -1,7 +1,6 @@ #include <stdio.h> #include <stdlib.h> #include <unistd.h> -#include <getopt.h> #include "pool.h" #include "repo.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.35/win32/unistd.h new/libsolv-0.7.36/win32/unistd.h --- old/libsolv-0.7.35/win32/unistd.h 2023-07-19 11:52:42.000000000 +0200 +++ new/libsolv-0.7.36/win32/unistd.h 2026-02-03 13:20:07.000000000 +0100 @@ -1,4 +1,6 @@ #ifndef _UNISTD_H #define _UNISTD_H +#include <getopt.h> + #endif \ No newline at end of file
