commit libsolv for openSUSE:Factory
![](https://seccdn.libravatar.org/avatar/000404b9c3cf99a2a21283776f57d3b5.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package libsolv for openSUSE:Factory checked in at 2017-02-18 03:16:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libsolv (Old) and /work/SRC/openSUSE:Factory/.libsolv.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "libsolv" Changes: -------- --- /work/SRC/openSUSE:Factory/libsolv/libsolv.changes 2016-11-25 12:02:42.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.libsolv.new/libsolv.changes 2017-02-18 03:16:15.524421576 +0100 @@ -1,0 +2,22 @@ +Wed Feb 15 11:34:59 CET 2017 - mls@suse.de + +- export solvable_matchesdep function, as we now use it in + the bindings [bnc#1025440] +- bump version to 0.6.26 + +------------------------------------------------------------------- +Tue Feb 7 13:13:01 CET 2017 - mls@suse.de + +- add SOLVABLE_NAME hack for pool_whatmatchesdep and + solvable_matchesdep +- add SOLVER_FLAG_STRONG_RECOMMENDS option +- add SOLVER_FLAG_INSTALL_ALSO_UPDATES option +- do not special case release-less provides in sort_by_common_dep +- solver_problemruleinfo2str: return reason why a package is not + installable +- guard against dirpool_add_dir being called with an illegal + component id +- reject solv files with bad directories +- bump version to 0.6.25 + +------------------------------------------------------------------- Old: ---- libsolv-0.6.24.tar.bz2 New: ---- libsolv-0.6.26.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libsolv.spec ++++++ --- /var/tmp/diff_new_pack.Tk7djy/_old 2017-02-18 03:16:16.008353228 +0100 +++ /var/tmp/diff_new_pack.Tk7djy/_new 2017-02-18 03:16:16.012352663 +0100 @@ -1,7 +1,7 @@ # # spec file for package libsolv # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: libsolv -Version: 0.6.24 +Version: 0.6.26 Release: 0 Url: https://github.com/openSUSE/libsolv Source: libsolv-%{version}.tar.bz2 @@ -260,7 +260,7 @@ %{_mandir}/man1/helix2solv* %endif %{_datadir}/cmake/Modules/* -%{_libdir}/pkgconfig/libsolv.pc +%{_libdir}/pkgconfig/libsolv*.pc %{_mandir}/man3/* %files demo ++++++ libsolv-0.6.24.tar.bz2 -> libsolv-0.6.26.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/CMakeLists.txt new/libsolv-0.6.26/CMakeLists.txt --- old/libsolv-0.6.24/CMakeLists.txt 2016-09-09 17:32:18.000000000 +0200 +++ new/libsolv-0.6.26/CMakeLists.txt 2017-02-13 11:59:05.000000000 +0100 @@ -58,12 +58,17 @@ ENDIF (DEFINED INCLUDE) MESSAGE (STATUS "Header files will be installed in ${INCLUDE_INSTALL_DIR}") SET (BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin") +IF (NOT MAN_INSTALL_DIR) SET (MAN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/man") IF (IS_DIRECTORY "${CMAKE_INSTALL_PREFIX}/man" AND NOT IS_DIRECTORY "${CMAKE_INSTALL_PREFIX}/share/man") SET (MAN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/man") ENDIF (IS_DIRECTORY "${CMAKE_INSTALL_PREFIX}/man" AND NOT IS_DIRECTORY "${CMAKE_INSTALL_PREFIX}/share/man") +ENDIF (NOT MAN_INSTALL_DIR) MESSAGE(STATUS "Man pages will be installed in ${MAN_INSTALL_DIR}") +IF (NOT PKGCONFIG_INSTALL_DIR) + SET (PKGCONFIG_INSTALL_DIR ${LIB_INSTALL_DIR}/pkgconfig) +ENDIF (NOT PKGCONFIG_INSTALL_DIR) #################################################################### # CONFIGURATION # #################################################################### @@ -153,6 +158,7 @@ ENDIF (ENABLE_ARCHREPO) FIND_PACKAGE (EXPAT REQUIRED) +INCLUDE_DIRECTORIES (${EXPAT_INCLUDE_DIRS}) FIND_PACKAGE (ZLIB REQUIRED) IF (ENABLE_LZMA_COMPRESSION) FIND_PACKAGE (LZMA REQUIRED) @@ -206,6 +212,9 @@ IF (DB_LIBRARY) SET (RPMDB_LIBRARY ${DB_LIBRARY} ${RPMDB_LIBRARY}) ENDIF (DB_LIBRARY) + IF (DB_INCLUDE_DIR) + INCLUDE_DIRECTORIES (${DB_INCLUDE_DIR}) + ENDIF (DB_INCLUDE_DIR) ENDIF (NOT HAVE_RPM_DB_H) INCLUDE (CheckLibraryExists) CHECK_LIBRARY_EXISTS(rpmio pgpDigGetParams "" HAVE_PGPDIGGETPARAMS) @@ -384,9 +393,11 @@ ENDMACRO (SPECFILE) MACRO (PCFILE) - MESSAGE (STATUS "Writing pkg-config file...") + MESSAGE (STATUS "Writing pkg-config files...") CONFIGURE_FILE (${CMAKE_SOURCE_DIR}/libsolv.pc.in ${CMAKE_BINARY_DIR}/libsolv.pc @ONLY) - INSTALL( FILES ${CMAKE_BINARY_DIR}/libsolv.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig ) + INSTALL( FILES ${CMAKE_BINARY_DIR}/libsolv.pc DESTINATION ${PKGCONFIG_INSTALL_DIR} ) + CONFIGURE_FILE (${CMAKE_SOURCE_DIR}/libsolvext.pc.in ${CMAKE_BINARY_DIR}/libsolvext.pc @ONLY) + INSTALL( FILES ${CMAKE_BINARY_DIR}/libsolvext.pc DESTINATION ${PKGCONFIG_INSTALL_DIR} ) ENDMACRO (PCFILE) SPECFILE () diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/NEWS new/libsolv-0.6.26/NEWS --- old/libsolv-0.6.24/NEWS 2016-11-10 15:21:14.000000000 +0100 +++ new/libsolv-0.6.26/NEWS 2017-02-15 11:39:06.000000000 +0100 @@ -2,6 +2,18 @@ This file contains the major changes between libsolv versions: +Version 0.6.26 +- export solvable_matchesdep function, as we now + use it in the bindings + +Version 0.6.25 +- new features: + * new SOLVER_FLAG_STRONG_RECOMMENDS flag + * new SOLVER_FLAG_INSTALL_ALSO_UPDATES flag + * new matchesdep() method in bindings + * SOLVABLE_NAME selects nevr matching for + pool_whatmatchesdep and solvable_matchesdep + Version 0.6.24 - new features: * new SOLVER_FLAG_FOCUS_BEST flag diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/VERSION.cmake new/libsolv-0.6.26/VERSION.cmake --- old/libsolv-0.6.24/VERSION.cmake 2016-11-10 15:21:14.000000000 +0100 +++ new/libsolv-0.6.26/VERSION.cmake 2017-02-15 11:39:06.000000000 +0100 @@ -49,5 +49,5 @@ SET(LIBSOLV_MAJOR "0") SET(LIBSOLV_MINOR "6") -SET(LIBSOLV_PATCH "24") +SET(LIBSOLV_PATCH "26") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/bindings/solv.i new/libsolv-0.6.26/bindings/solv.i --- old/libsolv-0.6.24/bindings/solv.i 2016-11-18 13:56:14.000000000 +0100 +++ new/libsolv-0.6.26/bindings/solv.i 2016-12-14 11:39:05.000000000 +0100 @@ -2188,6 +2188,34 @@ } #endif + Repo *createshadow(const char *name) { + Repo *repo = repo_create($self->pool, name); + if ($self->idarraysize) { + repo_reserve_ids(repo, 0, $self->idarraysize); + memcpy(repo->idarraydata, $self->idarraydata, sizeof(Id) * $self->idarraysize); + repo->idarraysize = $self->idarraysize; + } + repo->start = $self->start; + repo->end = $self->end; + repo->nsolvables = $self->nsolvables; + return repo; + } + + void moveshadow(Queue q) { + Pool *pool = $self->pool; + int i; + for (i = 0; i < q.count; i++) { + Solvable *s; + Id p = q.elements[i]; + if (p < $self->start || p >= $self->end) + continue; + s = pool->solvables + p; + if ($self->idarraysize != s->repo->idarraysize) + continue; + s->repo = $self; + } + } + #if defined(SWIGTCL) %rename("==") __eq__; #endif @@ -3288,6 +3316,7 @@ static const int SOLVER_FLAG_NEED_UPDATEPROVIDE = SOLVER_FLAG_NEED_UPDATEPROVIDE; static const int SOLVER_FLAG_FOCUS_BEST = SOLVER_FLAG_FOCUS_BEST; static const int SOLVER_FLAG_STRONG_RECOMMENDS = SOLVER_FLAG_STRONG_RECOMMENDS; + static const int SOLVER_FLAG_INSTALL_ALSO_UPDATES = SOLVER_FLAG_INSTALL_ALSO_UPDATES; static const int SOLVER_REASON_UNRELATED = SOLVER_REASON_UNRELATED; static const int SOLVER_REASON_UNIT_RULE = SOLVER_REASON_UNIT_RULE; @@ -3458,6 +3487,21 @@ bool write_testcase(const char *dir) { return testcase_write($self, dir, TESTCASE_RESULT_TRANSACTION | TESTCASE_RESULT_PROBLEMS, 0, 0); } + + Queue raw_decisions(int filter=0) { + Queue q; + queue_init(&q); + solver_get_decisionqueue($self, &q); + if (filter) { + int i, j; + for (i = j = 0; i < q.count; i++) + if ((filter > 0 && q.elements[i] > 1) || + (filter < 0 && q.elements[i] < 0)) + q.elements[j++] = q.elements[i]; + queue_truncate(&q, j); + } + return q; + } } %extend Transaction { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/doc/libsolv-bindings.3 new/libsolv-0.6.26/doc/libsolv-bindings.3 --- old/libsolv-0.6.24/doc/libsolv-bindings.3 2016-11-17 14:56:15.000000000 +0100 +++ new/libsolv-0.6.26/doc/libsolv-bindings.3 2016-12-14 11:39:05.000000000 +0100 @@ -2,12 +2,12 @@ .\" Title: Libsolv-Bindings .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 http://docbook.sf.net/ -.\" Date: 11/17/2016 +.\" Date: 12/14/2016 .\" Manual: LIBSOLV .\" Source: libsolv .\" Language: English .\" -.TH "LIBSOLV\-BINDINGS" "3" "11/17/2016" "libsolv" "LIBSOLV" +.TH "LIBSOLV\-BINDINGS" "3" "12/14/2016" "libsolv" "LIBSOLV" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -3544,6 +3544,11 @@ If multiple packages obsolete an installed package, the solver checks the provides of every such package and ignores all packages that do not provide the installed package name\&. Thus, you can have an official update candidate that provides the old name, and other packages that also obsolete the package but are not considered for updating\&. If you cannot use this feature, you can turn it off by setting this flag\&. .RE .PP +\fBSOLVER_FLAG_NEED_UPDATEPROVIDE\fR +.RS 4 +This is somewhat the opposite of SOLVER_FLAG_NO_UPDATEPROVIDE: Only packages that provied the installed package names are considered for updating\&. +.RE +.PP \fBSOLVER_FLAG_SPLITPROVIDES\fR .RS 4 Make the solver aware of special provides of the form \(lq<packagename>:<path>\(rq used in SUSE systems to support package splits\&. @@ -3586,7 +3591,27 @@ .PP \fBSOLVER_FLAG_FOCUS_INSTALLED\fR .RS 4 -Resolve installed packages before resolving the given job\&. Setting this flag means that the solver will prefer picking a package version that fits the other installed packages over updating installed packages\&. +Resolve installed packages before resolving the given jobs\&. Setting this flag means that the solver will prefer picking a package version that fits the other installed packages over updating installed packages\&. +.RE +.PP +\fBSOLVER_FLAG_FOCUS_BEST\fR +.RS 4 +First resolve the given jobs, then the dependencies of the resulting packages, then resolve all already installed packages\&. This will result in more packages being updated as when the flag is not used\&. +.RE +.PP +\fBSOLVER_FLAG_INSTALL_ALSO_UPDATES\fR +.RS 4 +Update the package if a job is already fulfilled by an installed package\&. +.RE +.PP +\fBSOLVER_FLAG_YUM_OBSOLETES\fR +.RS 4 +Turn on yum\-like package split handling\&. See the yum documentation for more details\&. +.RE +.PP +\fBSOLVER_FLAG_URPM_REORDER\fR +.RS 4 +Turn on urpm like package reordering for kernel packages\&. See the urpm documentation for more details\&. .RE .sp Basic rule types: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/doc/libsolv-bindings.txt new/libsolv-0.6.26/doc/libsolv-bindings.txt --- old/libsolv-0.6.24/doc/libsolv-bindings.txt 2016-11-17 14:56:15.000000000 +0100 +++ new/libsolv-0.6.26/doc/libsolv-bindings.txt 2016-12-14 11:39:05.000000000 +0100 @@ -2127,6 +2127,11 @@ updating. If you cannot use this feature, you can turn it off by setting this flag. +*SOLVER_FLAG_NEED_UPDATEPROVIDE*:: +This is somewhat the opposite of SOLVER_FLAG_NO_UPDATEPROVIDE: Only +packages that provied the installed package names are considered +for updating. + *SOLVER_FLAG_SPLITPROVIDES*:: Make the solver aware of special provides of the form ``<packagename>:<path>'' used in SUSE systems to support package @@ -2169,11 +2174,31 @@ in no longer working packages in case they are orphaned. *SOLVER_FLAG_FOCUS_INSTALLED*:: -Resolve installed packages before resolving the given job. +Resolve installed packages before resolving the given jobs. Setting this flag means that the solver will prefer picking a package version that fits the other installed packages over updating installed packages. +*SOLVER_FLAG_FOCUS_BEST*:: +First resolve the given jobs, then the dependencies of the +resulting packages, then resolve all already installed +packages. This will result in more packages being updated +as when the flag is not used. + +*SOLVER_FLAG_INSTALL_ALSO_UPDATES*:: +Update the package if a job is already fulfilled by an installed +package. + +*SOLVER_FLAG_YUM_OBSOLETES*:: +Turn on yum-like package split handling. See the yum documentation +for more details. + +*SOLVER_FLAG_URPM_REORDER*:: +Turn on urpm like package reordering for kernel packages. See +the urpm documentation for more details. + + + Basic rule types: *SOLVER_RULE_UNKNOWN*:: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/ext/repo_rpmdb.c new/libsolv-0.6.26/ext/repo_rpmdb.c --- old/libsolv-0.6.24/ext/repo_rpmdb.c 2016-09-09 17:32:18.000000000 +0200 +++ new/libsolv-0.6.26/ext/repo_rpmdb.c 2017-02-01 11:49:09.000000000 +0100 @@ -765,16 +765,15 @@ { if (!fn[i]) continue; - if (!*dn[i]) + did = repodata_str2dir(data, dn[i], 1); + if (!did) { - Solvable *s = data->repo->pool->solvables + handle; + Solvable *s = data->repo->pool->solvables + handle; if (s->arch == ARCH_SRC || s->arch == ARCH_NOSRC) did = repodata_str2dir(data, "/usr/src", 1); else continue; /* work around rpm bug */ } - else - did = repodata_str2dir(data, dn[i], 1); repodata_add_dirnumnum(data, handle, SOLVABLE_DISKUSAGE, did, fkb[i], fn[i]); } solv_free(fn); @@ -1575,7 +1574,7 @@ static inline Id copydir(Pool *pool, Repodata *data, Repodata *fromdata, Id did, Id *cache) { - if (cache && cache[did & 255] == did) + if (cache && did && cache[did & 255] == did) return cache[(did & 255) + 256]; return copydir_complex(pool, data, fromdata, did, cache); } @@ -1583,8 +1582,16 @@ static Id copydir_complex(Pool *pool, Repodata *data, Repodata *fromdata, Id did, Id *cache) { - Id parent = dirpool_parent(&fromdata->dirpool, did); - Id compid = dirpool_compid(&fromdata->dirpool, did); + Id parent, compid; + if (!did) + { + /* make sure that the dirpool has an entry */ + if (!data->dirpool.ndirs) + dirpool_add_dir(&data->dirpool, 0, 0, 1); + return 0; + } + parent = dirpool_parent(&fromdata->dirpool, did); + compid = dirpool_compid(&fromdata->dirpool, did); if (parent) parent = copydir(pool, data, fromdata, parent, cache); if (data->localpool || fromdata->localpool) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/ext/testcase.c new/libsolv-0.6.26/ext/testcase.c --- old/libsolv-0.6.24/ext/testcase.c 2016-11-18 13:56:14.000000000 +0100 +++ new/libsolv-0.6.26/ext/testcase.c 2016-11-29 14:45:33.000000000 +0100 @@ -117,6 +117,7 @@ { SOLVER_FLAG_URPM_REORDER, "urpmreorder", 0 }, { SOLVER_FLAG_FOCUS_BEST, "focusbest", 0 }, { SOLVER_FLAG_STRONG_RECOMMENDS, "strongrecommends", 0 }, + { SOLVER_FLAG_INSTALL_ALSO_UPDATES, "installalsoupdates", 0 }, { 0, 0, 0 } }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/libsolv.pc.in new/libsolv-0.6.26/libsolv.pc.in --- old/libsolv-0.6.24/libsolv.pc.in 2016-02-11 17:01:33.000000000 +0100 +++ new/libsolv-0.6.26/libsolv.pc.in 2017-02-13 11:59:05.000000000 +0100 @@ -2,7 +2,7 @@ includedir=@INCLUDE_INSTALL_DIR@ Name: libsolv -Description: Library for solving packages and reading repositories +Description: Library for solving packages Version: @VERSION@ -Libs: -L${libdir} -lsolvext -lsolv +Libs: -L${libdir} -lsolv Cflags: -I${includedir} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/libsolvext.pc.in new/libsolv-0.6.26/libsolvext.pc.in --- old/libsolv-0.6.24/libsolvext.pc.in 1970-01-01 01:00:00.000000000 +0100 +++ new/libsolv-0.6.26/libsolvext.pc.in 2017-02-13 11:59:05.000000000 +0100 @@ -0,0 +1,9 @@ +libdir=@LIB_INSTALL_DIR@ +includedir=@INCLUDE_INSTALL_DIR@ + +Name: libsolvext +Description: Library for reading repositories +Version: @VERSION@ +Requires: libsolv +Libs: -L${libdir} -lsolvext +Cflags: -I${includedir} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/package/libsolv.changes new/libsolv-0.6.26/package/libsolv.changes --- old/libsolv-0.6.24/package/libsolv.changes 2016-11-10 15:21:14.000000000 +0100 +++ new/libsolv-0.6.26/package/libsolv.changes 2017-02-15 13:29:06.000000000 +0100 @@ -1,4 +1,26 @@ ------------------------------------------------------------------- +Wed Feb 15 11:34:59 CET 2017 - mls@suse.de + +- export solvable_matchesdep function, as we now use it in + the bindings [bnc#1025440] +- bump version to 0.6.26 + +------------------------------------------------------------------- +Tue Feb 7 13:13:01 CET 2017 - mls@suse.de + +- add SOLVABLE_NAME hack for pool_whatmatchesdep and + solvable_matchesdep +- add SOLVER_FLAG_STRONG_RECOMMENDS option +- add SOLVER_FLAG_INSTALL_ALSO_UPDATES option +- do not special case release-less provides in sort_by_common_dep +- solver_problemruleinfo2str: return reason why a package is not + installable +- guard against dirpool_add_dir being called with an illegal + component id +- reject solv files with bad directories +- bump version to 0.6.25 + +------------------------------------------------------------------- Thu Nov 10 15:09:25 CET 2016 - mls@suse.de - make testcase_str2solvid work with ignored packages diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/package/libsolv.spec.in new/libsolv-0.6.26/package/libsolv.spec.in --- old/libsolv-0.6.24/package/libsolv.spec.in 2016-11-10 11:16:21.000000000 +0100 +++ new/libsolv-0.6.26/package/libsolv.spec.in 2017-02-16 11:44:10.000000000 +0100 @@ -256,7 +256,7 @@ %{_mandir}/man1/helix2solv* %endif %{_datadir}/cmake/Modules/* -%{_libdir}/pkgconfig/libsolv.pc +%{_libdir}/pkgconfig/libsolv*.pc %{_mandir}/man3/* %files demo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/dirpool.c new/libsolv-0.6.26/src/dirpool.c --- old/libsolv-0.6.24/src/dirpool.c 2016-02-11 17:01:33.000000000 +0100 +++ new/libsolv-0.6.26/src/dirpool.c 2017-02-01 11:49:09.000000000 +0100 @@ -99,7 +99,7 @@ Id dirpool_add_dir(Dirpool *dp, Id parent, Id comp, int create) { - Id did, d, ds, *dirtraverse; + Id did, d, ds; if (!dp->ndirs) { @@ -110,14 +110,15 @@ dp->dirs[0] = 0; dp->dirs[1] = 1; /* "" */ } + if (comp <= 0) + return 0; if (parent == 0 && comp == 1) return 1; if (!dp->dirtraverse) dirpool_make_dirtraverse(dp); /* check all entries with this parent if we * already have this component */ - dirtraverse = dp->dirtraverse; - ds = dirtraverse[parent]; + ds = dp->dirtraverse[parent]; while (ds) { /* ds: first component in this block diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/libsolv.ver new/libsolv-0.6.26/src/libsolv.ver --- old/libsolv-0.6.24/src/libsolv.ver 2016-06-14 16:51:06.000000000 +0200 +++ new/libsolv-0.6.26/src/libsolv.ver 2017-02-15 11:39:06.000000000 +0100 @@ -310,6 +310,7 @@ solvable_lookup_str_poollang; solvable_lookup_type; solvable_lookup_void; + solvable_matchesdep; solvable_selfprovidedep; solvable_set_deparray; solvable_set_id; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/policy.c new/libsolv-0.6.26/src/policy.c --- old/libsolv-0.6.24/src/policy.c 2016-06-07 11:06:06.000000000 +0200 +++ new/libsolv-0.6.26/src/policy.c 2016-12-08 14:54:09.000000000 +0100 @@ -981,23 +981,7 @@ return 0; a = aa[2] < 0 ? -aa[2] : aa[2]; b = bb[2] < 0 ? -bb[2] : bb[2]; - if (pool->disttype != DISTTYPE_DEB && a != b) - { - /* treat release-less versions different */ - const char *as = pool_id2str(pool, a); - const char *bs = pool_id2str(pool, b); - if (strchr(as, '-')) - { - if (!strchr(bs, '-')) - return -2; - } - else - { - if (strchr(bs, '-')) - return 2; - } - } - r = pool_evrcmp(pool, b, a, EVRCMP_COMPARE); + r = pool_evrcmp(pool, b, a, pool->disttype != DISTTYPE_DEB ? EVRCMP_MATCH_RELEASE : EVRCMP_COMPARE); if (!r && (aa[2] < 0 || bb[2] < 0)) { if (bb[2] >= 0) @@ -1005,9 +989,7 @@ if (aa[2] >= 0) return -1; } - if (r) - return r < 0 ? -1 : 1; - return 0; + return r; } /* common end of sort_by_srcversion and sort_by_common_dep */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/problems.c new/libsolv-0.6.26/src/problems.c --- old/libsolv-0.6.24/src/problems.c 2016-10-07 15:06:16.000000000 +0200 +++ new/libsolv-0.6.26/src/problems.c 2017-01-18 13:39:56.000000000 +0100 @@ -1089,6 +1089,7 @@ { Pool *pool = solv->pool; char *s; + Solvable *ss; switch (type) { case SOLVER_RULE_DISTUPGRADE: @@ -1114,6 +1115,12 @@ return pool_tmpjoin(pool, "cannot install the best update candidate for package ", pool_solvid2str(pool, source), 0); return "cannot install the best candidate for the job"; case SOLVER_RULE_PKG_NOT_INSTALLABLE: + ss = pool->solvables + source; + if (pool_disabled_solvable(pool, ss)) + return pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), " is disabled"); + if (ss->arch && ss->arch != ARCH_SRC && ss->arch != ARCH_NOSRC && + pool->id2arch && (ss->arch > pool->lastarch || !pool->id2arch[ss->arch])) + return pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), " does not have a compatible architecture"); return pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), " is not installable"); case SOLVER_RULE_PKG_NOTHING_PROVIDES_DEP: s = pool_tmpjoin(pool, "nothing provides ", pool_dep2str(pool, dep), 0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/repo_solv.c new/libsolv-0.6.26/src/repo_solv.c --- old/libsolv-0.6.24/src/repo_solv.c 2016-02-11 17:01:33.000000000 +0100 +++ new/libsolv-0.6.26/src/repo_solv.c 2017-02-01 11:49:09.000000000 +0100 @@ -873,11 +873,20 @@ { id = read_id(&data, i + numid); if (id >= numid) - data.dirpool.dirs[i] = -(id - numid); - else if (idmap) - data.dirpool.dirs[i] = idmap[id]; - else - data.dirpool.dirs[i] = id; + { + data.dirpool.dirs[i++] = -(id - numid); + if (i >= numdir) + { + data.error = pool_error(pool, SOLV_ERROR_CORRUPT, "last dir entry is not a component"); + break; + } + id = read_id(&data, numid); + } + if (idmap) + id = idmap[id]; + data.dirpool.dirs[i] = id; + if (id <= 0) + data.error = pool_error(pool, SOLV_ERROR_CORRUPT, "bad dir component"); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/repo_write.c new/libsolv-0.6.26/src/repo_write.c --- old/libsolv-0.6.24/src/repo_write.c 2016-02-11 17:01:33.000000000 +0100 +++ new/libsolv-0.6.26/src/repo_write.c 2017-01-30 16:24:10.000000000 +0100 @@ -955,6 +955,10 @@ dirmap[n++] = sib; } + /* check if our block has some content */ + if (parent == n) + return n - 1; /* nope, drop parent id again */ + /* now go through all the siblings we just added and * do recursive calls on them */ lastn = n; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/repodata.c new/libsolv-0.6.26/src/repodata.c --- old/libsolv-0.6.24/src/repodata.c 2016-02-26 11:50:45.000000000 +0100 +++ new/libsolv-0.6.26/src/repodata.c 2017-02-01 11:49:09.000000000 +0100 @@ -268,17 +268,13 @@ #endif const char *dire; - parent = 0; if (!*dir) - return 0; + return data->dirpool.ndirs ? 0 : dirpool_add_dir(&data->dirpool, 0, 0, create); while (*dir == '/' && dir[1] == '/') dir++; if (*dir == '/' && !dir[1]) - { - if (data->dirpool.ndirs) - return 1; - return dirpool_add_dir(&data->dirpool, 0, 1, create); - } + return data->dirpool.ndirs ? 1 : dirpool_add_dir(&data->dirpool, 0, 1, create); + parent = 0; #ifdef DIRCACHE_SIZE dirs = dir; if (data->dircache) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/solver.c new/libsolv-0.6.26/src/solver.c --- old/libsolv-0.6.24/src/solver.c 2016-11-18 13:56:14.000000000 +0100 +++ new/libsolv-0.6.26/src/solver.c 2016-11-29 14:45:33.000000000 +0100 @@ -1711,6 +1711,8 @@ return solv->urpmreorder; case SOLVER_FLAG_STRONG_RECOMMENDS: return solv->strongrecommends; + case SOLVER_FLAG_INSTALL_ALSO_UPDATES: + return solv->install_also_updates; default: break; } @@ -1798,6 +1800,9 @@ case SOLVER_FLAG_STRONG_RECOMMENDS: solv->strongrecommends = value; break; + case SOLVER_FLAG_INSTALL_ALSO_UPDATES: + solv->install_also_updates = value; + break; default: break; } @@ -1838,24 +1843,26 @@ continue; /* prune to installed if not updating */ if (dq->count > 1 && solv->installed && !solv->updatemap_all && + !solv->install_also_updates && !(solv->job.elements[solv->ruletojob.elements[i - solv->jobrules]] & SOLVER_ORUPDATE)) { - int j, k; - for (j = k = 0; j < dq->count; j++) + int j = dq->count, k; + if (solv->updatemap.size) + { + /* do not prune if an installed package wants to be updated */ + for (j = 0; j < dq->count; j++) + if (pool->solvables[dq->elements[j]].repo == solv->installed + && MAPTST(&solv->updatemap, dq->elements[j] - solv->installed->start)) + break; + } + if (j == dq->count) { - Solvable *s = pool->solvables + dq->elements[j]; - if (s->repo == solv->installed) - { - dq->elements[k++] = dq->elements[j]; - if (solv->updatemap.size && MAPTST(&solv->updatemap, dq->elements[j] - solv->installed->start)) - { - k = 0; /* package wants to be updated, do not prune */ - break; - } - } + for (j = k = 0; j < dq->count; j++) + if (pool->solvables[dq->elements[j]].repo == solv->installed) + dq->elements[k++] = dq->elements[j]; + if (k) + dq->count = k; } - if (k) - dq->count = k; } olevel = level; level = selectandinstall(solv, level, dq, disablerules, i, SOLVER_REASON_RESOLVE_JOB); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/solver.h new/libsolv-0.6.26/src/solver.h --- old/libsolv-0.6.24/src/solver.h 2016-11-18 13:56:14.000000000 +0100 +++ new/libsolv-0.6.26/src/solver.h 2016-11-29 14:45:33.000000000 +0100 @@ -165,6 +165,7 @@ int do_yum_obsoletes; /* true: add special yumobs rules */ int urpmreorder; /* true: do special urpm package reordering */ int strongrecommends; /* true: create weak rules for recommends */ + int install_also_updates; /* true: do not prune install job rules to installed packages */ Map dupmap; /* dup these packages*/ int dupmap_all; /* dup all packages */ @@ -313,6 +314,7 @@ #define SOLVER_FLAG_URPM_REORDER 23 #define SOLVER_FLAG_FOCUS_BEST 24 #define SOLVER_FLAG_STRONG_RECOMMENDS 25 +#define SOLVER_FLAG_INSTALL_ALSO_UPDATES 26 #define GET_USERINSTALLED_NAMES (1 << 0) /* package names instead of ids */ #define GET_USERINSTALLED_INVERTED (1 << 1) /* autoinstalled */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsolv-0.6.24/src/suse.c new/libsolv-0.6.26/src/suse.c --- old/libsolv-0.6.24/src/suse.c 2016-06-14 16:56:05.000000000 +0200 +++ new/libsolv-0.6.26/src/suse.c 2017-01-27 12:01:50.000000000 +0100 @@ -211,7 +211,7 @@ Offset repo_fix_conflicts(Repo *repo, Offset conflicts) { - char buf[1024], *p, *dep; + char buf[1024], *dep; Pool *pool = repo->pool; Id id; int i; @@ -224,11 +224,10 @@ if (ISRELDEP(id)) continue; dep = (char *)pool_id2str(pool, id); - if (!strncmp(dep, "otherproviders(", 15) && strlen(dep) < sizeof(buf) - 2) + if (!strncmp(dep, "otherproviders(", 15) && dep[15] && strlen(dep) < sizeof(buf) - 2) { strcpy(buf, dep + 15); - if ((p = strchr(buf, ')')) != 0) - *p = 0; + buf[strlen(buf) - 1] = 0; id = pool_str2id(pool, buf, 1); id = pool_rel2id(pool, NAMESPACE_OTHERPROVIDERS, id, REL_NAMESPACE, 1); repo->idarraydata[i] = id;
participants (1)
-
root@hilbertn.suse.de