Hello community, here is the log from the commit of package libsolv for openSUSE:Factory checked in at 2019-09-02 13:23:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libsolv (Old) and /work/SRC/openSUSE:Factory/.libsolv.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libsolv" Mon Sep 2 13:23:25 2019 rev:73 rq:727216 version:0.7.6 Changes: -------- --- /work/SRC/openSUSE:Factory/libsolv/libsolv.changes 2019-07-29 17:24:13.978350150 +0200 +++ /work/SRC/openSUSE:Factory/.libsolv.new.7948/libsolv.changes 2019-09-02 13:23:27.365333816 +0200 @@ -1,0 +2,8 @@ +Wed Aug 28 14:49:19 CEST 2019 - [email protected] + +- Fix repository priority handling for multiversion packages +- Make code compatible with swig 4.0, remove obj0 instances +- repo2solv: support zchunk compressed data +- bump version to 0.7.6 + +------------------------------------------------------------------- Old: ---- libsolv-0.7.5.tar.bz2 New: ---- libsolv-0.7.6.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libsolv.spec ++++++ --- /var/tmp/diff_new_pack.5MYkJB/_old 2019-09-02 13:23:27.857333723 +0200 +++ /var/tmp/diff_new_pack.5MYkJB/_new 2019-09-02 13:23:27.857333723 +0200 @@ -52,7 +52,7 @@ %bcond_with zypp Name: libsolv -Version: 0.7.5 +Version: 0.7.6 Release: 0 Summary: Package dependency solver using a satisfiability algorithm License: BSD-3-Clause ++++++ libsolv-0.7.5.tar.bz2 -> libsolv-0.7.6.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/NEWS new/libsolv-0.7.6/NEWS --- old/libsolv-0.7.5/NEWS 2019-06-12 13:45:06.000000000 +0200 +++ new/libsolv-0.7.6/NEWS 2019-08-28 15:02:38.000000000 +0200 @@ -2,6 +2,16 @@ This file contains the major changes between libsolv versions: +Version 0.7.6 +- selected bug fixes: + * fix repository priority handling for multiversion packages + * better support of inverval deps in pool_match_dep() + * support src rpms that have non-empty provides +- new features + * bindings: add get_disabled_list() and set_disabled_list() + * bindings: add whatcontainsdep() + * bindings: make the selection filters return the self object + Version 0.7.5 - selected bug fixes: * fix favorq leaking between solver runs if the solver is reused diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/TODO_1.0 new/libsolv-0.7.6/TODO_1.0 --- old/libsolv-0.7.5/TODO_1.0 2019-04-08 13:29:14.000000000 +0200 +++ new/libsolv-0.7.6/TODO_1.0 2019-08-02 11:44:38.000000000 +0200 @@ -9,6 +9,10 @@ - write more manpages +- forcebest pruning is not optimal: it should keep multiple packages + with the same version instead of reducing to just one package for + each name + IDEAS: drop SEARCH_FILES and add SEARCH_BASENAME instead? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/VERSION.cmake new/libsolv-0.7.6/VERSION.cmake --- old/libsolv-0.7.5/VERSION.cmake 2019-06-12 13:45:06.000000000 +0200 +++ new/libsolv-0.7.6/VERSION.cmake 2019-08-28 15:02:38.000000000 +0200 @@ -49,5 +49,5 @@ SET(LIBSOLV_MAJOR "0") SET(LIBSOLV_MINOR "7") -SET(LIBSOLV_PATCH "5") +SET(LIBSOLV_PATCH "6") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/bindings/solv.i new/libsolv-0.7.6/bindings/solv.i --- old/libsolv-0.7.5/bindings/solv.i 2019-07-09 14:50:01.000000000 +0200 +++ new/libsolv-0.7.6/bindings/solv.i 2019-08-13 09:49:46.000000000 +0200 @@ -629,10 +629,8 @@ %typemap(out) disown_helper { #if defined(SWIGRUBY) SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_Pool, SWIG_POINTER_DISOWN | 0 ); -#elif defined(SWIGPYTHON) && SWIG_VERSION < 0x040000 - SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Pool, SWIG_POINTER_DISOWN | 0 ); #elif defined(SWIGPYTHON) - SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pool, SWIG_POINTER_DISOWN | 0 ); + SWIG_ConvertPtr($self, &argp1,SWIGTYPE_p_Pool, SWIG_POINTER_DISOWN | 0 ); #elif defined(SWIGPERL) SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Pool, SWIG_POINTER_DISOWN | 0 ); #elif defined(SWIGTCL) @@ -656,7 +654,7 @@ %define returnself(func) #if defined(SWIGPYTHON) %typemap(out) void func { - $result = obj0; + $result = $self; Py_INCREF($result); } #elif defined(SWIGPERL) @@ -2011,6 +2009,14 @@ pool_flush_namespaceproviders($self, ns, evr); } + %typemap(out) Queue whatcontainsdep Queue2Array(XSolvable *, 1, new_XSolvable(arg1, id)); + %newobject whatcontainsdep; + Queue whatcontainsdep(Id keyname, DepId dep, Id marker = -1) { + Queue q; + queue_init(&q); + pool_whatcontainsdep($self, keyname, dep, &q, marker); + return q; + } %typemap(out) Queue whatmatchesdep Queue2Array(XSolvable *, 1, new_XSolvable(arg1, id)); %newobject whatmatchesdep; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/doc/libsolv-bindings.txt new/libsolv-0.7.6/doc/libsolv-bindings.txt --- old/libsolv-0.7.5/doc/libsolv-bindings.txt 2019-07-01 13:14:18.000000000 +0200 +++ new/libsolv-0.7.6/doc/libsolv-bindings.txt 2019-07-29 06:34:22.000000000 +0200 @@ -495,6 +495,20 @@ Filter list of solvables by repo priority, architecture and version. + Solvable *whatcontainsdep(Id keyname, DepId dep, Id marker = -1) + my @solvables = $pool->whatcontainsdep($keyname, $dep) + solvables = pool.whatcontainsdep(keyname, dep) + solvables = pool.whatcontainsdep(keyname, dep) + +Return all solvables for which keyname contains the dependency. + + Solvable *whatmatchesdep(Id keyname, DepId dep, Id marker = -1) + my @solvables = $pool->whatmatchesdep($keyname, $sdep) + solvables = pool.whatmatchesdep(keyname, dep) + solvables = pool.whatmatchesdep(keyname, dep) + +Return all solvables that have dependencies in keyname that match the dependency. + Solvable *whatmatchessolvable(Id keyname, Solvable solvable, Id marker = -1) my @solvables = $pool->whatmatchessolvable($keyname, $solvable) solvables = pool.whatmatchessolvable(keyname, solvable) @@ -836,7 +850,7 @@ The id of this dependency. -== Methods == +=== METHODS === Dep Rel(int flags, DepId evrid, bool create = 1) my $reldep = $dep->Rel($flags, $evrdep); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/ext/pool_parserpmrichdep.c new/libsolv-0.7.6/ext/pool_parserpmrichdep.c --- old/libsolv-0.7.5/ext/pool_parserpmrichdep.c 2018-10-01 11:09:18.000000000 +0200 +++ new/libsolv-0.7.6/ext/pool_parserpmrichdep.c 2019-07-16 13:24:18.000000000 +0200 @@ -27,13 +27,23 @@ { NULL, 0, 0}, }; +static inline const char * +skipnonwhite(const char *p) +{ + int bl = 0; + while (*p && !(*p == ' ' || *p == ',' || (*p == ')' && bl-- <= 0))) + if (*p++ == '(') + bl++; + return p; +} + static Id parseRichDep(Pool *pool, const char **depp, Id chainfl) { const char *p = *depp; const char *n; Id id, evr; - int fl, bl; + int fl; struct RichOpComp *op; if (!chainfl && *p++ != '(') @@ -51,10 +61,7 @@ else { n = p; - bl = 0; - while (*p && !(*p == ' ' || *p == ',' || (*p == ')' && bl-- <= 0))) - if (*p++ == '(') - bl++; + p = skipnonwhite(p); if (n == p) return 0; id = pool_strn2id(pool, n, p - n, 1); @@ -79,10 +86,7 @@ while (*p == ' ') p++; n = p; - bl = 0; - while (*p && !(*p == ' ' || *p == ',' || (*p == ')' && bl-- <= 0))) - if (*p++ == '(') - bl++; + p = skipnonwhite(p); if (p - n > 2 && n[0] == '0' && n[1] == ':') n += 2; /* strip zero epoch */ if (n == p) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/package/libsolv.changes new/libsolv-0.7.6/package/libsolv.changes --- old/libsolv-0.7.5/package/libsolv.changes 2019-07-12 14:14:36.000000000 +0200 +++ new/libsolv-0.7.6/package/libsolv.changes 2019-08-28 15:02:38.000000000 +0200 @@ -1,4 +1,12 @@ ------------------------------------------------------------------- +Wed Aug 28 14:49:19 CEST 2019 - [email protected] + +- Fix repository priority handling for multiversion packages +- Make code compatible with swig 4.0, remove obj0 instances +- repo2solv: support zchunk compressed data +- bump version to 0.7.6 + +------------------------------------------------------------------- Wed Jul 10 07:48:10 UTC 2019 - Martin Liška <[email protected]> - Add -ffat-lto-objects to $optflags as the package provides diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/src/pool.c new/libsolv-0.7.6/src/pool.c --- old/libsolv-0.7.5/src/pool.c 2019-07-01 14:55:30.000000000 +0200 +++ new/libsolv-0.7.6/src/pool.c 2019-07-15 16:59:24.000000000 +0200 @@ -814,6 +814,23 @@ return pool_match_flags_evr(pool, pflags, pevr, flags, evr); } + +static int +is_interval_dep(Pool *pool, Id d1, Id d2) +{ + Reldep *rd1, *rd2; + if (!ISRELDEP(d1) || !ISRELDEP(d2)) + return 0; + rd1 = GETRELDEP(pool, d1); + rd2 = GETRELDEP(pool, d2); + if (rd1->name != rd2->name || rd1->flags >= 8 || rd2->flags >= 8) + return 0; + if (((rd1->flags ^ rd2->flags) & (REL_LT|REL_GT)) != (REL_LT|REL_GT)) + return 0; + return 1; +} + + /* match two dependencies (d1 = provider) */ int @@ -830,6 +847,8 @@ rd1 = GETRELDEP(pool, d1); if (rd1->flags == REL_AND || rd1->flags == REL_OR || rd1->flags == REL_WITH || rd1->flags == REL_WITHOUT || rd1->flags == REL_COND || rd1->flags == REL_UNLESS) { + if (rd1->flags == REL_WITH && is_interval_dep(pool, rd1->name, rd1->evr)) + return pool_match_dep(pool, rd1->name, d2) && pool_match_dep(pool, rd1->evr, d2); if (pool_match_dep(pool, rd1->name, d2)) return 1; if ((rd1->flags == REL_COND || rd1->flags == REL_UNLESS) && ISRELDEP(rd1->evr)) @@ -849,6 +868,8 @@ rd2 = GETRELDEP(pool, d2); if (rd2->flags == REL_AND || rd2->flags == REL_OR || rd2->flags == REL_WITH || rd2->flags == REL_WITHOUT || rd2->flags == REL_COND || rd2->flags == REL_UNLESS) { + if (rd2->flags == REL_WITH && is_interval_dep(pool, rd2->name, rd2->evr)) + return pool_match_dep(pool, d1, rd2->name) && pool_match_dep(pool, d1, rd2->evr); if (pool_match_dep(pool, d1, rd2->name)) return 1; if ((rd2->flags == REL_COND || rd2->flags == REL_UNLESS) && ISRELDEP(rd2->evr)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/src/repodata.c new/libsolv-0.7.6/src/repodata.c --- old/libsolv-0.7.5/src/repodata.c 2019-04-11 16:48:30.000000000 +0200 +++ new/libsolv-0.7.6/src/repodata.c 2019-08-28 14:51:03.000000000 +0200 @@ -211,11 +211,13 @@ cid = schematahash[h]; if (cid) { - if (!memcmp(data->schemadata + data->schemata[cid], schema, len * sizeof(Id))) + if ((data->schemata[cid] + len <= data->schemadatalen) && + !memcmp(data->schemadata + data->schemata[cid], schema, len * sizeof(Id))) return cid; /* cache conflict, do a slow search */ for (cid = 1; cid < data->nschemata; cid++) - if (!memcmp(data->schemadata + data->schemata[cid], schema, len * sizeof(Id))) + if ((data->schemata[cid] + len <= data->schemadatalen) && + !memcmp(data->schemadata + data->schemata[cid], schema, len * sizeof(Id))) return cid; } /* a new one */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.7.5/src/solver.c new/libsolv-0.7.6/src/solver.c --- old/libsolv-0.7.5/src/solver.c 2019-06-13 16:11:37.000000000 +0200 +++ new/libsolv-0.7.6/src/solver.c 2019-08-02 16:34:26.000000000 +0200 @@ -1720,12 +1720,27 @@ { if (specialupdaters && (d = specialupdaters[i - installed->start]) != 0) { + int j; /* special multiversion handling, make sure best version is chosen */ if (rr->p == i && solv->decisionmap[i] >= 0) queue_push(dq, i); while ((p = pool->whatprovidesdata[d++]) != 0) if (solv->decisionmap[p] >= 0) queue_push(dq, p); + for (j = 0; j < dq->count; j++) + { + Id p2 = dq->elements[j]; + if (pool->solvables[p2].repo != installed) + continue; + d = specialupdaters[i - installed->start]; + while ((p = pool->whatprovidesdata[d++]) != 0) + { + if (solv->decisionmap[p] >= 0 || pool->solvables[p].repo == installed) + continue; + if (solvable_identical(pool->solvables + p, pool->solvables + p2)) + queue_push(dq, p); /* identical to installed, put it on the list so we have a repo prio */ + } + } if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start]) prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq); if (dq->count)
