Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libsolv for openSUSE:Factory checked 
in at 2025-06-06 22:35:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libsolv (Old)
 and      /work/SRC/openSUSE:Factory/.libsolv.new.19631 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libsolv"

Fri Jun  6 22:35:20 2025 rev:99 rq:1282808 version:0.7.33

Changes:
--------
--- /work/SRC/openSUSE:Factory/libsolv/libsolv.changes  2025-04-04 
17:29:20.908616916 +0200
+++ /work/SRC/openSUSE:Factory/.libsolv.new.19631/libsolv.changes       
2025-06-06 22:35:28.813981553 +0200
@@ -1,0 +2,9 @@
+Tue Jun  3 13:25:39 CEST 2025 - m...@suse.de
+
+- improve transaction ordering by allowing more uninst->uninst
+  edges [bsc#1243457]
+- implement color filtering when adding update targets
+- support orderwithrequires dependencies in susedata.xml
+- bump version to 0.7.33
+
+-------------------------------------------------------------------

Old:
----
  libsolv-0.7.32.tar.bz2

New:
----
  libsolv-0.7.33.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libsolv.spec ++++++
--- /var/tmp/diff_new_pack.Q1RjFz/_old  2025-06-06 22:35:30.086034008 +0200
+++ /var/tmp/diff_new_pack.Q1RjFz/_new  2025-06-06 22:35:30.102034667 +0200
@@ -72,7 +72,7 @@
 %bcond_with zypp
 
 Name:           libsolv
-Version:        0.7.32
+Version:        0.7.33
 Release:        0
 Summary:        Package dependency solver using a satisfiability algorithm
 License:        BSD-3-Clause

++++++ libsolv-0.7.32.tar.bz2 -> libsolv-0.7.33.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/NEWS new/libsolv-0.7.33/NEWS
--- old/libsolv-0.7.32/NEWS     2025-04-03 13:20:08.000000000 +0200
+++ new/libsolv-0.7.33/NEWS     2025-06-03 13:50:07.000000000 +0200
@@ -1,6 +1,14 @@
 
 This file contains the major changes between libsolv versions:
 
+Version 0.7.33
+- selected bug fixes:
+  * improve transaction ordering by allowing more uninst->uninst
+    edges
+  * implement color filtering when adding update targets
+- new features:
+  * support orderwithrequires dependencies in susedata.xml
+
 Version 0.7.32
 - build both static and dynamic libraries on new suse distros
 - require cmake >= 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/VERSION.cmake 
new/libsolv-0.7.33/VERSION.cmake
--- old/libsolv-0.7.32/VERSION.cmake    2025-04-03 13:20:08.000000000 +0200
+++ new/libsolv-0.7.33/VERSION.cmake    2025-06-03 13:50:07.000000000 +0200
@@ -49,5 +49,5 @@
 
 SET(LIBSOLV_MAJOR "0")
 SET(LIBSOLV_MINOR "7")
-SET(LIBSOLV_PATCH "32")
+SET(LIBSOLV_PATCH "33")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/doc/CMakeLists.txt 
new/libsolv-0.7.33/doc/CMakeLists.txt
--- old/libsolv-0.7.32/doc/CMakeLists.txt       2023-07-19 11:52:42.000000000 
+0200
+++ new/libsolv-0.7.33/doc/CMakeLists.txt       2025-04-15 13:20:08.000000000 
+0200
@@ -42,6 +42,10 @@
 SET (libsolv_MANPAGES1 ${libsolv_MANPAGES1} appdata2solv.1)
 ENDIF (ENABLE_APPDATA)
 
+IF (ENABLE_APK)
+SET (libsolv_MANPAGES1 ${libsolv_MANPAGES1} apk2solv.1)
+ENDIF (ENABLE_APK)
+
 # prepend gen directory
 STRING(REGEX REPLACE "([^;]+)" "gen/\\1" libsolv_MANPAGES1 
"${libsolv_MANPAGES1}")
 STRING(REGEX REPLACE "([^;]+)" "gen/\\1" libsolv_MANPAGES3 
"${libsolv_MANPAGES3}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/doc/Makefile.gen 
new/libsolv-0.7.33/doc/Makefile.gen
--- old/libsolv-0.7.32/doc/Makefile.gen 2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.33/doc/Makefile.gen 2025-04-15 13:20:08.000000000 +0200
@@ -7,7 +7,7 @@
 
 man1:  mergesolv.1 dumpsolv.1 installcheck.1 testsolv.1 rpmdb2solv.1 
rpms2solv.1 \
        rpmmd2solv.1 repomdxml2solv.1 updateinfoxml2solv.1 deltainfoxml2solv.1 \
-       helix2solv.1 susetags2solv.1 comps2solv.1 deb2solv.1 mdk2solv.1 \
+       helix2solv.1 susetags2solv.1 comps2solv.1 deb2solv.1 mdk2solv.1 
apk2solv.1 \
        archpkgs2solv.1 archrepo2solv.1 appdata2solv.1 repo2solv.1 solv.1
 
 html: libsolv.html libsolv-bindings.html libsolv-constantids.html 
libsolv-history.html libsolv-pool.html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/doc/apk2solv.txt 
new/libsolv-0.7.33/doc/apk2solv.txt
--- old/libsolv-0.7.32/doc/apk2solv.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/libsolv-0.7.33/doc/apk2solv.txt 2025-04-15 13:20:08.000000000 +0200
@@ -0,0 +1,52 @@
+apk2solv(1)
+============
+:man manual: LIBSOLV
+:man source: libsolv
+
+
+Name
+----
+apk2solv - convert one or more apk package files into a solv file
+
+Synopsis
+--------
+*apk2solv* ['OPTIONS'] 'PKG1.apk' ...
+
+Description
+-----------
+The apk2solv tool converts the meta data from one or more
+Apk packages into the solv file written to standard output.
+
+*-m* 'MANIFESTFILE'::
+Read the rpm file names from the specified 'MANIFESTFILE'. You can
+use *-* to read the manifest from standard input.
+
+*-0*::
+Use a null byte as line terminator for manifest files instead of
+a newline. This is useful if the file names can contain newlines.
+See also the *-print0* option in *find*.
+
+*-C*::
+Add the apk checksum to the meta data.
+
+*-r*::
+Enable repository metadata mode. The specified file is not an
+apk package, but a file containing repository metadata (e.g.
+'APKINDEX.tar.gz').
+
+*-l*::
+Enable local database mode. The specified file is not an
+apk package, but a database file containing information about
+the installed packages (e.g. '/lib/apk/db/installed').
+
+See Also
+--------
+apk(8)
+
+Author
+------
+Michael Schroeder <m...@suse.de>
+
+////
+vim: syntax=asciidoc
+////
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/doc/gen/apk2solv.1 
new/libsolv-0.7.33/doc/gen/apk2solv.1
--- old/libsolv-0.7.32/doc/gen/apk2solv.1       1970-01-01 01:00:00.000000000 
+0100
+++ new/libsolv-0.7.33/doc/gen/apk2solv.1       2025-04-15 13:20:08.000000000 
+0200
@@ -0,0 +1,76 @@
+'\" t
+.\"     Title: apk2solv
+.\"    Author: [see the "Author" section]
+.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+.\"      Date: 04/15/2025
+.\"    Manual: LIBSOLV
+.\"    Source: libsolv
+.\"  Language: English
+.\"
+.TH "APK2SOLV" "1" "04/15/2025" "libsolv" "LIBSOLV"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+apk2solv \- convert one or more apk package files into a solv file
+.SH "SYNOPSIS"
+.sp
+\fBapk2solv\fR [\fIOPTIONS\fR] \fIPKG1\&.apk\fR \&...
+.SH "DESCRIPTION"
+.sp
+The apk2solv tool converts the meta data from one or more Apk packages into 
the solv file written to standard output\&.
+.PP
+\fB\-m\fR \fIMANIFESTFILE\fR
+.RS 4
+Read the rpm file names from the specified
+\fIMANIFESTFILE\fR\&. You can use
+\fB\-\fR
+to read the manifest from standard input\&.
+.RE
+.PP
+\fB\-0\fR
+.RS 4
+Use a null byte as line terminator for manifest files instead of a newline\&. 
This is useful if the file names can contain newlines\&. See also the
+\fB\-print0\fR
+option in
+\fBfind\fR\&.
+.RE
+.PP
+\fB\-C\fR
+.RS 4
+Add the apk checksum to the meta data\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Enable repository metadata mode\&. The specified file is not an apk package, 
but a file containing repository metadata (e\&.g\&.
+\fIAPKINDEX\&.tar\&.gz\fR)\&.
+.RE
+.PP
+\fB\-l\fR
+.RS 4
+Enable local database mode\&. The specified file is not an apk package, but a 
database file containing information about the installed packages (e\&.g\&.
+\fI/lib/apk/db/installed\fR)\&.
+.RE
+.SH "SEE ALSO"
+.sp
+apk(8)
+.SH "AUTHOR"
+.sp
+Michael Schroeder <mls@suse\&.de>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/ext/repo_repomdxml.c 
new/libsolv-0.7.33/ext/repo_repomdxml.c
--- old/libsolv-0.7.32/ext/repo_repomdxml.c     2023-07-19 11:52:42.000000000 
+0200
+++ new/libsolv-0.7.33/ext/repo_repomdxml.c     2025-06-03 13:40:07.000000000 
+0200
@@ -77,6 +77,9 @@
   <kewwords>
     <k>...</k>
   </keywords>
+  <tags>
+    <updates cpeid="cpe://o:opensuse_project:opensuse:11">openSUSE 
11.0</updates>
+  </tags>
 </suseinfo>
 
 */
@@ -147,7 +150,7 @@
 
   struct solv_xmlparser xmlp;
 
-  int timestamp;
+  unsigned int timestamp;
   /* handles for collection
      structures */
   /* repo updates */
@@ -252,7 +255,7 @@
   switch (state)
     {
     case STATE_REPOMD:
-      if (pd->timestamp > 0)
+      if (pd->timestamp)
         repodata_set_num(pd->data, SOLVID_META, REPOSITORY_TIMESTAMP, 
pd->timestamp);
       break;
     case STATE_DATA:
@@ -278,7 +281,7 @@
          * of all resources to save it as the time
          * the metadata was generated
          */
-        int timestamp = atoi(content);
+        unsigned int timestamp = strtoull(content, 0, 10);
        if (timestamp)
           repodata_set_num(pd->data, pd->rdhandle, 
REPOSITORY_REPOMD_TIMESTAMP, timestamp);
         if (timestamp > pd->timestamp)
@@ -287,8 +290,8 @@
       }
     case STATE_EXPIRE:
       {
-        int expire = atoi(content);
-       if (expire > 0)
+       unsigned int expire = strtoull(content, 0, 10);
+       if (expire)
          repodata_set_num(pd->data, SOLVID_META, REPOSITORY_EXPIRE, expire);
         break;
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/ext/repo_rpmdb.c 
new/libsolv-0.7.33/ext/repo_rpmdb.c
--- old/libsolv-0.7.32/ext/repo_rpmdb.c 2024-09-16 15:50:06.000000000 +0200
+++ new/libsolv-0.7.33/ext/repo_rpmdb.c 2025-04-10 15:50:07.000000000 +0200
@@ -1090,44 +1090,43 @@
 }
 
 static void
-set_description_author(Repodata *data, Id handle, char *str)
+set_description_author(Repodata *data, Id handle, const char *str)
 {
-  char *aut, *p;
+  const char *aut;
   for (aut = str; (aut = strchr(aut, '\n')) != 0; aut++)
     if (!strncmp(aut, "\nAuthors:\n--------\n", 19))
       break;
   if (aut)
     {
       /* oh my, found SUSE special author section */
-      int l = aut - str;
-      str = solv_strdup(str);
-      aut = str + l;
-      str[l] = 0;
-      while (l > 0 && str[l - 1] == '\n')
-       str[--l] = 0;
+      size_t l = aut - str;
+      char *p, *ap, *s = solv_strdup(str);
+      p = s + l + 19;  /* author block starts here */
+      s[l] = 0;
+      while (l > 0 && s[l - 1] == '\n')
+       s[--l] = 0;
       if (l)
-       setutf8string(data, handle, SOLVABLE_DESCRIPTION, str);
-      p = aut + 19;
-      aut = str;       /* copy over */
+       setutf8string(data, handle, SOLVABLE_DESCRIPTION, s);
       while (*p == ' ' || *p == '\n')
        p++;
+      ap = s;  /* copy over */
       while (*p)
        {
          if (*p == '\n')
            {
-             *aut++ = *p++;
+             *ap++ = *p++;
              while (*p == ' ')
                p++;
              continue;
            }
-         *aut++ = *p++;
+         *ap++ = *p++;
        }
-      while (aut != str && aut[-1] == '\n')
-       aut--;
-      *aut = 0;
-      if (*str)
-       setutf8string(data, handle, SOLVABLE_AUTHORS, str);
-      free(str);
+      while (ap != s && ap[-1] == '\n')
+       ap--;
+      *ap = 0;
+      if (*s)
+       setutf8string(data, handle, SOLVABLE_AUTHORS, s);
+      free(s);
     }
   else if (*str)
     setutf8string(data, handle, SOLVABLE_DESCRIPTION, str);
@@ -1198,7 +1197,7 @@
   if (data)
     {
       Id handle;
-      char *str;
+      const char *str;
       unsigned int u32;
       unsigned long long u64;
 
@@ -1231,6 +1230,14 @@
          chksum = headbinary(rpmhead, TAG_SIGMD5, &chksumsize);
          if (chksum && chksumsize == 16)
            repodata_set_bin_checksum(data, handle, SOLVABLE_PKGID, 
REPOKEY_TYPE_MD5, chksum);
+         else
+           {
+             unsigned char md5[16];
+             str = headstring(rpmhead, TAG_SHA256HEADER);
+             /* truncate sh256 to md5 */
+             if (str && strlen(str) == 64 && solv_hex2bin(&str, md5, 16) == 16)
+               repodata_set_bin_checksum(data, handle, SOLVABLE_PKGID, 
REPOKEY_TYPE_MD5, md5);
+           }
        }
       if ((flags & RPM_ADD_WITH_HDRID) != 0)
        {
@@ -2022,8 +2029,8 @@
     {
       if (!headfromfp(&state, rpm, fp, lead + 96, sigcnt, sigdsize, sigpad, 
chksumh, leadsigchksumh))
        {
-      solv_chksum_free(leadsigchksumh, 0);
-      solv_chksum_free(chksumh, 0);
+         solv_chksum_free(leadsigchksumh, 0);
+         solv_chksum_free(chksumh, 0);
          fclose(fp);
          return 0;
        }
@@ -2037,6 +2044,12 @@
              pkgidtype = REPOKEY_TYPE_MD5;
              memcpy(pkgid, chksum, 16);
            }
+         else
+           {
+             const char *str = headstring(state.rpmhead, TAG_SHA256HEADER);
+             if (str && strlen(str) == 64 && solv_hex2bin(&str, pkgid, 16) == 
16)
+               pkgidtype = REPOKEY_TYPE_MD5;
+           }
        }
       if ((flags & RPM_ADD_WITH_HDRID) != 0)
        {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/ext/repo_rpmmd.c 
new/libsolv-0.7.33/ext/repo_rpmmd.c
--- old/libsolv-0.7.32/ext/repo_rpmmd.c 2024-03-27 11:00:05.000000000 +0100
+++ new/libsolv-0.7.33/ext/repo_rpmmd.c 2025-06-03 13:40:07.000000000 +0200
@@ -94,6 +94,7 @@
   STATE_SUGGESTS,
   STATE_ENHANCES,
   STATE_FRESHENS,
+  STATE_ORDERWITHREQUIRES,
   STATE_SOURCERPM,
   STATE_HEADERRANGE,
   STATE_BUILDHOST,
@@ -107,6 +108,7 @@
   STATE_SUGGESTSENTRY,
   STATE_ENHANCESENTRY,
   STATE_FRESHENSENTRY,
+  STATE_ORDERWITHREQUIRESENTRY,
 
   STATE_FILE,
 
@@ -195,6 +197,7 @@
   { STATE_SOLVABLE,    "rpm:suggests",    STATE_SUGGESTS,     0 },
   { STATE_SOLVABLE,    "rpm:enhances",    STATE_ENHANCES,     0 },
   { STATE_SOLVABLE,    "rpm:freshens",    STATE_FRESHENS,     0 },
+  { STATE_SOLVABLE,    "rpm:orderwithrequires", STATE_ORDERWITHREQUIRES, 0 },
   { STATE_SOLVABLE,    "rpm:sourcerpm",   STATE_SOURCERPM,    1 },
   { STATE_SOLVABLE,    "rpm:header-range", STATE_HEADERRANGE, 0 },
   { STATE_SOLVABLE,    "rpm:buildhost",   STATE_BUILDHOST,    1 },
@@ -214,6 +217,7 @@
   { STATE_SUGGESTS,    "rpm:entry",       STATE_SUGGESTSENTRY, 0 },
   { STATE_ENHANCES,    "rpm:entry",       STATE_ENHANCESENTRY, 0 },
   { STATE_FRESHENS,    "rpm:entry",       STATE_FRESHENSENTRY, 0 },
+  { STATE_ORDERWITHREQUIRES, "rpm:entry", STATE_ORDERWITHREQUIRESENTRY, 0 },
 
   { STATE_INCLUDES,    "item",            STATE_INCLUDESENTRY, 0 },
   { STATE_EXTENDS,     "item",            STATE_EXTENDSENTRY,  0 },
@@ -229,6 +233,7 @@
   char *kind;
   Solvable *solvable;
   Offset freshens;
+  Offset orderwithrequires;
 
   struct solv_xmlparser xmlp;
   struct joindata jd;
@@ -670,6 +675,8 @@
          one.
       */
       pd->extending = 0;
+      pd->freshens = 0;
+      pd->orderwithrequires = 0;
       if ((pkgid = solv_xmlparser_find_attr("pkgid", atts)) != NULL)
         {
          unsigned char chk[256];
@@ -704,7 +711,6 @@
          handle = repo_add_solvable(pd->repo);
          if (!pd->first)
            pd->first = handle;
-          pd->freshens = 0;
         }
       pd->handle = handle;
       pd->solvable = pool_id2solvable(pool, handle);
@@ -779,6 +785,12 @@
     case STATE_FRESHENSENTRY:
       pd->freshens = adddep(pool, pd, pd->freshens, atts, 0);
       break;
+    case STATE_ORDERWITHREQUIRES:
+      pd->orderwithrequires = 0;
+      break;
+    case STATE_ORDERWITHREQUIRESENTRY:
+      pd->orderwithrequires = adddep(pool, pd, pd->orderwithrequires, atts, 0);
+      break;
     case STATE_EULA:
     case STATE_SUMMARY:
     case STATE_CATEGORY:
@@ -826,10 +838,10 @@
       break;
     case STATE_TIME:
       {
-        unsigned int t;
+        unsigned int ti;
         str = solv_xmlparser_find_attr("build", atts);
-        if (str && (t = atoi(str)) != 0)
-          repodata_set_num(pd->data, handle, SOLVABLE_BUILDTIME, t);
+        if (str && (ti = strtoull(str, 0, 10)) != 0)
+          repodata_set_num(pd->data, handle, SOLVABLE_BUILDTIME, ti);
        break;
       }
     case STATE_SIZE:
@@ -842,7 +854,7 @@
       {
         unsigned int end;
         str = solv_xmlparser_find_attr("end", atts);
-       if (str && (end = atoi(str)) != 0)
+       if (str && (end = strtoull(str, 0, 10)) != 0)
          repodata_set_num(pd->data, handle, SOLVABLE_HEADEREND, end);
        break;
       }
@@ -931,6 +943,12 @@
   switch (state)
     {
     case STATE_SOLVABLE:
+      if (pd->orderwithrequires)
+       {
+         while (repo->idarraydata[pd->orderwithrequires])
+           repodata_add_idarray(pd->data, s - pool->solvables, 
SOLVABLE_ORDERWITHREQUIRES, repo->idarraydata[pd->orderwithrequires++]);
+         pd->orderwithrequires = 0;
+       }
       if (pd->extending)
        {
          pd->solvable = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/ext/repo_susetags.c 
new/libsolv-0.7.33/ext/repo_susetags.c
--- old/libsolv-0.7.32/ext/repo_susetags.c      2024-03-27 11:00:05.000000000 
+0100
+++ new/libsolv-0.7.33/ext/repo_susetags.c      2025-06-03 13:40:07.000000000 
+0200
@@ -925,9 +925,9 @@
            continue;
           case CTAG('=', 'T', 'i', 'm'):
            {
-             unsigned int t = atoi(line + 6);
-             if (t)
-               repodata_set_num(data, handle, SOLVABLE_BUILDTIME, t);
+             unsigned int ti = strtoull(line + 6, 0, 10);
+             if (ti)
+               repodata_set_num(data, handle, SOLVABLE_BUILDTIME, ti);
            }
            continue;
           case CTAG('=', 'K', 'w', 'd'):
@@ -1052,7 +1052,7 @@
            if (split(line + 6, sp, 3) == 2)
              {
                /* we ignore the start value */
-               unsigned int end = (unsigned int)atoi(sp[1]);
+               unsigned int end = strtoull(sp[1], 0, 10);
                if (end)
                  repodata_set_num(data, handle, SOLVABLE_HEADEREND, end);
              }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/ext/repo_testcase.c 
new/libsolv-0.7.33/ext/repo_testcase.c
--- old/libsolv-0.7.32/ext/repo_testcase.c      2024-09-16 15:50:06.000000000 
+0200
+++ new/libsolv-0.7.33/ext/repo_testcase.c      2025-06-03 13:40:07.000000000 
+0200
@@ -545,7 +545,7 @@
   Repodata *data;
   Solvable *s;
   char *sp[5];
-  unsigned int t;
+  unsigned int ti;
   int intag;
   char *filelist = 0;
   int afilelist = 0;
@@ -640,14 +640,14 @@
          s->vendor = pool_str2id(pool, line + 6, 1);
          break;
        case 'T' << 16 | 'i' << 8 | 'm':
-         t = atoi(line + 6);
-         if (t)
-           repodata_set_num(data, s - pool->solvables, SOLVABLE_BUILDTIME, t);
+         ti = strtoull(line + 6, 0, 10);
+         if (ti)
+           repodata_set_num(data, s - pool->solvables, SOLVABLE_BUILDTIME, ti);
          break;
        case 'I' << 16 | 't' << 8 | 'm':
-         t = atoi(line + 6);
-         if (t)
-           repodata_set_num(data, s - pool->solvables, SOLVABLE_INSTALLTIME, 
t);
+         ti = strtoull(line + 6, 0, 10);
+         if (ti)
+           repodata_set_num(data, s - pool->solvables, SOLVABLE_INSTALLTIME, 
ti);
          break;
        case 'R' << 16 | 'e' << 8 | 'q':
          s->requires = adddep(repo, s->requires, line + 6, 
-SOLVABLE_PREREQMARKER);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/ext/solv_xfopen.h 
new/libsolv-0.7.33/ext/solv_xfopen.h
--- old/libsolv-0.7.32/ext/solv_xfopen.h        2024-11-28 14:00:06.000000000 
+0100
+++ new/libsolv-0.7.33/ext/solv_xfopen.h        2025-04-14 15:20:07.000000000 
+0200
@@ -8,6 +8,15 @@
 #ifndef SOLV_XFOPEN_H
 #define SOLV_XFOPEN_H
 
+#include <stddef.h>
+
+#ifdef _WIN32
+  #include <BaseTsd.h>
+  typedef SSIZE_T ssize_t;
+#else
+  #include <unistd.h>
+#endif
+
 extern FILE *solv_xfopen(const char *fn, const char *mode);
 extern FILE *solv_xfopen_fd(const char *fn, int fd, const char *mode);
 extern FILE *solv_xfopen_buf(const char *fn, char **bufp, size_t *buflp, const 
char *mode);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/package/libsolv.changes 
new/libsolv-0.7.33/package/libsolv.changes
--- old/libsolv-0.7.32/package/libsolv.changes  2025-04-03 13:20:08.000000000 
+0200
+++ new/libsolv-0.7.33/package/libsolv.changes  2025-06-03 13:50:07.000000000 
+0200
@@ -1,4 +1,13 @@
 -------------------------------------------------------------------
+Tue Jun  3 13:25:39 CEST 2025 - m...@suse.de
+
+- improve transaction ordering by allowing more uninst->uninst
+  edges [bsc#1243457]
+- implement color filtering when adding update targets
+- support orderwithrequires dependencies in susedata.xml
+- bump version to 0.7.33
+
+-------------------------------------------------------------------
 Thu Apr  3 13:07:20 CEST 2025 - m...@suse.de
 
 - build both static and dynamic libraries on new suse distros
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/src/chksum.c 
new/libsolv-0.7.33/src/chksum.c
--- old/libsolv-0.7.32/src/chksum.c     2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.33/src/chksum.c     2025-05-14 14:10:07.000000000 +0200
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <strings.h>
 #include <unistd.h>
 
 #include "pool.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/src/decision.c 
new/libsolv-0.7.33/src/decision.c
--- old/libsolv-0.7.32/src/decision.c   2024-04-10 12:40:06.000000000 +0200
+++ new/libsolv-0.7.33/src/decision.c   2025-05-16 10:20:07.000000000 +0200
@@ -607,7 +607,7 @@
       info = solv->decisionq_why.elements[ii];
       if (info > 0)
        reason = SOLVER_REASON_UNIT_RULE;
-      else if (info <= 0)
+      else
        {
          info = -info;
          reason = solv->decisionmap[vv];
@@ -737,7 +737,10 @@
   Pool *pool = solv->pool;
   Map dm;
   if ((flags & SOLVER_DECISIONLIST_TYPEMASK) != SOLVER_DECISIONLIST_SOLVABLE)
-    return solver_get_proof(solv, id, flags, decisionlistq);
+  {
+    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.32/src/order.c 
new/libsolv-0.7.33/src/order.c
--- old/libsolv-0.7.32/src/order.c      2024-09-16 15:50:06.000000000 +0200
+++ new/libsolv-0.7.33/src/order.c      2025-06-02 11:40:06.000000000 +0200
@@ -407,10 +407,11 @@
                  if (s->repo != installed)
                    continue;   /* no inst->uninst edges, please! */
 
-                 /* uninst -> uninst edge. Those make trouble. Only add if we 
must */
-                 if (trans->transaction_installed[p - installed->start] && 
!havescripts(pool, p, &ignoreinst))
+                 /* uninst -> uninst edge. Those can make trouble, as uninst 
elements are often bound to
+                  * inst elements which use the opposite order. */
+                 if (trans->transaction_installed[p2 - installed->start] && 
trans->transaction_installed[p - installed->start] && !havescripts(pool, p, 
&ignoreinst))
                    {
-                     /* p is obsoleted by another package and has no scripts */
+                     /* both p and p2 are bound to inst elements and p has no 
scripts */
                      /* we assume that the obsoleter is good enough to replace 
p */
                      continue;
                    }
@@ -1472,9 +1473,10 @@
       p = trans->steps.elements[i];
       s = pool->solvables + p;
       if (s->repo != pool->installed)
+      {
        lastins = p;
-      if (s->repo != pool->installed)
        MAPSET(&ins, p);
+      }
       if (havescripts(pool, p, 0))
        {
          MAPZERO(&seen);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/src/pool.c 
new/libsolv-0.7.33/src/pool.c
--- old/libsolv-0.7.32/src/pool.c       2024-11-28 14:00:06.000000000 +0100
+++ new/libsolv-0.7.33/src/pool.c       2025-05-16 10:20:07.000000000 +0200
@@ -594,8 +594,7 @@
     }
   else if (!pool->addedfileprovides && pool->disttype == DISTTYPE_RPM)
     {
-      if (!pool->addedfileprovides)
-       POOL_DEBUG(SOLV_DEBUG_STATS, "WARNING: pool_addfileprovides was not 
called, this may result in slow operation\n");
+      POOL_DEBUG(SOLV_DEBUG_STATS, "WARNING: pool_addfileprovides was not 
called, this may result in slow operation\n");
       /* lazyly add file provides */
       for (i = 1; i < num; i++)
        {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/src/rules.c 
new/libsolv-0.7.33/src/rules.c
--- old/libsolv-0.7.32/src/rules.c      2024-01-26 11:20:06.000000000 +0100
+++ new/libsolv-0.7.33/src/rules.c      2025-05-16 10:20:07.000000000 +0200
@@ -3206,7 +3206,7 @@
 {
   if (rid <= 0)
     return SOLVER_RULE_UNKNOWN;
-  if (rid > 0 && rid < solv->pkgrules_end)
+  if (rid < solv->pkgrules_end)
     return SOLVER_RULE_PKG;
   if (rid >= solv->jobrules && rid < solv->jobrules_end)
     return SOLVER_RULE_JOB;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.32/src/solver.c 
new/libsolv-0.7.33/src/solver.c
--- old/libsolv-0.7.32/src/solver.c     2024-11-12 10:50:06.000000000 +0100
+++ new/libsolv-0.7.33/src/solver.c     2025-04-14 14:20:08.000000000 +0200
@@ -1148,8 +1148,11 @@
   FOR_PROVIDES(p2, pp2, s->name)
     {
       s2 = pool->solvables + p2;
-      if (s2->repo == installed && s2->name == s->name && !(noupdate && 
MAPTST(noupdate, p2 - installed->start)))
-       return 1;
+      if (s2->name != s->name || s2->repo != installed || (noupdate && 
MAPTST(noupdate, p2 - installed->start)))
+       continue;
+      if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, s2))
+       continue;
+      return 1;
     }
   if (!s->obsoletes)
     return 0;
@@ -1159,7 +1162,7 @@
       FOR_PROVIDES(p2, pp2, obs)
        {
          s2 = pool->solvables + p2;
-         if (s2->repo != pool->installed || (noupdate && MAPTST(noupdate, p2 - 
installed->start)))
+         if (s2->repo != installed || (noupdate && MAPTST(noupdate, p2 - 
installed->start)))
            continue;
          if (!pool->obsoleteusesprovides && !pool_match_nevr(pool, s2, obs))
            continue;
@@ -3354,8 +3357,11 @@
       FOR_PROVIDES(pi, pip, s->name)
        {
          Solvable *si = pool->solvables + pi;
-         if (si->repo == installed && si->name == s->name && pi != p)
-           queue_push2(solv->update_targets, pi, p);
+         if (si->repo != installed || si->name != s->name || pi == p)
+           continue;
+         if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, si))
+           continue;
+         queue_push2(solv->update_targets, pi, p);
        }
       return;
     }
@@ -3366,6 +3372,8 @@
       Solvable *si = pool->solvables + pi;
       if (si->repo != installed || si->name != s->name)
        continue;
+      if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, si))
+       continue;
       if (how & SOLVER_FORCEBEST)
        {
          if (!solv->bestupdatemap.size)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libsolv-0.7.32/test/testcases/targeted/targeted_color.t 
new/libsolv-0.7.33/test/testcases/targeted/targeted_color.t
--- old/libsolv-0.7.32/test/testcases/targeted/targeted_color.t 1970-01-01 
01:00:00.000000000 +0100
+++ new/libsolv-0.7.33/test/testcases/targeted/targeted_color.t 2025-04-15 
13:00:09.000000000 +0200
@@ -0,0 +1,56 @@
+# testcase for issue 583
+# targeted update with forcebest and implicitobsoleteusescolor
+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.32/tools/repo2solv.c 
new/libsolv-0.7.33/tools/repo2solv.c
--- old/libsolv-0.7.32/tools/repo2solv.c        2024-07-08 12:40:07.000000000 
+0200
+++ new/libsolv-0.7.33/tools/repo2solv.c        2025-05-14 14:10:07.000000000 
+0200
@@ -5,6 +5,7 @@
  * 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.32/tools/rpms2solv.c 
new/libsolv-0.7.33/tools/rpms2solv.c
--- old/libsolv-0.7.32/tools/rpms2solv.c        2023-07-19 11:52:42.000000000 
+0200
+++ new/libsolv-0.7.33/tools/rpms2solv.c        2025-04-10 15:50:07.000000000 
+0200
@@ -70,9 +70,9 @@
 #ifdef SUSE
   int add_auto = 0;
 #endif
-  int filtered_filelist = 0;
+  int flags = 0;
 
-  while ((c = getopt(argc, argv, "0XkKm:F")) >= 0)
+  while ((c = getopt(argc, argv, "0XkKm:Fi")) >= 0)
     {
       switch(c)
        {
@@ -83,7 +83,7 @@
          manifest0 = 1;
          break;
        case 'F':
-         filtered_filelist = 1;
+         flags |= RPM_ADD_FILTERED_FILELIST;
          break;
 #ifdef ENABLE_PUBKEY
        case 'k':
@@ -98,6 +98,9 @@
          add_auto = 1;
 #endif
          break;
+       case 'i':
+         flags |= RPM_ADD_WITH_PKGID;
+         break;
        default:
          exit(1);
        }
@@ -169,7 +172,7 @@
          continue;
         }
 #endif
-      if (repo_add_rpm(repo, rpms[i], 
REPO_REUSE_REPODATA|REPO_NO_INTERNALIZE|(filtered_filelist ? 
RPM_ADD_FILTERED_FILELIST : 0)) == 0)
+      if (repo_add_rpm(repo, rpms[i], 
REPO_REUSE_REPODATA|REPO_NO_INTERNALIZE|flags) == 0)
        {
          fprintf(stderr, "rpms2solv: %s\n", pool_errstr(pool));
          res = 1;

Reply via email to