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 - mls(a)suse.de
+
+- 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 - mls(a)suse.de
+
+- 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 <mliska(a)suse.cz>
- 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)