Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libdnf for openSUSE:Factory checked in at 2024-02-23 16:41:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libdnf (Old) and /work/SRC/openSUSE:Factory/.libdnf.new.1770 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libdnf" Fri Feb 23 16:41:08 2024 rev:36 rq:1149215 version:0.73.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libdnf/libdnf.changes 2023-11-05 12:19:26.722570964 +0100 +++ /work/SRC/openSUSE:Factory/.libdnf.new.1770/libdnf.changes 2024-02-23 16:41:16.158506431 +0100 @@ -1,0 +2,12 @@ +Thu Feb 15 08:42:33 UTC 2024 - [email protected] + +- version update to 0.73.0 + * Major changes: + * filelists metadata not loaded by default + * deltarpm disabled by default + * New features: + * conf: Introduce new optional_metadata_types option to load + filelists on demand + * goal: Method for detecting file dependency problems + +------------------------------------------------------------------- Old: ---- libdnf-0.72.0.tar.gz New: ---- libdnf-0.73.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libdnf.spec ++++++ --- /var/tmp/diff_new_pack.yZcJKK/_old 2024-02-23 16:41:16.902533402 +0100 +++ /var/tmp/diff_new_pack.yZcJKK/_new 2024-02-23 16:41:16.906533547 +0100 @@ -1,7 +1,7 @@ # # spec file for package libdnf # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # Copyright (c) 2023 Neal Gompa <[email protected]>. # # All modifications and additions to the file contributed by third parties @@ -34,7 +34,7 @@ %define devname %{name}-devel Name: libdnf -Version: 0.72.0 +Version: 0.73.0 Release: 0 Summary: Library providing C and Python APIs atop libsolv License: LGPL-2.1-or-later ++++++ libdnf-0.72.0.tar.gz -> libdnf-0.73.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/.packit.yaml new/libdnf-0.73.0/.packit.yaml --- old/libdnf-0.72.0/.packit.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/libdnf-0.73.0/.packit.yaml 2024-02-08 15:39:11.000000000 +0100 @@ -0,0 +1,10 @@ +# See the documentation for more information: +# https://packit.dev/docs/configuration/ + +specfile_path: libdnf.spec + +jobs: + - job: copr_build + trigger: pull_request + targets: + - fedora-all diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/.pre-commit-config.yaml new/libdnf-0.73.0/.pre-commit-config.yaml --- old/libdnf-0.72.0/.pre-commit-config.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/libdnf-0.73.0/.pre-commit-config.yaml 2024-02-08 15:39:11.000000000 +0100 @@ -0,0 +1,13 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/rpm-software-management/rpmlint.git + rev: 2.5.0 + hooks: + - id: rpmlint + files: ^libdnf\.spec$ + # Passes if packit not installed. Needed for validation locally +- repo: https://github.com/packit/pre-commit-hooks + rev: v1.2.0 + hooks: + - id: validate-config diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/VERSION.cmake new/libdnf-0.73.0/VERSION.cmake --- old/libdnf-0.72.0/VERSION.cmake 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/VERSION.cmake 2024-02-08 15:39:11.000000000 +0100 @@ -1,5 +1,5 @@ set (DEFAULT_LIBDNF_MAJOR_VERSION 0) -set (DEFAULT_LIBDNF_MINOR_VERSION 72) +set (DEFAULT_LIBDNF_MINOR_VERSION 73) set (DEFAULT_LIBDNF_MICRO_VERSION 0) if(DEFINED LIBDNF_MAJOR_VERSION) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/docs/release_notes.rst new/libdnf-0.73.0/docs/release_notes.rst --- old/libdnf-0.72.0/docs/release_notes.rst 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/docs/release_notes.rst 2024-02-08 15:39:11.000000000 +0100 @@ -20,6 +20,23 @@ ###################### ==================== +0.73.0 Release Notes +==================== + +- Major changes: + - filelists metadata not loaded by default + - deltarpm disabled by default + +- New features: + - conf: Introduce new optional_metadata_types option to load filelists on demand + - goal: Method for detecting file dependency problems + +Bugs fixed in 0.73.0: + +* :rhbug:`2252128` +* :rhbug:`2254789` + +==================== 0.72.0 Release Notes ==================== @@ -31,24 +48,22 @@ - Bug fixes: - Avoid reinstalling installonly packages marked for ERASE (RhBug:2163474) - transaction: Save the reason for installing (RhBug:1733274) + - hawkey.subject: get_best_selectors only obsoleters of latest (RhBug:2183279,2176263) - Others: + - Allow DNF to be removed by DNF 5 (RhBug:2221907) - Include dist-info for python3-libdnf + - bindings: Load all modules with RTLD_GLOBAL + - Update translations Bugs fixed in 0.72.0: * :rhbug:`2163474` * :rhbug:`1733274` +* :rhbug:`2183279` +* :rhbug:`2176263` * :rhbug:`1789346` - -==================== -0.71.1 Release Notes -==================== - -- New features: - - Allow DNF to be removed by DNF 5 - -Bugs fixed in 0.71.1: +* :rhbug:`2221907` ==================== 0.71.0 Release Notes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/libdnf/conf/ConfigMain.cpp new/libdnf-0.73.0/libdnf/conf/ConfigMain.cpp --- old/libdnf-0.72.0/libdnf/conf/ConfigMain.cpp 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/libdnf/conf/ConfigMain.cpp 2024-02-08 15:39:11.000000000 +0100 @@ -191,6 +191,7 @@ OptionBool debug_solver{false}; OptionStringList installonlypkgs{INSTALLONLYPKGS}; OptionStringList group_package_types{GROUP_PACKAGE_TYPES}; + OptionStringList optional_metadata_types{std::vector<std::string>{}}; OptionNumber<std::uint32_t> installonly_limit{3, 0, [](const std::string & value)->std::uint32_t{ @@ -360,7 +361,7 @@ OptionBool proxy_sslverify{true}; OptionString proxy_sslclientcert{""}; OptionString proxy_sslclientkey{""}; - OptionBool deltarpm{true}; + OptionBool deltarpm{false}; OptionNumber<std::uint32_t> deltarpm_percentage{75}; OptionBool skip_if_unavailable{false}; OptionBool sslverifystatus{false}; @@ -399,6 +400,7 @@ ); owner.optBinds().add("group_package_types", group_package_types); + owner.optBinds().add("optional_metadata_types", optional_metadata_types); owner.optBinds().add("installonly_limit", installonly_limit); owner.optBinds().add("tsflags", tsflags, @@ -564,6 +566,7 @@ OptionBool & ConfigMain::debug_solver() { return pImpl->debug_solver; } OptionStringList & ConfigMain::installonlypkgs() { return pImpl->installonlypkgs; } OptionStringList & ConfigMain::group_package_types() { return pImpl->group_package_types; } +OptionStringList & ConfigMain::optional_metadata_types() { return pImpl->optional_metadata_types; } OptionNumber<std::uint32_t> & ConfigMain::installonly_limit() { return pImpl->installonly_limit; } OptionStringList & ConfigMain::tsflags() { return pImpl->tsflags; } OptionBool & ConfigMain::assumeyes() { return pImpl->assumeyes; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/libdnf/conf/ConfigMain.hpp new/libdnf-0.73.0/libdnf/conf/ConfigMain.hpp --- old/libdnf-0.72.0/libdnf/conf/ConfigMain.hpp 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/libdnf/conf/ConfigMain.hpp 2024-02-08 15:39:11.000000000 +0100 @@ -72,6 +72,7 @@ OptionBool & debug_solver(); OptionStringList & installonlypkgs(); OptionStringList & group_package_types(); + OptionStringList & optional_metadata_types(); /* NOTE: If you set this to 2, then because it keeps the current kernel it means if you ever install an "old" kernel it'll get rid diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/libdnf/dnf-context.cpp new/libdnf-0.73.0/libdnf/dnf-context.cpp --- old/libdnf-0.72.0/libdnf/dnf-context.cpp 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/libdnf/dnf-context.cpp 2024-02-08 15:39:11.000000000 +0100 @@ -162,7 +162,7 @@ gboolean check_disk_space; gboolean check_transaction; gboolean only_trusted; - gboolean enable_filelists; + gboolean *enable_filelists; gboolean enrollment_valid; gboolean write_history; DnfLock *lock; @@ -252,6 +252,7 @@ g_free(priv->http_proxy); g_free(priv->user_agent); g_free(priv->arch); + g_free(priv->enable_filelists); g_strfreev(priv->native_arches); g_object_unref(priv->lock); g_object_unref(priv->state); @@ -364,7 +365,6 @@ priv->install_root = g_strdup("/"); priv->check_disk_space = TRUE; priv->check_transaction = TRUE; - priv->enable_filelists = TRUE; priv->write_history = TRUE; priv->state = dnf_state_new(); priv->lock = dnf_lock_new(); @@ -1086,7 +1086,15 @@ dnf_context_get_enable_filelists (DnfContext *context) { DnfContextPrivate *priv = GET_PRIVATE(context); - return priv->enable_filelists; + if (priv->enable_filelists == NULL) { + priv->enable_filelists = g_new(gboolean, 1); + + auto & optional_metadata_types = libdnf::getGlobalMainConfig(false).optional_metadata_types().getValue(); + *priv->enable_filelists = std::find(optional_metadata_types.begin(), + optional_metadata_types.end(), + "filelists") != optional_metadata_types.end(); + } + return *priv->enable_filelists; } /** @@ -1567,7 +1575,10 @@ gboolean enable_filelists) { DnfContextPrivate *priv = GET_PRIVATE(context); - priv->enable_filelists = enable_filelists; + if (priv->enable_filelists == NULL) { + priv->enable_filelists = g_new(gboolean, 1); + } + *priv->enable_filelists = enable_filelists; } /** @@ -1824,7 +1835,7 @@ DnfSackAddFlags add_flags = DNF_SACK_ADD_FLAG_NONE; if ((flags & DNF_CONTEXT_SETUP_SACK_FLAG_LOAD_UPDATEINFO) > 0) add_flags = static_cast<DnfSackAddFlags>(add_flags | DNF_SACK_ADD_FLAG_UPDATEINFO); - if (priv->enable_filelists && !((flags & DNF_CONTEXT_SETUP_SACK_FLAG_SKIP_FILELISTS) > 0)) + if (dnf_context_get_enable_filelists(context) && !((flags & DNF_CONTEXT_SETUP_SACK_FLAG_SKIP_FILELISTS) > 0)) add_flags = static_cast<DnfSackAddFlags>(add_flags | DNF_SACK_ADD_FLAG_FILELISTS); /* add remote */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/libdnf/goal/Goal-private.hpp new/libdnf-0.73.0/libdnf/goal/Goal-private.hpp --- old/libdnf-0.72.0/libdnf/goal/Goal-private.hpp 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/libdnf/goal/Goal-private.hpp 2024-02-08 15:39:11.000000000 +0100 @@ -59,6 +59,8 @@ std::string describeProtectedRemoval(); std::unique_ptr<PackageSet> brokenDependencyAllPkgs(DnfPackageState pkg_type); int countProblems(); + bool isBrokenFileDependencyPresent(); + bool isBrokenFileDependencyPresent(unsigned i); }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/libdnf/goal/Goal.cpp new/libdnf-0.73.0/libdnf/goal/Goal.cpp --- old/libdnf-0.72.0/libdnf/goal/Goal.cpp 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/libdnf/goal/Goal.cpp 2024-02-08 15:39:11.000000000 +0100 @@ -1142,6 +1142,49 @@ return output; } +bool +Goal::isBrokenFileDependencyPresent() +{ + return pImpl->isBrokenFileDependencyPresent(); +} + +bool +Goal::Impl::isBrokenFileDependencyPresent() +{ + for (int i = 0; i < countProblems(); i++) { + if (isBrokenFileDependencyPresent(i)) { + return true; + } + } + return false; +} + +bool +Goal::Impl::isBrokenFileDependencyPresent(unsigned i) +{ + if (i >= solver_problem_count(solv)) { + return false; + } + + SolverRuleinfo type; + Id source, target, dep; + IdQueue pq; + Pool * const pool = solv->pool; + + // this libsolv interface indexes from 1 (we do from 0), so: + solver_findallproblemrules(solv, i+1, pq.getQueue()); + for (int j = 0; j < pq.size(); j++) { + type = solver_ruleinfo(solv, pq[j], &source, &target, &dep); + if (type == SOLVER_RULE_PKG_NOTHING_PROVIDES_DEP) { + auto dependency = std::string(pool_dep2str(pool, dep)); + if (dependency.at(0) == '/') { + return true; + } + } + } + return false; +} + /** * Write all the solving decisions to the hawkey logfile. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/libdnf/goal/Goal.hpp new/libdnf-0.73.0/libdnf/goal/Goal.hpp --- old/libdnf-0.72.0/libdnf/goal/Goal.hpp 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/libdnf/goal/Goal.hpp 2024-02-08 15:39:11.000000000 +0100 @@ -124,6 +124,11 @@ std::vector<std::vector<std::string>> describeAllProblemRules(bool pkgs); /** + * @brief Check if any solver resolution problem is a file dependency issue + */ + bool isBrokenFileDependencyPresent(); + + /** * @brief List describing failed rules in solving problem 'i'. Caller is responsible for freeing the * returned string list by g_free(). * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/libdnf/repo/Repo.cpp new/libdnf-0.73.0/libdnf/repo/Repo.cpp --- old/libdnf-0.72.0/libdnf/repo/Repo.cpp 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/libdnf/repo/Repo.cpp 2024-02-08 15:39:11.000000000 +0100 @@ -432,12 +432,18 @@ std::unique_ptr<LrHandle> Repo::Impl::lrHandleInitBase() { std::unique_ptr<LrHandle> h(lr_handle_init()); - std::vector<const char *> dlist = {MD_TYPE_PRIMARY, MD_TYPE_FILELISTS, MD_TYPE_PRESTODELTA, - MD_TYPE_GROUP_GZ, MD_TYPE_UPDATEINFO}; + std::vector<const char *> dlist = {MD_TYPE_PRIMARY, MD_TYPE_PRESTODELTA, MD_TYPE_GROUP_GZ, MD_TYPE_UPDATEINFO}; + + auto & optionalMetadataTypes = conf->getMainConfig().optional_metadata_types().getValue(); + auto loadFilelists = std::find(optionalMetadataTypes.begin(), optionalMetadataTypes.end(), "filelists") != + optionalMetadataTypes.end(); #ifdef MODULEMD dlist.push_back(MD_TYPE_MODULES); #endif + if (loadFilelists) { + dlist.push_back(MD_TYPE_FILELISTS); + } if (loadMetadataOther) { dlist.push_back(MD_TYPE_OTHER); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/libdnf.spec new/libdnf-0.73.0/libdnf.spec --- old/libdnf-0.72.0/libdnf.spec 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/libdnf.spec 2024-02-08 15:39:11.000000000 +0100 @@ -4,7 +4,7 @@ %global dnf_conflict 4.11.0 %global swig_version 3.0.12 %global libdnf_major_version 0 -%global libdnf_minor_version 72 +%global libdnf_minor_version 73 %global libdnf_micro_version 0 %define __cmake_in_source_build 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdnf-0.72.0/python/hawkey/goal-py.cpp new/libdnf-0.73.0/python/hawkey/goal-py.cpp --- old/libdnf-0.72.0/python/hawkey/goal-py.cpp 2023-10-18 12:29:49.000000000 +0200 +++ new/libdnf-0.73.0/python/hawkey/goal-py.cpp 2024-02-08 15:39:11.000000000 +0100 @@ -479,6 +479,12 @@ } CATCH_TO_PYTHON static PyObject * +file_dep_problem_present(_GoalObject *self, PyObject *unused) try +{ + return PyBool_FromLong(self->goal->isBrokenFileDependencyPresent()); +} CATCH_TO_PYTHON + +static PyObject * log_decisions(_GoalObject *self, PyObject *unused) try { if (hy_goal_log_decisions(self->goal)) @@ -652,6 +658,7 @@ {"problem_conflicts",(PyCFunction)problem_conflicts, METH_VARARGS | METH_KEYWORDS, NULL}, {"problem_broken_dependency",(PyCFunction)problem_broken_dependency, METH_VARARGS | METH_KEYWORDS, NULL}, {"problem_rules", (PyCFunction)problem_rules, METH_NOARGS, NULL}, + {"file_dep_problem_present", (PyCFunction)file_dep_problem_present, METH_NOARGS, NULL}, {"log_decisions", (PyCFunction)log_decisions, METH_NOARGS, NULL}, {"write_debugdata", (PyCFunction)write_debugdata, METH_O, NULL}, {"list_erasures", (PyCFunction)list_erasures, METH_NOARGS, NULL},
