commit 388ba09ea78c1bf2b9a0c33ed88ac4145c911246 Author: CentOS Sources Date: Sat Feb 13 06:12:05 2021 +0000 import libdnf-0.55.0-3.el8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ce72cd2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/libdnf-0.55.0.tar.gz diff --git a/.libdnf.metadata b/.libdnf.metadata new file mode 100644 index 0000000..85f3501 --- /dev/null +++ b/.libdnf.metadata @@ -0,0 +1 @@ +5d997c2c7113cd50af986ada5ff10a62853f1943 SOURCES/libdnf-0.55.0.tar.gz diff --git a/SOURCES/0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch b/SOURCES/0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch new file mode 100644 index 0000000..7666421 --- /dev/null +++ b/SOURCES/0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch @@ -0,0 +1,87 @@ +From 2353dfbcb49a16bd37115915517417678fe49b19 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Fri, 13 Nov 2020 09:55:23 +0100 +Subject: [PATCH] Better msgs if "basecachedir" or "proxy_password" isn't set + (RhBug:1888946) + +Generates more specific error messages: +- repo '%s': 'basecachedir' is not set +- repo '%s': 'proxy_username' is set but not 'proxy_password' +- 'proxy_username' is set but not 'proxy_password' +instead of generic "GetValue(): Value not set" +--- + libdnf/repo/Repo.cpp | 24 ++++++++++++++++++++++-- + 1 file changed, 22 insertions(+), 2 deletions(-) + +diff --git a/libdnf/repo/Repo.cpp b/libdnf/repo/Repo.cpp +index d7c137d75..34539e1ee 100644 +--- a/libdnf/repo/Repo.cpp ++++ b/libdnf/repo/Repo.cpp +@@ -484,8 +484,12 @@ std::unique_ptr Repo::Impl::lrHandleInitLocal() + handleSetOpt(h.get(), LRO_LOCAL, 1L); + #ifdef LRO_SUPPORTS_CACHEDIR + /* If zchunk is enabled, set librepo cache dir */ +- if (conf->getMasterConfig().zchunk().getValue()) ++ if (conf->getMasterConfig().zchunk().getValue()) { ++ if (conf->basecachedir().empty()) { ++ throw Exception(tfm::format(_("repo '%s': 'basecachedir' is not set"), id)); ++ } + handleSetOpt(h.get(), LRO_CACHEDIR, conf->basecachedir().getValue().c_str()); ++ } + #endif + return h; + } +@@ -526,6 +530,9 @@ std::unique_ptr Repo::Impl::lrHandleInitRemote(const char *destdir) + handleSetOpt(h.get(), LRO_METALINKURL, tmp.c_str()); + } + handleSetOpt(h.get(), LRO_FASTESTMIRROR, conf->fastestmirror().getValue() ? 1L : 0L); ++ if (conf->basecachedir().empty()) { ++ throw Exception(tfm::format(_("repo '%s': 'basecachedir' is not set"), id)); ++ } + auto fastestMirrorCacheDir = conf->basecachedir().getValue(); + if (fastestMirrorCacheDir.back() != '/') + fastestMirrorCacheDir.push_back('/'); +@@ -569,8 +576,12 @@ std::unique_ptr Repo::Impl::lrHandleInitRemote(const char *destdir) + + #ifdef LRO_SUPPORTS_CACHEDIR + /* If zchunk is enabled, set librepo cache dir */ +- if (conf->getMasterConfig().zchunk().getValue()) ++ if (conf->getMasterConfig().zchunk().getValue()) { ++ if (conf->basecachedir().empty()) { ++ throw Exception(tfm::format(_("repo '%s': 'basecachedir' is not set"), id)); ++ } + handleSetOpt(h.get(), LRO_CACHEDIR, conf->basecachedir().getValue().c_str()); ++ } + #endif + + auto minrate = conf->minrate().getValue(); +@@ -610,6 +621,9 @@ std::unique_ptr Repo::Impl::lrHandleInitRemote(const char *destdir) + if (!conf->proxy_username().empty()) { + userpwd = conf->proxy_username().getValue(); + if (!userpwd.empty()) { ++ if (conf->proxy_password().empty()) { ++ throw RepoError(tfm::format(_("repo '%s': 'proxy_username' is set but not 'proxy_password'"), id)); ++ } + userpwd = formatUserPassString(userpwd, conf->proxy_password().getValue(), true); + handleSetOpt(h.get(), LRO_PROXYUSERPWD, userpwd.c_str()); + } +@@ -1346,6 +1360,9 @@ std::string Repo::Impl::getHash() const + + std::string Repo::Impl::getCachedir() const + { ++ if (conf->basecachedir().empty()) { ++ throw Exception(tfm::format(_("repo '%s': 'basecachedir' is not set"), id)); ++ } + auto repodir(conf->basecachedir().getValue()); + if (repodir.back() != '/') + repodir.push_back('/'); +@@ -1690,6 +1707,9 @@ static LrHandle * newHandle(ConfigMain * conf) + if (!conf->proxy_username().empty()) { + auto userpwd = conf->proxy_username().getValue(); + if (!userpwd.empty()) { ++ if (conf->proxy_password().empty()) { ++ throw RepoError(_("'proxy_username' is set but not 'proxy_password'")); ++ } + userpwd = formatUserPassString(userpwd, conf->proxy_password().getValue(), true); + handleSetOpt(h, LRO_PROXYUSERPWD, userpwd.c_str()); + } diff --git a/SOURCES/0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch b/SOURCES/0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch new file mode 100644 index 0000000..a16d544 --- /dev/null +++ b/SOURCES/0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch @@ -0,0 +1,73 @@ +From 71db968178e5d8cd4c01ed36fa940c2a95f3e494 Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Mon, 9 Nov 2020 18:10:37 +0100 +Subject: [PATCH] [modules] Add special handling for src artifacts + (RhBug:1809314) + +Source packages are special because they cannot be installed and provide +nothing, therefore they should be handled by a different way than binary +packages. Source rpm should not trigger a removal of binary packages. +--- + libdnf/dnf-sack.cpp | 22 +++++++++++++++++++--- + 1 file changed, 19 insertions(+), 3 deletions(-) + +diff --git a/libdnf/dnf-sack.cpp b/libdnf/dnf-sack.cpp +index 9fd2c72d1..d44e1d86d 100644 +--- a/libdnf/dnf-sack.cpp ++++ b/libdnf/dnf-sack.cpp +@@ -2335,20 +2335,29 @@ setModuleExcludes(DnfSack *sack, const char ** hotfixRepos, + { + dnf_sack_set_module_excludes(sack, nullptr); + std::vector names; ++ std::vector srcNames; + libdnf::DependencyContainer nameDependencies{sack}; + libdnf::Nevra nevra; + for (const auto &rpm : includeNEVRAs) { + if (nevra.parse(rpm.c_str(), HY_FORM_NEVRA)) { +- names.push_back(nevra.getName()); +- nameDependencies.addReldep(nevra.getName().c_str()); ++ auto arch = nevra.getArch(); ++ // source packages do not provide anything and must not cause excluding binary packages ++ if (arch == "src" || arch == "nosrc") { ++ srcNames.push_back(nevra.getName()); ++ } else { ++ names.push_back(nevra.getName()); ++ nameDependencies.addReldep(nevra.getName().c_str()); ++ } + } + } + + std::vector namesCString(names.size() + 1); ++ std::vector srcNamesCString(srcNames.size() + 1); + std::vector excludeNEVRAsCString(excludeNEVRAs.size() + 1); + std::vector includeNEVRAsCString(includeNEVRAs.size() + 1); + + transform(names.begin(), names.end(), namesCString.begin(), std::mem_fn(&std::string::c_str)); ++ transform(srcNames.begin(), srcNames.end(), srcNamesCString.begin(), std::mem_fn(&std::string::c_str)); + transform(excludeNEVRAs.begin(), excludeNEVRAs.end(), excludeNEVRAsCString.begin(), + std::mem_fn(&std::string::c_str)); + transform(includeNEVRAs.begin(), includeNEVRAs.end(), includeNEVRAsCString.begin(), +@@ -2363,6 +2372,7 @@ setModuleExcludes(DnfSack *sack, const char ** hotfixRepos, + libdnf::Query excludeQuery{keepPackages}; + libdnf::Query excludeProvidesQuery{keepPackages}; + libdnf::Query excludeNamesQuery(keepPackages); ++ libdnf::Query excludeSrcNamesQuery(keepPackages); + includeQuery.addFilter(HY_PKG_NEVRA_STRICT, HY_EQ, includeNEVRAsCString.data()); + + excludeQuery.addFilter(HY_PKG_NEVRA_STRICT, HY_EQ, excludeNEVRAsCString.data()); +@@ -2372,8 +2382,14 @@ setModuleExcludes(DnfSack *sack, const char ** hotfixRepos, + excludeProvidesQuery.addFilter(HY_PKG_PROVIDES, &nameDependencies); + excludeProvidesQuery.queryDifference(includeQuery); + +- // Requred to filtrate out source packages and packages with incompatible architectures ++ // Search for source packages with same names as included source artifacts ++ excludeSrcNamesQuery.addFilter(HY_PKG_NAME, HY_EQ, srcNamesCString.data()); ++ const char * srcArchs[] = {"src", "nosrc", nullptr}; ++ excludeSrcNamesQuery.addFilter(HY_PKG_ARCH, HY_EQ, srcArchs); ++ ++ // Required to filtrate out source packages and packages with incompatible architectures + excludeNamesQuery.addFilter(HY_PKG_NAME, HY_EQ, namesCString.data()); ++ excludeNamesQuery.queryUnion(excludeSrcNamesQuery); + excludeNamesQuery.queryDifference(includeQuery); + + dnf_sack_set_module_excludes(sack, excludeQuery.getResultPset()); diff --git a/SOURCES/0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch b/SOURCES/0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch new file mode 100644 index 0000000..ae93fb0 --- /dev/null +++ b/SOURCES/0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch @@ -0,0 +1,101 @@ +From 3f6adc99506f065d0858e4d9d46055be9d070634 Mon Sep 17 00:00:00 2001 +From: Nicola Sella +Date: Fri, 22 Jan 2021 16:07:37 +0100 +Subject: [PATCH] Avoid multilib file conflict in config.h (RhBug:1918818) + +=changelog= +msg: Avoid multilib file conflicts in config.h +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1918818 +--- + .gitignore | 2 +- + libdnf/CMakeLists.txt | 8 ++++++- + libdnf/{config.h.in => config-64.h.in} | 6 +++--- + libdnf/config.h | 29 ++++++++++++++++++++++++++ + 4 files changed, 40 insertions(+), 5 deletions(-) + rename libdnf/{config.h.in => config-64.h.in} (87%) + create mode 100644 libdnf/config.h + +diff --git a/.gitignore b/.gitignore +index e17a9b9bb..0a63bdae7 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -5,4 +5,4 @@ + build + *.pyc + data/tests/modules/yum.repos.d/test.repo +-libdnf/config.h ++libdnf/config-64.h +diff --git a/libdnf/CMakeLists.txt b/libdnf/CMakeLists.txt +index e82aac11e..25f33d7b0 100644 +--- a/libdnf/CMakeLists.txt ++++ b/libdnf/CMakeLists.txt +@@ -35,7 +35,13 @@ set(LIBDNF_SRCS + include_directories(transaction) + add_subdirectory("transaction") + +-configure_file("config.h.in" ${CMAKE_CURRENT_SOURCE_DIR}/config.h) ++if(CMAKE_SIZEOF_VOID_P EQUAL 8) ++ set(MULTILIB_ARCH "64") ++ configure_file("config-64.h.in" ${CMAKE_CURRENT_SOURCE_DIR}/config-64.h) ++elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) ++ set(MULTILIB_ARCH "32") ++ configure_file("config-64.h.in" ${CMAKE_CURRENT_SOURCE_DIR}/config-32.h) ++endif() + configure_file("dnf-version.h.in" ${CMAKE_CURRENT_SOURCE_DIR}/dnf-version.h) + configure_file("libdnf.pc.in" ${CMAKE_CURRENT_BINARY_DIR}/libdnf.pc @ONLY) + +diff --git a/libdnf/config.h.in b/libdnf/config-64.h.in +similarity index 87% +rename from libdnf/config.h.in +rename to libdnf/config-64.h.in +index 77974f757..e2329fe71 100644 +--- a/libdnf/config.h.in ++++ b/libdnf/config-64.h.in +@@ -18,9 +18,9 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#ifndef _LIBDNF_CONFIG_H_ +-#define _LIBDNF_CONFIG_H_ ++#ifndef _LIBDNF_CONFIG_@MULTILIB_ARCH@_H_ ++#define _LIBDNF_CONFIG_@MULTILIB_ARCH@_H_ + + #define DEFAULT_PLUGINS_DIRECTORY "@CMAKE_INSTALL_FULL_LIBDIR@/libdnf/plugins/" + +-#endif // _LIBDNF_CONFIG_H_ ++#endif // _LIBDNF_CONFIG_@MULTILIB_ARCH@_H_ +diff --git a/libdnf/config.h b/libdnf/config.h +new file mode 100644 +index 000000000..16121f6f5 +--- /dev/null ++++ b/libdnf/config.h +@@ -0,0 +1,29 @@ ++/* ++ * Copyright (C) 2018 Red Hat, Inc. ++ * ++ * Licensed under the GNU Lesser General Public License Version 2.1 ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include ++ ++#if __WORDSIZE == 32 ++#include "config-32.h" ++#elif __WORDSIZE == 64 ++#include "config-64.h" ++#else ++#error "Unknown word size" ++#endif diff --git a/SPECS/libdnf.spec b/SPECS/libdnf.spec new file mode 100644 index 0000000..865821c --- /dev/null +++ b/SPECS/libdnf.spec @@ -0,0 +1,763 @@ +%global libsolv_version 0.7.7 +%global libmodulemd_version 2.5.0 +%global librepo_version 1.12.0 +%global dnf_conflict 4.3.0 +%global swig_version 3.0.12 +%global libdnf_major_version 0 +%global libdnf_minor_version 55 +%global libdnf_micro_version 0 + +%define __cmake_in_source_build 1 + +# set sphinx package name according to distro +%global requires_python2_sphinx python2-sphinx +%global requires_python3_sphinx python3-sphinx +%if 0%{?rhel} == 7 + %global requires_python2_sphinx python-sphinx +%endif +%if 0%{?suse_version} + %global requires_python2_sphinx python2-Sphinx + %global requires_python3_sphinx python3-Sphinx +%endif + +%bcond_with valgrind + +# Do not build bindings for python3 for RHEL <= 7 +%if 0%{?rhel} && 0%{?rhel} <= 7 +%bcond_with python3 +%else +%bcond_without python3 +%endif + +%if 0%{?rhel} > 7 || 0%{?fedora} > 29 +# Disable python2 build by default +%bcond_with python2 +%else +%bcond_without python2 +%endif + +%if 0%{?rhel} && ! 0%{?centos} +%bcond_without rhsm +%else +%bcond_with rhsm +%endif + +%if 0%{?rhel} +%bcond_with zchunk +%else +%bcond_without zchunk +%endif + +%bcond_with sanitizers + +%global _cmake_opts \\\ + -DENABLE_RHSM_SUPPORT=%{?with_rhsm:ON}%{!?with_rhsm:OFF} \\\ + %{nil} + +Name: libdnf +Version: %{libdnf_major_version}.%{libdnf_minor_version}.%{libdnf_micro_version} +Release: 3%{?dist} +Summary: Library providing simplified C and Python API to libsolv +License: LGPLv2+ +URL: https://github.com/rpm-software-management/libdnf +Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz +Patch0: 0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch +Patch1: 0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch +Patch2: 0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch + +BuildRequires: cmake +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: libsolv-devel >= %{libsolv_version} +BuildRequires: pkgconfig(librepo) >= %{librepo_version} +BuildRequires: pkgconfig(check) +%if %{with valgrind} +BuildRequires: valgrind +%endif +BuildRequires: pkgconfig(gio-unix-2.0) >= 2.46.0 +BuildRequires: pkgconfig(gtk-doc) +BuildRequires: rpm-devel >= 4.11.0 +%if %{with rhsm} +BuildRequires: pkgconfig(librhsm) >= 0.0.3 +%endif +%if %{with zchunk} +BuildRequires: pkgconfig(zck) >= 0.9.11 +%endif +BuildRequires: pkgconfig(sqlite3) +BuildRequires: pkgconfig(json-c) +BuildRequires: pkgconfig(cppunit) +BuildRequires: pkgconfig(libcrypto) +BuildRequires: pkgconfig(modulemd-2.0) >= %{libmodulemd_version} +BuildRequires: pkgconfig(smartcols) +BuildRequires: gettext +BuildRequires: gpgme-devel + +%if %{with sanitizers} +BuildRequires: libasan-static +BuildRequires: liblsan-static +BuildRequires: libubsan-static +%endif + +Requires: libmodulemd%{?_isa} >= %{libmodulemd_version} +Requires: libsolv%{?_isa} >= %{libsolv_version} +Requires: librepo%{?_isa} >= %{librepo_version} + +%if %{without python2} +# Obsoleted from here so we can track the fast growing version easily. +# We intentionally only obsolete and not provide, this is a broken upgrade +# prevention, not providing the removed functionality. +Obsoletes: python2-%{name} < %{version}-%{release} +Obsoletes: python2-hawkey < %{version}-%{release} +Obsoletes: python2-hawkey-debuginfo < %{version}-%{release} +Obsoletes: python2-libdnf-debuginfo < %{version}-%{release} +%endif + +%description +A Library providing simplified C and Python API to libsolv. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: libsolv-devel%{?_isa} >= %{libsolv_version} + +%description devel +Development files for %{name}. + +%if %{with python2} +%package -n python2-%{name} +%{?python_provide:%python_provide python2-%{name}} +Summary: Python 2 bindings for the libdnf library. +Requires: %{name}%{?_isa} = %{version}-%{release} +BuildRequires: python2-devel +%if !0%{?mageia} +BuildRequires: %{requires_python2_sphinx} +%endif +%if 0%{?rhel} == 7 +BuildRequires: swig3 >= %{swig_version} +%else +BuildRequires: swig >= %{swig_version} +%endif + +%description -n python2-%{name} +Python 2 bindings for the libdnf library. +%endif +# endif with python2 + +%if %{with python3} +%package -n python3-%{name} +%{?python_provide:%python_provide python3-%{name}} +Summary: Python 3 bindings for the libdnf library. +Requires: %{name}%{?_isa} = %{version}-%{release} +BuildRequires: python3-devel +BuildRequires: %{requires_python3_sphinx} +BuildRequires: swig >= %{swig_version} + +%description -n python3-%{name} +Python 3 bindings for the libdnf library. +%endif + +%if %{with python2} +%package -n python2-hawkey +Summary: Python 2 bindings for the hawkey library +%{?python_provide:%python_provide python2-hawkey} +BuildRequires: python2-devel +%if 0%{?rhel} && 0%{?rhel} <= 7 +BuildRequires: python-nose +%else +BuildRequires: python2-nose +%endif +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: python2-%{name} = %{version}-%{release} +# Fix problem with hawkey - dnf version incompatibility +# Can be deleted for distros where only python2-dnf >= 2.0.0 +Conflicts: python2-dnf < %{dnf_conflict} +Conflicts: python-dnf < %{dnf_conflict} + +%description -n python2-hawkey +Python 2 bindings for the hawkey library. +%endif +# endif with python2 + +%if %{with python3} +%package -n python3-hawkey +Summary: Python 3 bindings for the hawkey library +%{?python_provide:%python_provide python3-hawkey} +BuildRequires: python3-devel +BuildRequires: python3-nose +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: python3-%{name} = %{version}-%{release} +# Fix problem with hawkey - dnf version incompatibility +# Can be deleted for distros where only python3-dnf >= 2.0.0 +Conflicts: python3-dnf < %{dnf_conflict} +# Obsoletes F27 packages +Obsoletes: platform-python-hawkey < %{version}-%{release} + +%description -n python3-hawkey +Python 3 bindings for the hawkey library. +%endif + +%prep +%autosetup -p1 +%if %{with python2} +mkdir build-py2 +%endif +%if %{with python3} +mkdir build-py3 +%endif + +%build +%if %{with python2} +pushd build-py2 + %if 0%{?mageia} || 0%{?suse_version} + cd .. + %define _cmake_builddir build-py2 + %define __builddir build-py2 + %endif + %cmake -DPYTHON_DESIRED:FILEPATH=%{__python2} -DWITH_MAN=OFF ../ %{!?with_zchunk:-DWITH_ZCHUNK=OFF} %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts} -DLIBDNF_MAJOR_VERSION=%{libdnf_major_version} -DLIBDNF_MINOR_VERSION=%{libdnf_minor_version} -DLIBDNF_MICRO_VERSION=%{libdnf_micro_version} \ + -DWITH_SANITIZERS=%{?with_sanitizers:ON}%{!?with_sanitizers:OFF} + %make_build +popd +%endif +# endif with python2 + +%if %{with python3} +pushd build-py3 + %if 0%{?mageia} || 0%{?suse_version} + cd .. + %define _cmake_builddir build-py3 + %define __builddir build-py3 + %endif + %cmake -DPYTHON_DESIRED:FILEPATH=%{__python3} -DWITH_GIR=0 -DWITH_MAN=0 -Dgtkdoc=0 ../ %{!?with_zchunk:-DWITH_ZCHUNK=OFF} %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts} -DLIBDNF_MAJOR_VERSION=%{libdnf_major_version} -DLIBDNF_MINOR_VERSION=%{libdnf_minor_version} -DLIBDNF_MICRO_VERSION=%{libdnf_micro_version} \ + -DWITH_SANITIZERS=%{?with_sanitizers:ON}%{!?with_sanitizers:OFF} + %make_build +popd +%endif + +%check +%if %{with python2} +pushd build-py2 + make ARGS="-V" test +popd +%endif +%if %{with python3} +# If we didn't run the general tests yet, do it now. +%if %{without python2} +pushd build-py3 + make ARGS="-V" test +popd +%else +# Otherwise, run just the Python tests, not all of +# them, since we have coverage of the core from the +# first build +pushd build-py3/python/hawkey/tests + make ARGS="-V" test +popd +%endif +%endif + +%install +%if %{with python2} +pushd build-py2 + %make_install +popd +%endif +%if %{with python3} +pushd build-py3 + %make_install +popd +%endif + +%find_lang %{name} + +%if (0%{?rhel} && 0%{?rhel} <= 7) || 0%{?suse_version} +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig +%else +%ldconfig_scriptlets +%endif + +%files -f %{name}.lang +%license COPYING +%doc README.md AUTHORS +%{_libdir}/%{name}.so.* +%dir %{_libdir}/libdnf/ +%dir %{_libdir}/libdnf/plugins/ +%{_libdir}/libdnf/plugins/README + +%files devel +%doc %{_datadir}/gtk-doc/html/%{name}/ +%{_libdir}/%{name}.so +%{_libdir}/pkgconfig/%{name}.pc +%{_includedir}/%{name}/ + +%if %{with python2} +%files -n python2-%{name} +%{python2_sitearch}/%{name}/ +%endif + +%if %{with python3} +%files -n python3-%{name} +%{python3_sitearch}/%{name}/ +%endif + +%if %{with python2} +%files -n python2-hawkey +%{python2_sitearch}/hawkey/ +%endif + +%if %{with python3} +%files -n python3-hawkey +%{python3_sitearch}/hawkey/ +%endif + +%changelog +* Fri Jan 29 2021 Nicola Sella - 0.55.0-3 +- Avoid multilib file conflict in config.h (RhBug:1918818) +- [modules] Add special handling for src artifacts (RhBug:1809314) + +* Fri Jan 15 2021 Nicola Sella - 0.55.0-2 +- Better msgs if "basecachedir" or "proxy_password" isn't set (RhBug:1888946) + +* Mon Nov 09 2020 Nicola Sella - 0.55.0-1 +- Add vendor to dnf API (RhBug:1876561) +- Add formatting function for solver error +- Add error types in ModulePackageContainer +- Implement module enable for context part +- Improve string formatting for translation +- Remove redundant printf and change logging info to notice (RhBug:1827424) +- Add allow_vendor_change option (RhBug:1788371) (RhBug:1788371) + +* Thu Aug 20 2020 Nicola Sella - 0.48.0-5 +- [covscan] Handle exception in a python binding by the proper function (RhBug:1870492) + +* Tue Jul 28 2020 Marek Blaha - 0.48.0-4 +- Update translations (RhBug:1820548) + +* Fri Jul 17 2020 Nicola Sella - 0.48.0-3 +- Add log file level main config option (RhBug:1802074) +- Accept '==' as an operator in reldeps (RhBug:1847946) + +* Wed Jun 10 2020 Ales Matej - 0.48.0-2 +- [history] Fix dnf history rollback when a package was removed (RhBug:1683134) + +* Wed Jun 03 2020 Nicola Sella - 0.48.0-1 +- Update to 0.48.0 +- swdb: Catch only SQLite3 exceptions and simplify the messages +- MergedTransaction list multiple comments (RhBug:1773679) +- Modify CMake to pull *.po files from weblate +- Optimize DependencyContainer creation from an existing queue +- fix a memory leak in dnf_package_get_requires() +- Fix memory leaks on g_build_filename() +- Fix memory leak in dnf_context_setup() +- Add `hy_goal_favor` and `hy_goal_disfavor` +- Define a cleanup function for `DnfPackageSet` +- dnf-repo: fix dnf_repo_get_public_keys double-free +- Do not cache RPMDB +- Use single-quotes around string literals used in SQL statements +- SQLite3: Do not close the database if it wasn't opened (RhBug:1761976) +- Don't create a new history DB connection for in-memory DB +- transaction/Swdb: Use a single logger variable in constructor +- utils: Add a safe version of pathExists() +- swdb: Handle the case when pathExists() fails on e.g. permission +- Repo: prepend "file://" if a local path is used as baseurl +- Move urlEncode() to utils +- utils: Add 'exclude' argument to urlEncode() +- Encode package URL for downloading through librepo (RhBug:1817130) +- Replace std::runtime_error with libdnf::RepoError +- Fixes and error handling improvements of the File class +- [context] Use ConfigRepo for gpgkey and baseurl (RhBug:1807864) +- [context] support "priority" option in .repo config file (RhBug:1797265) + +* Fri Apr 03 2020 Ales Matej - 0.47.0-1 +- Update to 0.47.0 +- Allow excluding packages with "excludepkgs" and globs +- Make parsing of reldeps more strict (RhBug:1788107) +- Add expanding solvable provides for dependency matching (RhBug:1534123) +- DnfRepo: fix module_hotfixes keyfile priority level +- Add custom exceptions to libdnf interface +- Port to libmodulemd-2 API (RhBug:1693683) +- Add prereq_ignoreinst & regular_requires properties for pkg (RhBug:1543449) +- Reset active modules when no module enabled or default (RhBug:1767351) +- Add comment option to transaction (RhBug:1773679) +- Baseurl is not exclusive with mirrorlist/metalink (RhBug:1775184) +- Add new function to reset all modules in C API (dnf_context_reset_all_modules) +- Handle situation when an unprivileged user cannot create history database (RhBug:1634385) +- Add query filter: latest by priority +- Add setter for running kernel protection setting +- Add DNF_NO_PROTECTED flag to allow empty list of protected packages +- Config options: only first empty value clears existing (RhBug:1788154) +- [conf] Set useful default colors when color is enabled +- [context] Use installonly_limit from global config (RhBug:1256108) +- [context] Add API to get/set "install_weak_deps" +- [context] Adds support for includepkgs in repository configuration. +- [context] Adds support for excludepkgs, exclude, includepkgs, and disable_excludes in main configuration. +- [context] Added function dnf_transaction_set_dont_solve_goal +- [context] Added functions dnf_context_get/set_config_file_path +- [context] Respect "plugins" global conf value +- [context] Add API to disable/enable plugins +- [context] Create new repo instead of reusing old one (RhBug:1795004) +- [context] Error when main config file can't be opened (RhBug:1794864) +- [context] Add function function dnf_context_is_set_config_file_path +- [context] Support repositories defined in main configuration file + +* Tue Feb 18 2020 Ales Matej - 0.39.1-5 +- Fix filtering of packages by advisory (RhBug:1770125) + +* Fri Jan 31 2020 Marek Blaha - 0.39.1-4 +- [translations] Update translations from zanata (RhBug:1754965) + +* Mon Jan 13 2020 Ales Matej - 0.39.1-3 +- Add two new query filters: obsoletes_by_priority, upgrades_by_priority (RhBug:1769466) +- [context] Add wildcard support in dnf_context_repo_set_data (RhBug:1781420) +- Remove killGpgAgent function (RhBug:1781601) + +* Thu Dec 12 2019 Pavla Kratochvilova - 0.39.1-2 +- [user-agent] Stop checking os-release(5) data against a hard-coded whitelist (RhBug:1777255) + +* Mon Nov 25 2019 Ales Matej - 0.39.1-1 +- Update to 0.39.1 +- Report reason how package was excluded (RhBug:1649754) +- Additional Arm detection improvements (RhBug:1691430) +- Set skip_if_unavailable for media repos to skip their update (RhBug:1716067) +- Add support of xml:base for remote and local url in context (RhBug:1734350,1717865) + +* Wed Nov 13 2019 Ales Matej - 0.38.1-1 +- Update to 0.38.1 +- Change the best option default to false +- Use more descriptive message when failed to retrieve GPG key (RhBug:1605117) +- Add removeMetadataTypeFromDownload function to the API +- Context part of libdnf can now read vars (urlvars) from dirs and environment +- Throw exception immediately if file cannot be opened +- Add test when there is no primary metadata in compatible format (RhBug:1744960) +- Various improvements to countme features +- Don't abort on rpmdb checksum calculation failure +- Enable module dependency trees when using set_modules_enabled_by_pkgset() (RhBug:1762314) +- Resolve problem with --best and search in provides (RhBug:1737469) +- New method "Query::filterSubject()", replaces Solution::getBestSolution() +- The Solution class was removed +- Add query argument into get_best_query and get_best_solution +- Add module reset function into dnf_context +- Add method to get all repository metadata locations +- Catch NoModuleException in case of not existent value was used in persistor (RhBug:1761773) + +* Tue Oct 22 2019 Ales Matej - 0.35.5-1 +- Update to 0.35.5 +- Make libdnf own its plugin directory (RhBug:1714265) +- Set priority of dnf.conf.d drop-ins +- Fix toString() to not insert [] (RhBug:1584442) +- Fix handling large number of filenames on input (RhBug:1690915) +- Detect armv7 with crypto extension only on arm version >= 8 +- A new standardized User-Agent field consisting of the libdnf and OS version + (including the variant) (RhBug:1156007) +- Add basic countme support (RhBug:1647454) +- Fix crash in PackageKit (RhBug:1636803) +- Do not create @System.solv files (RhBug:1707995) +- Set LRO_CACHEDIR so zchunk works again (RhBug:1739867) +- Improve detection of extras packages by comparing (name, arch) pair instead + of full NEVRA (RhBuh:1684517) +- Improve handling multilib packages in the history command (RhBug:1728637) +- Repo download: use full error description into the exception text (RhBug:1741442) +- Properly close hawkey.log (RhBug:1594016) +- Fix dnf updateinfo --update to not list advisories for packages updatable + only from non-enabled modules +- Apply modular filtering by package name (RhBug:1702729) + +* Wed Oct 16 2019 Pavla Kratochvilova - 0.35.1-9 +- Prevent reinstalling modified packages with same NEVRA (RhBug:1728252,1644241,1760825) + +* Fri Sep 06 2019 Marek Blaha - 0.35.1-8 +- Enhanced fix of moving directories in minimal container (RhBug:1700341) + +* Thu Sep 05 2019 Jaroslav Mracek - 0.35.1-7 +- Remove patch to not fail when installing modular RPMs without modular metadata + +* Thu Sep 05 2019 Marek Blaha - 0.35.1-6 +- Fix moving directories in minimal container (RhBug:1700341) + +* Tue Aug 06 2019 Pavla Kratochvilova - 0.35.1-5 +- Add suport for query sequence conversions + +* Thu Aug 01 2019 Pavla Kratochvilova - 0.35.1-4 +- Fix typo in error message (RhBug:1726661) +- Update localizations from zanata (RhBug:1689991) +- Don't disable nonexistent but required repositories (RhBug:1689331) +- Ignore trailing blank lines of multiline value (RhBug:1722493) +- Re-size includes map before re-computation (RhBug:1725213) + +* Tue Jul 16 2019 Marek Blaha - 0.35.1-3 +- Fix attaching and detaching of libsolvRepo and repo_internalize_trigger() + (RhBug:1730224) + +* Thu Jul 04 2019 Pavla Kratochvilova - 0.35.1-2 +- Add patch to not fail when installing modular RPMs without modular metadata + +* Tue Jun 11 2019 Pavla Kratochvilova - 0.35.1-1 +- Update to 0.35.1 +- Skip invalid key files in "/etc/pki/rpm-gpg" with warning (RhBug:1644040) +- Enable timestamp preserving for downloaded data (RhBug:1688537) +- Fix 'database is locked' error (RhBug:1631533) +- Replace the 'Failed to synchronize cache' message (RhBug:1712055) +- Fix 'no such table: main.trans_cmdline' error (RhBug:1596540) +- Fix: skip_if_unavailable=true for local repositories (RhBug:1716313) +- Add support of modular FailSafe (RhBug:1623128) +- Add support of DNF main config file in context; used by PackageKit and + microdnf (RhBug:1689331) +- Exit gpg-agent after repokey import (RhBug:1650266) + +* Mon May 13 2019 Pavla Kratochvilova - 0.33.0-1 +- Update to 0.33.0 +- Enhance sorting for module list (RhBug:1590358) +- [DnfRepo] Add methods for alternative repository metadata type and download (RhBug:1656314) +- Remove installed profile on module enable or disable (RhBug:1653623) +- Enhance modular solver to handle enabled and default module streams differently (RhBug:1648839) +- Add support of wild cards for modules (RhBug:1644588) +- Exclude module pkgs that have conflict +- Enhance config parser to preserve order of data, and keep comments and format +- Improve ARM detection +- Add support for SHA-384 +- Return empty query if incorrect reldep (RhBug:1687135) +- ConfigParser: Improve compatibility with Python ConfigParser and dnf-plugin-spacewalk (RhBug:1692044) +- ConfigParser: Unify default set of string represenation of boolean values +- Fix segfault when interrupting dnf process (RhBug:1610456) +- Installroot now requires absolute path +- Support "_none_" value for repo option "proxy" (RhBug:1680272) +- Add support for Module advisories +- Add support for xml:base attribute from primary.xml (RhBug:1691315) +- Improve detection of Platform ID (RhBug:1688462) + +* Fri Apr 26 2019 Pavla Kratochvilova - 0.22.5-6 +- Rebuild for libsolv soname bump (in libsolve update to 0.7.4) + +* Wed Apr 03 2019 Jaroslav Mracek - 0.22.5-5 +- Backport patches to set default to skip_if_unavailable to false (RhBug:1692452) + +* Tue Feb 12 2019 Jaroslav Mracek - 0.22.5-4 +- Backport patch to exclude module pkgs that have conflict (RhBug:1670496) + +* Fri Feb 08 2019 Jaroslav Mracek - 0.22.5-3 +- Backport patches to add support for modular updateinfoxml applicability + +* Wed Feb 06 2019 Pavla Kratochvilova - 0.22.5-2 +- Add patch: Add best as default behavior (RhBug1670776) + +* Mon Dec 17 2018 Daniel Mach - 0.22.4-1 +- Enhance LIBDNF plugins support +- [repo] Check whether metadata cache is expired (RhBug:1539620,1648274) +- [sack] Implement dnf_sack_get_rpmdb_version() + +* Fri Nov 23 2018 Jaroslav Mracek - 0.22.3-1 +- Permanently disable Python2 build for Fedora 30+ +- Update to 0.22.3 +- Modify solver_describe_decision to report cleaned (RhBug:1486749) +- [swdb] create persistent WAL files (RhBug:1640235) +- Relocate ModuleContainer save hook (RhBug:1632518) +- [transaction] Fix transaction item lookup for obsoleted packages (RhBug: 1642796) +- Fix memory leaks and memory allocations +- [repo] Possibility to extend downloaded repository metadata + +* Wed Oct 24 2018 Jaroslav Mracek - 0.22.0-2 +- Add patch Modify-solver_describe_decision-to-report-cleaned-RhBug1486749 +- Add patch swdb-create-persistent-WAL-files-RhBug1640235 +- Add patch Relocate-ModuleContainer-save-hook-RhBug1632518 +- Add patch Test-if-sack-is-present-and-run-save-module-persistor-RhBug1632518 + +* Mon Oct 15 2018 Jaroslav Mracek - 0.22.0-1 +- Fix segfault in repo_internalize_trigger (RhBug:1375895) +- Change sorting of installonly packages (RhBug:1627685) +- [swdb] Fixed pattern searching in history db (RhBug:1635542) +- Check correctly gpg for repomd when refresh is used (RhBug:1636743) +- [conf] Provide additional VectorString methods for compatibility with Python list. +- [plugins] add plugin loading and hooks into libdnf + +* Tue Sep 25 2018 Jaroslav Mracek - 0.20.0-1 +- [module] Report module solver errors +- [module] Enhance module commands and errors +- [transaction] Fixed several problems with SWDB +- Remove unneeded regex URL tests (RhBug:1598336) +- Allow quoted values in ini files (RhBug:1624056) +- Filter out not unique set of solver problems (RhBug:1564369) +- Resolves: rhbz#1614531 - dnf 3.2 does not depsolve correctly +- Resolves: rhbz#1614346 - dnf rollback doesn't work after install/downgrade/upgrade +- bug 1605274 - DNF crashes on * in installation repository URL +- Resolves: rhbz#1623383 - dnf.exceptions.ConfigError: Error parsing ... + +* Mon Sep 10 2018 Jaroslav Mracek - 0.19.1-1 +- Fix compilation errors on gcc-4.8.5 +- [module] Allow module queries on disabled modules (RhBug:1627081) + +* Fri Sep 07 2018 Jaroslav Mracek - 0.19.0-1 +- [query] Reldeps can contain a space char (RhBug:1612462) +- [transaction] Avoid adding duplicates via Transaction::addItem() +- Fix compilation errors on gcc-4.8.5 +- [module] Make available ModuleProfile using SWIG +- [module] Redesign module disable and reset + +* Fri Aug 31 2018 Daniel Mach - 0.18.0-1 +- [repo] Implement GPG key import +- [repo] Introduce Repo class replacing dnf.repo.Repo +- [context] Fix memory corruption in dnf_context +- [rhsm] Fix: RHSM don't write .repo file with same content (RhBug:1600452) +- [module] Create /etc/dnf/modules.d if it doesn't exist. +- [module] Forward C++ exceptions to bindings. + +* Thu Aug 16 2018 Daniel Mach - 0.17.2-2 +- [module] Create /etc/dnf/modules.d if it doesn't exist. +- [module] Forward C++ exceptions to bindings. + +* Mon Aug 13 2018 Daniel Mach - 0.17.2-1 +- [sqlite3] Change db locking mode to DEFAULT. +- [doc] Add libsmartcols-devel to devel deps. + +* Mon Aug 13 2018 Daniel Mach - 0.17.1-1 +- [module] Solve a problem in python constructor of NSVCAP if no version. +- [translations] Update translations from zanata. +- [transaction] Fix crash after using dnf.comps.CompsQuery and forking the process in Anaconda. +- [module] Support for resetting module state. +- [output] Introduce wrapper for smartcols. + +* Tue Aug 07 2018 Daniel Mach - 0.17.0-1 +- [conf] Add module_platform_id option. +- [module] Add ModulePackageContainer class. +- [module] Add ModulePersistor class. +- [sack] Module filtering made available in python API +- [sack] Module auto-enabling according to installed packages + +* Fri Jul 27 2018 Daniel Mach - 0.16.1-1 +- [module] Implement 'module_hotfixes' conf option to skip filtering RPMs from hotfix repos. +- [goal] Fix distupgrade filter, allow downgrades. +- [context] Allow to set module platform in context. +- [module] Introduce proper modular dependency solving. +- [module] Platform pseudo-module based on /etc/os-release. +- [goal] Add Goal::listSuggested(). +- [l10n] Support for translations, add gettext build dependency. + +* Sun Jul 22 2018 Daniel Mach - 0.16.0-1 +- Fix RHSM plugin +- Add support for logging +- Bump minimal libmodulemd version to 1.6.1 + +* Mon Jul 09 2018 Igor Gnatenko - 0.15.2-2 +- Fix librhsm support logic + +* Fri Jun 29 2018 Jaroslav Mracek - 0.15.2-1 +- Update to 0.15.1 +- Resolves: rhbz#1595487 + +* Fri Jun 29 2018 Igor Gnatenko - 0.15.1-2 +- Restore proper ldconfig_scriptlets + +* Tue Jun 26 2018 Jaroslav Mracek - 0.15.1-1 +- Update to 0.15.1 + +* Fri Jun 15 2018 Miro Hrončok - 0.11.1-6 +- Rebuilt for Python 3.7 + +* Wed Feb 07 2018 Fedora Release Engineering - 0.11.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Jan 30 2018 Igor Gnatenko - 0.11.1-4 +- Switch to %%ldconfig_scriptlets + +* Tue Nov 07 2017 Igor Gnatenko - 0.11.1-3 +- Use better Obsoletes for platform-python + +* Fri Nov 03 2017 Igor Gnatenko - 0.11.1-2 +- Remove platform-python subpackage + +* Mon Oct 16 2017 Jaroslav Mracek - 0.11.1-1 +- Rerelease of 0.11.1-1 +- Improvement query performance +- Run file query in hy_subject_get_best_solution only for files (arguments that start with ``/`` or + ``*/``) +- Resolves: rhbz#1498207 - DNF crash during upgrade installation F26 -> F27 + +* Tue Oct 10 2017 Igor Gnatenko - 0.11.0-1 +- Update to 0.11.0 + +* Mon Oct 02 2017 Jaroslav Mracek - 0.10.1-2 +- Rerelease of 0.10.1-1 + +* Wed Sep 27 2017 Jaroslav Mracek - 0.10.1-1 +- Update to 0.10.1 +- It improves query performance with name and arch filters. Also nevra filter will now + handle string with or without epoch. +- Additionally for python bindings it renames NEVRA._has_just_name() to NEVRA.has_just_name() due + to movement of code into c part of library. +- Resolves: rhbz#1260242 - --exclude does not affect dnf remove's removal of requirements +- Resolves: rhbz#1485881 - DNF claims it cannot install package, which have been already installed +- Resolves: rhbz#1361187 - [abrt] python-ipython-console: filter_updown(): python3.5 killed by SIGABRT + +* Fri Sep 15 2017 Igor Gnatenko - 0.9.3-8 +- Disable platform python on old releases + +* Tue Aug 15 2017 Lumír Balhar - 0.9.3-7 +- Add platform-python subpackage + +* Fri Aug 11 2017 Igor Gnatenko - 0.9.3-6 +- Rebuilt after RPM update (№ 3) + +* Thu Aug 10 2017 Igor Gnatenko - 0.9.3-5 +- Rebuilt for RPM soname bump + +* Thu Aug 10 2017 Igor Gnatenko - 0.9.3-4 +- Rebuilt for RPM soname bump + +* Thu Aug 03 2017 Fedora Release Engineering - 0.9.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 0.9.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Jul 24 2017 Jaroslav Mracek - 0.9.3-1 +- Update to 0.9.3 + +* Sat Jul 01 2017 Igor Gnatenko - 0.9.2-1 +- Update to 0.9.2 + +* Mon Jun 12 2017 Jaroslav Mracek - 0.9.1-1 +- Update to 0.9.1 + +* Mon May 22 2017 Jaroslav Mracek - 0.9.0-1 +- Update to 0.9.0 + +* Tue May 02 2017 Jaroslav Mracek - 0.8.2-1 +- Update to 0.8.2 + +* Fri Mar 24 2017 Igor Gnatenko - 0.8.1-1 +- Update to 0.8.1 + +* Tue Mar 21 2017 Jaroslav Mracek - 0.8.0-1 +- Update to 0.8.0 + +* Mon Feb 20 2017 Igor Gnatenko - 0.7.4-1 +- Update to 0.7.4 + +* Fri Feb 10 2017 Igor Gnatenko - 0.7.3-1 +- Update to 0.7.3 + +* Wed Feb 08 2017 Igor Gnatenko - 0.7.2-1 +- 0.7.2 + +* Fri Jan 06 2017 Igor Gnatenko - 0.7.1-1 +- 0.7.1 + +* Wed Dec 21 2016 Peter Robinson 0.7.0-0.7gitf9b798c +- Rebuild for Python 3.6 + +* Mon Dec 19 2016 Igor Gnatenko - 0.7.0-0.6gitf9b798c +- Use new upstream URL + +* Tue Dec 13 2016 Stratakis Charalampos - 0.7.0-0.5gitf9b798c +- Rebuild for Python 3.6 + +* Tue Dec 06 2016 Martin Hatina - 0.7.0-0.4gitf9b798c +- Increase conflict version of dnf + +* Thu Dec 01 2016 Igor Gnatenko - 0.7.0-0.3gitf9b798c +- Update to latest snapshot + +* Fri Nov 04 2016 Igor Gnatenko - 0.7.0-0.2git8bd77f8 +- Update to latest snapshot + +* Thu Sep 29 2016 Igor Gnatenko - 0.7.0-0.1git179c0a6 +- Initial package