import libdnf-0.35.1-9.el8_1
This commit is contained in:
commit
2c9dc79ea8
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
SOURCES/libdnf-0.35.1.tar.gz
|
1
.libdnf.metadata
Normal file
1
.libdnf.metadata
Normal file
@ -0,0 +1 @@
|
|||||||
|
91fcde5c3c2e716bc3baad1e9be118f51effac13 SOURCES/libdnf-0.35.1.tar.gz
|
265
SOURCES/0002-Fix-attaching-and-detaching-of-libsolvRepo.patch
Normal file
265
SOURCES/0002-Fix-attaching-and-detaching-of-libsolvRepo.patch
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
From d267539801ce0a32392d3a86d94e6ea37b6dc2ba Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Fri, 12 Jul 2019 06:51:25 +0200
|
||||||
|
Subject: [PATCH 1/5] [context] Fix: Correctly detach libsolv repo
|
||||||
|
(RhBug:1727343)
|
||||||
|
|
||||||
|
Seting repoImpl->libsolvRepo = nullptr and repoImpl->nrefs = 1 is not sufficient.
|
||||||
|
The libsolvRepo inernally points back to us. And during destroying
|
||||||
|
it destroy us too because nrefs was set to 1.
|
||||||
|
Solution is to do full detach using detachLibsolvRepo().
|
||||||
|
|
||||||
|
It fixes https://bugzilla.redhat.com/show_bug.cgi?id=1727343
|
||||||
|
and probably https://bugzilla.redhat.com/show_bug.cgi?id=1727424
|
||||||
|
---
|
||||||
|
libdnf/dnf-repo.cpp | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp
|
||||||
|
index a358356a9..45c6c7e5b 100644
|
||||||
|
--- a/libdnf/dnf-repo.cpp
|
||||||
|
+++ b/libdnf/dnf-repo.cpp
|
||||||
|
@@ -1403,9 +1403,9 @@ dnf_repo_check_internal(DnfRepo *repo,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* init */
|
||||||
|
- repoImpl->libsolvRepo = nullptr;
|
||||||
|
+ if (repoImpl->libsolvRepo)
|
||||||
|
+ repoImpl->detachLibsolvRepo();
|
||||||
|
repoImpl->needs_internalizing = false;
|
||||||
|
- repoImpl->nrefs = 1;
|
||||||
|
repoImpl->state_main = _HY_NEW;
|
||||||
|
repoImpl->state_filelists = _HY_NEW;
|
||||||
|
repoImpl->state_presto = _HY_NEW;
|
||||||
|
|
||||||
|
From f1e2e534d7d375d051c4eae51431c5bb3649f9f1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Fri, 12 Jul 2019 07:59:15 +0200
|
||||||
|
Subject: [PATCH 2/5] [Repo] Remove unused delReference
|
||||||
|
|
||||||
|
---
|
||||||
|
libdnf/repo/Repo.cpp | 7 -------
|
||||||
|
libdnf/repo/Repo.hpp | 2 --
|
||||||
|
2 files changed, 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/repo/Repo.cpp b/libdnf/repo/Repo.cpp
|
||||||
|
index 23638839a..fd2415fa5 100644
|
||||||
|
--- a/libdnf/repo/Repo.cpp
|
||||||
|
+++ b/libdnf/repo/Repo.cpp
|
||||||
|
@@ -1441,13 +1441,6 @@ std::vector<std::string> Repo::getMirrors() const
|
||||||
|
return mirrors;
|
||||||
|
}
|
||||||
|
|
||||||
|
-void Repo::delReference()
|
||||||
|
-{
|
||||||
|
- if (--pImpl->nrefs > 0)
|
||||||
|
- return;
|
||||||
|
- delete this;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
int PackageTargetCB::end(TransferStatus status, const char * msg) { return 0; }
|
||||||
|
int PackageTargetCB::progress(double totalToDownload, double downloaded) { return 0; }
|
||||||
|
int PackageTargetCB::mirrorFailure(const char *msg, const char *url) { return 0; }
|
||||||
|
diff --git a/libdnf/repo/Repo.hpp b/libdnf/repo/Repo.hpp
|
||||||
|
index cbf4ed147..785c6e9d5 100644
|
||||||
|
--- a/libdnf/repo/Repo.hpp
|
||||||
|
+++ b/libdnf/repo/Repo.hpp
|
||||||
|
@@ -275,8 +275,6 @@ struct Repo {
|
||||||
|
|
||||||
|
~Repo();
|
||||||
|
|
||||||
|
- void delReference();
|
||||||
|
-
|
||||||
|
class Impl;
|
||||||
|
private:
|
||||||
|
friend struct PackageTarget;
|
||||||
|
|
||||||
|
From 4c35d135bc79939d58844e99e0d5ed924ba86fd5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Fri, 12 Jul 2019 08:50:54 +0200
|
||||||
|
Subject: [PATCH 3/5] [Repo] Add locking and asserts
|
||||||
|
|
||||||
|
Add locking and asserts into attachLibsolvRepo(), detachLibsolvRepo()
|
||||||
|
and hy_repo_free()
|
||||||
|
---
|
||||||
|
libdnf/dnf-repo.cpp | 3 +--
|
||||||
|
libdnf/repo/Repo-private.hpp | 5 +++++
|
||||||
|
libdnf/repo/Repo.cpp | 34 ++++++++++++++++++++++++++--------
|
||||||
|
3 files changed, 32 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp
|
||||||
|
index 45c6c7e5b..c30d99d17 100644
|
||||||
|
--- a/libdnf/dnf-repo.cpp
|
||||||
|
+++ b/libdnf/dnf-repo.cpp
|
||||||
|
@@ -1403,8 +1403,7 @@ dnf_repo_check_internal(DnfRepo *repo,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* init */
|
||||||
|
- if (repoImpl->libsolvRepo)
|
||||||
|
- repoImpl->detachLibsolvRepo();
|
||||||
|
+ repoImpl->detachLibsolvRepo();
|
||||||
|
repoImpl->needs_internalizing = false;
|
||||||
|
repoImpl->state_main = _HY_NEW;
|
||||||
|
repoImpl->state_filelists = _HY_NEW;
|
||||||
|
diff --git a/libdnf/repo/Repo-private.hpp b/libdnf/repo/Repo-private.hpp
|
||||||
|
index 23acf3622..333eb7bfd 100644
|
||||||
|
--- a/libdnf/repo/Repo-private.hpp
|
||||||
|
+++ b/libdnf/repo/Repo-private.hpp
|
||||||
|
@@ -43,6 +43,7 @@
|
||||||
|
|
||||||
|
#include <cctype>
|
||||||
|
#include <map>
|
||||||
|
+#include <mutex>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
@@ -177,6 +178,10 @@ class Repo::Impl {
|
||||||
|
int main_nrepodata{0};
|
||||||
|
int main_end{0};
|
||||||
|
|
||||||
|
+ // Lock attachLibsolvRepo(), detachLibsolvRepo() and hy_repo_free() to ensure atomic behavior
|
||||||
|
+ // in threaded environment such as PackageKit.
|
||||||
|
+ std::mutex attachLibsolvMutex;
|
||||||
|
+
|
||||||
|
private:
|
||||||
|
Repo * owner;
|
||||||
|
std::unique_ptr<LrResult> lrHandlePerform(LrHandle * handle, const std::string & destDirectory,
|
||||||
|
diff --git a/libdnf/repo/Repo.cpp b/libdnf/repo/Repo.cpp
|
||||||
|
index fd2415fa5..86531fe9b 100644
|
||||||
|
--- a/libdnf/repo/Repo.cpp
|
||||||
|
+++ b/libdnf/repo/Repo.cpp
|
||||||
|
@@ -60,7 +60,6 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <list>
|
||||||
|
#include <map>
|
||||||
|
-#include <mutex>
|
||||||
|
#include <set>
|
||||||
|
#include <sstream>
|
||||||
|
#include <type_traits>
|
||||||
|
@@ -1335,8 +1334,10 @@ LrHandle * Repo::Impl::getCachedHandle()
|
||||||
|
|
||||||
|
void Repo::Impl::attachLibsolvRepo(LibsolvRepo * libsolvRepo)
|
||||||
|
{
|
||||||
|
+ std::lock_guard<std::mutex> guard(attachLibsolvMutex);
|
||||||
|
+ assert(!this->libsolvRepo);
|
||||||
|
++nrefs;
|
||||||
|
- libsolvRepo->appdata = owner;
|
||||||
|
+ libsolvRepo->appdata = owner; // The libsolvRepo references back to us.
|
||||||
|
libsolvRepo->subpriority = -owner->getCost();
|
||||||
|
libsolvRepo->priority = -owner->getPriority();
|
||||||
|
this->libsolvRepo = libsolvRepo;
|
||||||
|
@@ -1344,11 +1345,23 @@ void Repo::Impl::attachLibsolvRepo(LibsolvRepo * libsolvRepo)
|
||||||
|
|
||||||
|
void Repo::Impl::detachLibsolvRepo()
|
||||||
|
{
|
||||||
|
- libsolvRepo->appdata = nullptr;
|
||||||
|
- if (--nrefs > 0)
|
||||||
|
- this->libsolvRepo = nullptr;
|
||||||
|
- else
|
||||||
|
+ attachLibsolvMutex.lock();
|
||||||
|
+ if (!libsolvRepo) {
|
||||||
|
+ // Nothing to do, libsolvRepo is not attached.
|
||||||
|
+ attachLibsolvMutex.unlock();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ libsolvRepo->appdata = nullptr; // Removes reference to this object from libsolvRepo.
|
||||||
|
+ this->libsolvRepo = nullptr;
|
||||||
|
+
|
||||||
|
+ if (--nrefs <= 0) {
|
||||||
|
+ // There is no reference to this object, we are going to destroy it.
|
||||||
|
+ // Mutex is part of this object, we must unlock it before destroying.
|
||||||
|
+ attachLibsolvMutex.unlock();
|
||||||
|
delete owner;
|
||||||
|
+ } else
|
||||||
|
+ attachLibsolvMutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Repo::setMaxMirrorTries(int maxMirrorTries)
|
||||||
|
@@ -2057,7 +2070,12 @@ hy_repo_get_string(HyRepo repo, int which)
|
||||||
|
void
|
||||||
|
hy_repo_free(HyRepo repo)
|
||||||
|
{
|
||||||
|
- if (--libdnf::repoGetImpl(repo)->nrefs > 0)
|
||||||
|
- return;
|
||||||
|
+ auto repoImpl = libdnf::repoGetImpl(repo);
|
||||||
|
+ {
|
||||||
|
+ std::lock_guard<std::mutex> guard(repoImpl->attachLibsolvMutex);
|
||||||
|
+ if (--repoImpl->nrefs > 0)
|
||||||
|
+ return; // There is still a reference to this object. Don't destroy it.
|
||||||
|
+ }
|
||||||
|
+ assert(!repoImpl->libsolvRepo);
|
||||||
|
delete repo;
|
||||||
|
}
|
||||||
|
|
||||||
|
From 3a61d4c590612427bfeb7302236e4429acae90b0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Fri, 12 Jul 2019 11:21:48 +0200
|
||||||
|
Subject: [PATCH 4/5] Fix: crash in repo_internalize_trigger() without HyRepo
|
||||||
|
attached
|
||||||
|
|
||||||
|
The repo_internalize_trigger() uses needs_internalizing from HyRepo.
|
||||||
|
If HyRepo is not attached we will assume needs_internalizing==true.
|
||||||
|
---
|
||||||
|
libdnf/repo/Repo.cpp | 10 +++++++---
|
||||||
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/repo/Repo.cpp b/libdnf/repo/Repo.cpp
|
||||||
|
index 86531fe9b..210ecde8f 100644
|
||||||
|
--- a/libdnf/repo/Repo.cpp
|
||||||
|
+++ b/libdnf/repo/Repo.cpp
|
||||||
|
@@ -1826,15 +1826,19 @@ repo_internalize_all_trigger(Pool *pool)
|
||||||
|
void
|
||||||
|
repo_internalize_trigger(Repo * repo)
|
||||||
|
{
|
||||||
|
- if (repo) {
|
||||||
|
- auto hrepo = static_cast<HyRepo>(repo->appdata);
|
||||||
|
+ if (!repo)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (auto hrepo = static_cast<HyRepo>(repo->appdata)) {
|
||||||
|
+ // HyRepo is attached. The hint needs_internalizing will be used.
|
||||||
|
auto repoImpl = libdnf::repoGetImpl(hrepo);
|
||||||
|
assert(repoImpl->libsolvRepo == repo);
|
||||||
|
if (!repoImpl->needs_internalizing)
|
||||||
|
return;
|
||||||
|
repoImpl->needs_internalizing = false;
|
||||||
|
- repo_internalize(repo);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ repo_internalize(repo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
|
||||||
|
From e4cabf803e1dbb6283330636d06ccb4a26e89ad4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Sun, 14 Jul 2019 10:45:27 +0200
|
||||||
|
Subject: [PATCH 5/5] [Repo] attachLibsolvRepo() can reattach repo to another
|
||||||
|
libsolvRepo
|
||||||
|
|
||||||
|
---
|
||||||
|
libdnf/repo/Repo.cpp | 10 ++++++++--
|
||||||
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/repo/Repo.cpp b/libdnf/repo/Repo.cpp
|
||||||
|
index 210ecde8f..70c6a7411 100644
|
||||||
|
--- a/libdnf/repo/Repo.cpp
|
||||||
|
+++ b/libdnf/repo/Repo.cpp
|
||||||
|
@@ -1335,8 +1335,14 @@ LrHandle * Repo::Impl::getCachedHandle()
|
||||||
|
void Repo::Impl::attachLibsolvRepo(LibsolvRepo * libsolvRepo)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> guard(attachLibsolvMutex);
|
||||||
|
- assert(!this->libsolvRepo);
|
||||||
|
- ++nrefs;
|
||||||
|
+
|
||||||
|
+ if (this->libsolvRepo)
|
||||||
|
+ // A libsolvRepo was attached to this object before. Remove it's reference to this object.
|
||||||
|
+ this->libsolvRepo->appdata = nullptr;
|
||||||
|
+ else
|
||||||
|
+ // The libsolvRepo will reference this object. Increase reference counter.
|
||||||
|
+ ++nrefs;
|
||||||
|
+
|
||||||
|
libsolvRepo->appdata = owner; // The libsolvRepo references back to us.
|
||||||
|
libsolvRepo->subpriority = -owner->getCost();
|
||||||
|
libsolvRepo->priority = -owner->getPriority();
|
26
SOURCES/0003-Typo-in-error-message-RhBug1726661.patch
Normal file
26
SOURCES/0003-Typo-in-error-message-RhBug1726661.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From b84fe340840169d201714a5b3a015b9d1142013c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Blaha <mblaha@redhat.com>
|
||||||
|
Date: Wed, 3 Jul 2019 13:48:58 +0200
|
||||||
|
Subject: [PATCH] Typo in error message (RhBug:1726661)
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1726661
|
||||||
|
---
|
||||||
|
libdnf/module/ModulePackageContainer.cpp | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp
|
||||||
|
index ddef174..1c8e0d5 100644
|
||||||
|
--- a/libdnf/module/ModulePackageContainer.cpp
|
||||||
|
+++ b/libdnf/module/ModulePackageContainer.cpp
|
||||||
|
@@ -1637,7 +1637,7 @@ void ModulePackageContainer::updateFailSafeData()
|
||||||
|
if (!updateFile(filePath, modulePackage->getYaml().c_str())) {
|
||||||
|
auto logger(Log::getLogger());
|
||||||
|
logger->debug(tfm::format(
|
||||||
|
- _("Unable to safe a modular Fail Safe data to '%s'"), filePath));
|
||||||
|
+ _("Unable to save a modular Fail Safe data to '%s'"), filePath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
libgit2 0.28.2
|
||||||
|
|
23829
SOURCES/0004-Update-localizations-from-zanata-RhBug1689991.patch
Normal file
23829
SOURCES/0004-Update-localizations-from-zanata-RhBug1689991.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,45 @@
|
|||||||
|
From 5923a9cc15b9fe541e71a9ef4bb550b6ddc481fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Wed, 12 Jun 2019 13:22:31 +0200
|
||||||
|
Subject: [PATCH] [context] Fix: Don't disable nonexistent but required repositories (RhBug:1689331)
|
||||||
|
|
||||||
|
The nonexistent local/media repositories were automatically disabled
|
||||||
|
during check (in function dnf_repo_check_internal). So application
|
||||||
|
(the Packagekit daemon) that reuses the deactivated repository object
|
||||||
|
then silently skip the repository as disabled.
|
||||||
|
|
||||||
|
We should not to disable repositories which are required
|
||||||
|
(skip_if_unavailable=0).
|
||||||
|
|
||||||
|
Fix for https://bugzilla.redhat.com/show_bug.cgi?id=1689331
|
||||||
|
---
|
||||||
|
libdnf/dnf-repo.cpp | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp
|
||||||
|
index d49c306..a358356 100644
|
||||||
|
--- a/libdnf/dnf-repo.cpp
|
||||||
|
+++ b/libdnf/dnf-repo.cpp
|
||||||
|
@@ -1312,7 +1312,8 @@ dnf_repo_check_internal(DnfRepo *repo,
|
||||||
|
/* has the media repo vanished? */
|
||||||
|
if (priv->kind == DNF_REPO_KIND_MEDIA &&
|
||||||
|
!g_file_test(priv->location, G_FILE_TEST_EXISTS)) {
|
||||||
|
- priv->enabled = DNF_REPO_ENABLED_NONE;
|
||||||
|
+ if (!dnf_repo_get_required(repo))
|
||||||
|
+ priv->enabled = DNF_REPO_ENABLED_NONE;
|
||||||
|
g_set_error(error,
|
||||||
|
DNF_ERROR,
|
||||||
|
DNF_ERROR_REPO_NOT_AVAILABLE,
|
||||||
|
@@ -1323,7 +1324,8 @@ dnf_repo_check_internal(DnfRepo *repo,
|
||||||
|
/* has the local repo vanished? */
|
||||||
|
if (priv->kind == DNF_REPO_KIND_LOCAL &&
|
||||||
|
!g_file_test(priv->location, G_FILE_TEST_EXISTS)) {
|
||||||
|
- priv->enabled = DNF_REPO_ENABLED_NONE;
|
||||||
|
+ if (!dnf_repo_get_required(repo))
|
||||||
|
+ priv->enabled = DNF_REPO_ENABLED_NONE;
|
||||||
|
g_set_error(error,
|
||||||
|
DNF_ERROR,
|
||||||
|
DNF_ERROR_REPO_NOT_AVAILABLE,
|
||||||
|
--
|
||||||
|
libgit2 0.28.2
|
||||||
|
|
@ -0,0 +1,35 @@
|
|||||||
|
From 9e670738044166cdd0bf566325bf610bfb802821 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Mon, 24 Jun 2019 16:34:47 +0200
|
||||||
|
Subject: [PATCH] [config] ignore trailing blank lines of multiline value (RhBug:1722493)
|
||||||
|
|
||||||
|
Parser supports multiline values. Example:
|
||||||
|
key = value first line
|
||||||
|
value second line
|
||||||
|
|
||||||
|
If a line starts with whitespaces and it is not a section name,
|
||||||
|
it is treated as continuation of previous key=value line.
|
||||||
|
|
||||||
|
This commit ignores trailing blank lines. So newline characters
|
||||||
|
are trimmed out from the end of line.
|
||||||
|
---
|
||||||
|
libdnf/utils/iniparser/iniparser.cpp | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libdnf/utils/iniparser/iniparser.cpp b/libdnf/utils/iniparser/iniparser.cpp
|
||||||
|
index c77c5ca..14fef74 100644
|
||||||
|
--- a/libdnf/utils/iniparser/iniparser.cpp
|
||||||
|
+++ b/libdnf/utils/iniparser/iniparser.cpp
|
||||||
|
@@ -81,6 +81,9 @@ IniParser::IniParser(std::unique_ptr<std::istream> && inputStream)
|
||||||
|
}
|
||||||
|
|
||||||
|
void IniParser::trimValue() noexcept {
|
||||||
|
+ auto end = value.find_last_not_of(DELIMITER);
|
||||||
|
+ if (end != value.npos)
|
||||||
|
+ value.resize(end + 1);
|
||||||
|
if (value.length() > 1 &&
|
||||||
|
value.front() == value.back() &&
|
||||||
|
(value.front() == '\"' || value.front() == '\'')) {
|
||||||
|
--
|
||||||
|
libgit2 0.28.2
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
From f1cf6f12157da3cf555e49d1b5f0af5c81d0c101 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||||
|
Date: Fri, 28 Jun 2019 18:47:19 +0200
|
||||||
|
Subject: [PATCH] Re-size includes map before re-computation (RhBug:1725213)
|
||||||
|
|
||||||
|
It resolves problems with incorrect reads.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1725213
|
||||||
|
---
|
||||||
|
libdnf/dnf-sack.cpp | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/libdnf/dnf-sack.cpp b/libdnf/dnf-sack.cpp
|
||||||
|
index 33fbe4a..c0c1cc5 100644
|
||||||
|
--- a/libdnf/dnf-sack.cpp
|
||||||
|
+++ b/libdnf/dnf-sack.cpp
|
||||||
|
@@ -356,6 +356,7 @@ dnf_sack_recompute_considered(DnfSack *sack)
|
||||||
|
if (priv->module_excludes)
|
||||||
|
map_subtract(pool->considered, priv->module_excludes);
|
||||||
|
if (priv->pkg_includes) {
|
||||||
|
+ map_grow(priv->pkg_includes, pool->nsolvables);
|
||||||
|
Map pkg_includes_tmp;
|
||||||
|
map_init_clone(&pkg_includes_tmp, priv->pkg_includes);
|
||||||
|
|
||||||
|
--
|
||||||
|
libgit2 0.28.2
|
||||||
|
|
142
SOURCES/0008-Add-suport-for-query-sequence-conversions.patch
Normal file
142
SOURCES/0008-Add-suport-for-query-sequence-conversions.patch
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
From 12acb4b30c9a88b9082f7dcbda0257b47bed9c87 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||||
|
Date: Sat, 13 Apr 2019 18:46:28 +0200
|
||||||
|
Subject: [PATCH 1/3] Add HY_PKG_CONFLICTS for conversion into reldep
|
||||||
|
|
||||||
|
Sequence of HY_PKG_CONFLICTS requires conversion into reldep.
|
||||||
|
---
|
||||||
|
python/hawkey/query-py.cpp | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/python/hawkey/query-py.cpp b/python/hawkey/query-py.cpp
|
||||||
|
index d90f9c95..5bc8d123 100644
|
||||||
|
--- a/python/hawkey/query-py.cpp
|
||||||
|
+++ b/python/hawkey/query-py.cpp
|
||||||
|
@@ -350,6 +350,7 @@ filter_add(HyQuery query, key_t keyname, int cmp_type, PyObject *match)
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
+ case HY_PKG_CONFLICTS:
|
||||||
|
case HY_PKG_PROVIDES:
|
||||||
|
case HY_PKG_REQUIRES:
|
||||||
|
case HY_PKG_ENHANCES:
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
||||||
|
|
||||||
|
From db4118aeab5d8ed0006d7fe8b924304c7f52d34d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||||
|
Date: Sat, 13 Apr 2019 19:38:29 +0200
|
||||||
|
Subject: [PATCH 2/3] Add support of PY string sequence for HY_PKG_OBSOLETES
|
||||||
|
|
||||||
|
---
|
||||||
|
python/hawkey/query-py.cpp | 20 ++++++++++++++++++--
|
||||||
|
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/python/hawkey/query-py.cpp b/python/hawkey/query-py.cpp
|
||||||
|
index 5bc8d123..e9d220b6 100644
|
||||||
|
--- a/python/hawkey/query-py.cpp
|
||||||
|
+++ b/python/hawkey/query-py.cpp
|
||||||
|
@@ -340,10 +340,26 @@ filter_add(HyQuery query, key_t keyname, int cmp_type, PyObject *match)
|
||||||
|
switch (keyname) {
|
||||||
|
case HY_PKG:
|
||||||
|
case HY_PKG_OBSOLETES: {
|
||||||
|
+ // It could be a sequence of packages or reldep/strings. Lets try packages first.
|
||||||
|
auto pset = pyseq_to_packageset(match, query->getSack());
|
||||||
|
-
|
||||||
|
- if (!pset)
|
||||||
|
+ if (!pset) {
|
||||||
|
+ if (auto PyError = PyErr_Occurred()) {
|
||||||
|
+ // It was not a sequence of packages.
|
||||||
|
+ if (PyErr_GivenExceptionMatches(PyError, PyExc_TypeError)) {
|
||||||
|
+ PyErr_Clear();
|
||||||
|
+ auto reldeplist = pyseq_to_reldeplist(match, query->getSack(), cmp_type);
|
||||||
|
+ if (reldeplist == NULL)
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ int ret = query->addFilter(keyname, reldeplist.get());
|
||||||
|
+ if (ret) {
|
||||||
|
+ return raise_bad_filter();
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
return 1;
|
||||||
|
+ }
|
||||||
|
int ret = query->addFilter(keyname, cmp_type, pset.get());
|
||||||
|
if (ret)
|
||||||
|
return raise_bad_filter();
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
||||||
|
|
||||||
|
From 247f05ef7c3083953e02948ba629cc9ef4184e05 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||||
|
Date: Mon, 15 Apr 2019 09:54:12 +0200
|
||||||
|
Subject: [PATCH 3/3] Add conversion for sequence to reldep in c/c++ interface
|
||||||
|
|
||||||
|
This conversion is supported from Python, but was not implemented in
|
||||||
|
c/c++ code.
|
||||||
|
|
||||||
|
When sequence that requires conversion was used, it failed on assertion.
|
||||||
|
---
|
||||||
|
libdnf.spec | 2 +-
|
||||||
|
libdnf/sack/query.cpp | 29 ++++++++++++++++++++++++++++-
|
||||||
|
2 files changed, 29 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf.spec b/libdnf.spec
|
||||||
|
index d7b3270a..5f0b6529 100644
|
||||||
|
--- a/libdnf.spec
|
||||||
|
+++ b/libdnf.spec
|
||||||
|
@@ -37,7 +37,7 @@
|
||||||
|
%{nil}
|
||||||
|
|
||||||
|
Name: libdnf
|
||||||
|
-Version: 0.35.1
|
||||||
|
+Version: 0.35.2
|
||||||
|
Release: 1%{?dist}
|
||||||
|
Summary: Library providing simplified C and Python API to libsolv
|
||||||
|
License: LGPLv2+
|
||||||
|
diff --git a/libdnf/sack/query.cpp b/libdnf/sack/query.cpp
|
||||||
|
index d5b29a66..949b5ab9 100644
|
||||||
|
--- a/libdnf/sack/query.cpp
|
||||||
|
+++ b/libdnf/sack/query.cpp
|
||||||
|
@@ -882,7 +882,34 @@ Query::addFilter(int keyname, int cmp_type, const char **matches)
|
||||||
|
if (!valid_filter_str(keyname, cmp_type))
|
||||||
|
return DNF_ERROR_BAD_QUERY;
|
||||||
|
pImpl->applied = false;
|
||||||
|
- pImpl->filters.push_back(Filter(keyname, cmp_type, matches));
|
||||||
|
+ switch (keyname) {
|
||||||
|
+ case HY_PKG_CONFLICTS:
|
||||||
|
+ case HY_PKG_ENHANCES:
|
||||||
|
+ case HY_PKG_OBSOLETES:
|
||||||
|
+ case HY_PKG_PROVIDES:
|
||||||
|
+ case HY_PKG_RECOMMENDS:
|
||||||
|
+ case HY_PKG_REQUIRES:
|
||||||
|
+ case HY_PKG_SUGGESTS:
|
||||||
|
+ case HY_PKG_SUPPLEMENTS: {
|
||||||
|
+ DnfSack *sack = pImpl->sack;
|
||||||
|
+ const unsigned nmatches = g_strv_length((gchar**)matches);
|
||||||
|
+ DependencyContainer reldeplist(sack);
|
||||||
|
+ if (cmp_type == HY_GLOB) {
|
||||||
|
+ for (unsigned int i = 0; i < nmatches; ++i) {
|
||||||
|
+ reldeplist.addReldepWithGlob(matches[i]);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ for (unsigned int i = 0; i < nmatches; ++i) {
|
||||||
|
+ reldeplist.addReldep(matches[i]);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return addFilter(keyname, &reldeplist);
|
||||||
|
+ }
|
||||||
|
+ default: {
|
||||||
|
+ pImpl->filters.push_back(Filter(keyname, cmp_type, matches));
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
160
SOURCES/0009-Added-dnf_move_recursive.patch
Normal file
160
SOURCES/0009-Added-dnf_move_recursive.patch
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
From d66dfc2815153b315f5b3fd9d3f93be670def26a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Tue, 3 Sep 2019 12:55:51 +0200
|
||||||
|
Subject: [PATCH 09/10] Added dnf_move_recursive()
|
||||||
|
|
||||||
|
Moves a directory and its contents. If native move operations are
|
||||||
|
supported then this is used, otherwise a copy + delete fallback is used.
|
||||||
|
---
|
||||||
|
libdnf/hy-iutil-private.hpp | 1 +
|
||||||
|
libdnf/hy-iutil.cpp | 95 +++++++++++++++++++++++++++++++++++--
|
||||||
|
2 files changed, 93 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/hy-iutil-private.hpp b/libdnf/hy-iutil-private.hpp
|
||||||
|
index 8b2b06d5..4920ad39 100644
|
||||||
|
--- a/libdnf/hy-iutil-private.hpp
|
||||||
|
+++ b/libdnf/hy-iutil-private.hpp
|
||||||
|
@@ -41,6 +41,7 @@ char *abspath(const char *path);
|
||||||
|
int is_readable_rpm(const char *fn);
|
||||||
|
int mkcachedir(char *path);
|
||||||
|
gboolean mv(const char *old_path, const char *new_path, GError **error);
|
||||||
|
+gboolean dnf_move_recursive(const gchar *src_dir, const gchar *dst_dir, GError **error);
|
||||||
|
char *this_username(void);
|
||||||
|
|
||||||
|
/* misc utils */
|
||||||
|
diff --git a/libdnf/hy-iutil.cpp b/libdnf/hy-iutil.cpp
|
||||||
|
index 2c5af481..d3b57c79 100644
|
||||||
|
--- a/libdnf/hy-iutil.cpp
|
||||||
|
+++ b/libdnf/hy-iutil.cpp
|
||||||
|
@@ -20,12 +20,14 @@
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <errno.h>
|
||||||
|
+#include <dirent.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <linux/limits.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
+#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
@@ -41,9 +43,6 @@ extern "C" {
|
||||||
|
#include <solv/pool_parserpmrichdep.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
-// glib
|
||||||
|
-#include <glib.h>
|
||||||
|
-
|
||||||
|
// hawkey
|
||||||
|
#include "dnf-advisory-private.hpp"
|
||||||
|
#include "dnf-types.h"
|
||||||
|
@@ -58,6 +57,12 @@ extern "C" {
|
||||||
|
#include "utils/bgettext/bgettext-lib.h"
|
||||||
|
#include "sack/packageset.hpp"
|
||||||
|
|
||||||
|
+// glib
|
||||||
|
+#include <glib.h>
|
||||||
|
+#include <gio/gio.h>
|
||||||
|
+
|
||||||
|
+#include <string>
|
||||||
|
+
|
||||||
|
#define BUF_BLOCK 4096
|
||||||
|
#define CHKSUM_TYPE REPOKEY_TYPE_SHA256
|
||||||
|
#define CHKSUM_IDENT "H000"
|
||||||
|
@@ -328,6 +333,90 @@ mv(const char* old_path, const char* new_path, GError** error)
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static gboolean
|
||||||
|
+copyFile(const std::string & srcPath, const std::string & dstPath, GError ** error)
|
||||||
|
+{
|
||||||
|
+ g_autoptr(GFile) src = g_file_new_for_path(srcPath.c_str());
|
||||||
|
+ g_autoptr(GFile) dest = g_file_new_for_path(dstPath.c_str());
|
||||||
|
+ return g_file_copy(src, dest,
|
||||||
|
+ static_cast<GFileCopyFlags>(G_FILE_COPY_NOFOLLOW_SYMLINKS | G_FILE_COPY_ALL_METADATA)
|
||||||
|
+ , NULL, NULL, NULL, error);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static gboolean
|
||||||
|
+copyRecursive(const std::string & srcPath, const std::string & dstPath, GError ** error)
|
||||||
|
+{
|
||||||
|
+ struct stat info;
|
||||||
|
+ if (!stat(srcPath.c_str(), &info)) {
|
||||||
|
+ if (S_ISDIR(info.st_mode)) {
|
||||||
|
+ if (mkdir(dstPath.c_str(), info.st_mode) == -1) {
|
||||||
|
+ auto err = errno;
|
||||||
|
+ g_set_error(error,
|
||||||
|
+ DNF_ERROR,
|
||||||
|
+ DNF_ERROR_INTERNAL_ERROR,
|
||||||
|
+ _("cannot create directory %1$s: %2$s"),
|
||||||
|
+ dstPath.c_str(), strerror(err));
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+ if (auto fd = opendir(srcPath.c_str())) {
|
||||||
|
+ int ret = TRUE;
|
||||||
|
+ while (auto dent = readdir(fd)) {
|
||||||
|
+ auto name = dent->d_name;
|
||||||
|
+ if (name[0] == '.' && (name[1] == '\0' || (name[1] == '.' && name[2] == '\0')))
|
||||||
|
+ continue;
|
||||||
|
+ std::string srcItem = srcPath + "/" + name;
|
||||||
|
+ std::string dstItem = dstPath + "/" + name;
|
||||||
|
+ ret = copyRecursive(srcItem, dstItem, error);
|
||||||
|
+ if (!ret)
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ closedir(fd);
|
||||||
|
+ return ret;
|
||||||
|
+ } else {
|
||||||
|
+ auto err = errno;
|
||||||
|
+ g_set_error(error,
|
||||||
|
+ DNF_ERROR,
|
||||||
|
+ DNF_ERROR_INTERNAL_ERROR,
|
||||||
|
+ _("cannot open directory %1$s: %2$s"),
|
||||||
|
+ srcPath.c_str(), strerror(err));
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ return copyFile(srcPath, dstPath, error);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ auto err = errno;
|
||||||
|
+ g_set_error(error,
|
||||||
|
+ DNF_ERROR,
|
||||||
|
+ DNF_ERROR_INTERNAL_ERROR,
|
||||||
|
+ _("cannot stat path %1$s: %2$s"),
|
||||||
|
+ srcPath.c_str(), strerror(err));
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * dnf_move_recursive:
|
||||||
|
+ * @src_dir: A source directory path
|
||||||
|
+ * @dst_dir: A destination directory path
|
||||||
|
+ * @error: A #GError, or %NULL
|
||||||
|
+ *
|
||||||
|
+ * Moves a directory and its contents. Native move is preferred,
|
||||||
|
+ * if not supported copy and delete fallback is used.
|
||||||
|
+ *
|
||||||
|
+ * Returns: %TRUE on successful move, %FALSE otherwise
|
||||||
|
+ **/
|
||||||
|
+gboolean
|
||||||
|
+dnf_move_recursive(const char * srcDir, const char * dstDir, GError ** error)
|
||||||
|
+{
|
||||||
|
+ if (rename(srcDir, dstDir) == -1) {
|
||||||
|
+ if (!copyRecursive(srcDir, dstDir, error))
|
||||||
|
+ return FALSE;
|
||||||
|
+ return dnf_remove_recursive(srcDir, error);
|
||||||
|
+ }
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
char *
|
||||||
|
this_username(void)
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
@ -0,0 +1,100 @@
|
|||||||
|
From 99d35011a057a112957c6e878f4ac0b7ab0d0e7a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Tue, 3 Sep 2019 13:13:31 +0200
|
||||||
|
Subject: [PATCH 10/10] Use copy+delete fallback if moving of directory failed
|
||||||
|
(RhBug:1700341)
|
||||||
|
|
||||||
|
Uses dnf_move_recursive() instead of g_rename()/rename() for
|
||||||
|
move a directories.
|
||||||
|
The dnf_move_recursive() uses copy+delete fallback if native moving
|
||||||
|
of directory failed (eg. moving between filesystems, overlayfs).
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1700341
|
||||||
|
---
|
||||||
|
libdnf/dnf-repo.cpp | 19 +++++++++----------
|
||||||
|
libdnf/repo/Repo.cpp | 12 ++++++++----
|
||||||
|
2 files changed, 17 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp
|
||||||
|
index a358356a..568e4262 100644
|
||||||
|
--- a/libdnf/dnf-repo.cpp
|
||||||
|
+++ b/libdnf/dnf-repo.cpp
|
||||||
|
@@ -36,6 +36,7 @@
|
||||||
|
#include "conf/OptionBool.hpp"
|
||||||
|
|
||||||
|
#include "hy-repo-private.hpp"
|
||||||
|
+#include "hy-iutil-private.hpp"
|
||||||
|
|
||||||
|
#include <strings.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
@@ -1826,14 +1827,13 @@ dnf_repo_update(DnfRepo *repo,
|
||||||
|
|
||||||
|
/* move the packages directory from the old cache to the new cache */
|
||||||
|
if (g_file_test(priv->packages, G_FILE_TEST_EXISTS)) {
|
||||||
|
- rc = g_rename(priv->packages, priv->packages_tmp);
|
||||||
|
- if (rc != 0) {
|
||||||
|
- ret = FALSE;
|
||||||
|
+ ret = dnf_move_recursive(priv->packages, priv->packages_tmp, &error_local);
|
||||||
|
+ if (!ret) {
|
||||||
|
g_set_error(error,
|
||||||
|
DNF_ERROR,
|
||||||
|
DNF_ERROR_CANNOT_FETCH_SOURCE,
|
||||||
|
- "cannot move %s to %s",
|
||||||
|
- priv->packages, priv->packages_tmp);
|
||||||
|
+ "cannot move %s to %s: %s",
|
||||||
|
+ priv->packages, priv->packages_tmp, error_local->message);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -1844,14 +1844,13 @@ dnf_repo_update(DnfRepo *repo,
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
/* rename .tmp actual name */
|
||||||
|
- rc = g_rename(priv->location_tmp, priv->location);
|
||||||
|
- if (rc != 0) {
|
||||||
|
- ret = FALSE;
|
||||||
|
+ ret = dnf_move_recursive(priv->location_tmp, priv->location, &error_local);
|
||||||
|
+ if (!ret) {
|
||||||
|
g_set_error(error,
|
||||||
|
DNF_ERROR,
|
||||||
|
DNF_ERROR_CANNOT_FETCH_SOURCE,
|
||||||
|
- "cannot move %s to %s",
|
||||||
|
- priv->location_tmp, priv->location);
|
||||||
|
+ "cannot move %s to %s: %s",
|
||||||
|
+ priv->location_tmp, priv->location, error_local->message);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
ret = lr_handle_setopt(priv->repo_handle, error,
|
||||||
|
diff --git a/libdnf/repo/Repo.cpp b/libdnf/repo/Repo.cpp
|
||||||
|
index 23638839..0dbeed8b 100644
|
||||||
|
--- a/libdnf/repo/Repo.cpp
|
||||||
|
+++ b/libdnf/repo/Repo.cpp
|
||||||
|
@@ -31,6 +31,7 @@
|
||||||
|
#include "../hy-iutil.h"
|
||||||
|
#include "../hy-repo-private.hpp"
|
||||||
|
#include "../hy-util-private.hpp"
|
||||||
|
+#include "../hy-iutil-private.hpp"
|
||||||
|
#include "../hy-types.h"
|
||||||
|
#include "libdnf/conf/ConfigParser.hpp"
|
||||||
|
#include "libdnf/utils/File.hpp"
|
||||||
|
@@ -1155,10 +1156,13 @@ void Repo::Impl::fetch(const std::string & destdir, std::unique_ptr<LrHandle> &&
|
||||||
|
}
|
||||||
|
}
|
||||||
|
auto tempElement = tmpdir + "/" + elName;
|
||||||
|
- if (rename(tempElement.c_str(), targetElement.c_str()) == -1) {
|
||||||
|
- const char * errTxt = strerror(errno);
|
||||||
|
- throw std::runtime_error(tfm::format(
|
||||||
|
- _("Cannot rename directory \"%s\" to \"%s\": %s"), tempElement, targetElement, errTxt));
|
||||||
|
+ GError * error = NULL;
|
||||||
|
+ if (!dnf_move_recursive(tempElement.c_str(), targetElement.c_str(), &error)) {
|
||||||
|
+ std::string errTxt = tfm::format(
|
||||||
|
+ _("Cannot rename directory \"%s\" to \"%s\": %s"),
|
||||||
|
+ tempElement, targetElement, error->message);
|
||||||
|
+ g_error_free(error);
|
||||||
|
+ throw std::runtime_error(errTxt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
@ -0,0 +1,100 @@
|
|||||||
|
From 865b0b958c044af966f89520ed97fad9b987f006 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Thu, 5 Sep 2019 09:20:20 +0200
|
||||||
|
Subject: [PATCH 11/13] Expose dnf_copy_file and dnf_copy_recursive in private
|
||||||
|
hpp
|
||||||
|
|
||||||
|
Renaming:
|
||||||
|
copyFile -> dnf_copy_file
|
||||||
|
copyRecursive -> dnf_copy_recursice
|
||||||
|
|
||||||
|
Exposes newnames in private hpp to be possible use it internally
|
||||||
|
in libdnf.
|
||||||
|
|
||||||
|
Closes: #789
|
||||||
|
Approved by: m-blaha
|
||||||
|
---
|
||||||
|
libdnf/hy-iutil-private.hpp | 2 ++
|
||||||
|
libdnf/hy-iutil.cpp | 20 ++++++++++----------
|
||||||
|
2 files changed, 12 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/hy-iutil-private.hpp b/libdnf/hy-iutil-private.hpp
|
||||||
|
index 4920ad39..2d84cc21 100644
|
||||||
|
--- a/libdnf/hy-iutil-private.hpp
|
||||||
|
+++ b/libdnf/hy-iutil-private.hpp
|
||||||
|
@@ -41,6 +41,8 @@ char *abspath(const char *path);
|
||||||
|
int is_readable_rpm(const char *fn);
|
||||||
|
int mkcachedir(char *path);
|
||||||
|
gboolean mv(const char *old_path, const char *new_path, GError **error);
|
||||||
|
+gboolean dnf_copy_file(const std::string & srcPath, const std::string & dstPath, GError ** error);
|
||||||
|
+gboolean dnf_copy_recursive(const std::string & srcPath, const std::string & dstPath, GError ** error);
|
||||||
|
gboolean dnf_move_recursive(const gchar *src_dir, const gchar *dst_dir, GError **error);
|
||||||
|
char *this_username(void);
|
||||||
|
|
||||||
|
diff --git a/libdnf/hy-iutil.cpp b/libdnf/hy-iutil.cpp
|
||||||
|
index d3b57c79..5401a9cf 100644
|
||||||
|
--- a/libdnf/hy-iutil.cpp
|
||||||
|
+++ b/libdnf/hy-iutil.cpp
|
||||||
|
@@ -333,18 +333,18 @@ mv(const char* old_path, const char* new_path, GError** error)
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static gboolean
|
||||||
|
-copyFile(const std::string & srcPath, const std::string & dstPath, GError ** error)
|
||||||
|
+gboolean
|
||||||
|
+dnf_copy_file(const std::string & srcPath, const std::string & dstPath, GError ** error)
|
||||||
|
{
|
||||||
|
g_autoptr(GFile) src = g_file_new_for_path(srcPath.c_str());
|
||||||
|
g_autoptr(GFile) dest = g_file_new_for_path(dstPath.c_str());
|
||||||
|
return g_file_copy(src, dest,
|
||||||
|
- static_cast<GFileCopyFlags>(G_FILE_COPY_NOFOLLOW_SYMLINKS | G_FILE_COPY_ALL_METADATA)
|
||||||
|
- , NULL, NULL, NULL, error);
|
||||||
|
+ static_cast<GFileCopyFlags>(G_FILE_COPY_NOFOLLOW_SYMLINKS | G_FILE_COPY_ALL_METADATA),
|
||||||
|
+ NULL, NULL, NULL, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static gboolean
|
||||||
|
-copyRecursive(const std::string & srcPath, const std::string & dstPath, GError ** error)
|
||||||
|
+gboolean
|
||||||
|
+dnf_copy_recursive(const std::string & srcPath, const std::string & dstPath, GError ** error)
|
||||||
|
{
|
||||||
|
struct stat info;
|
||||||
|
if (!stat(srcPath.c_str(), &info)) {
|
||||||
|
@@ -359,14 +359,14 @@ copyRecursive(const std::string & srcPath, const std::string & dstPath, GError *
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (auto fd = opendir(srcPath.c_str())) {
|
||||||
|
- int ret = TRUE;
|
||||||
|
+ gboolean ret = TRUE;
|
||||||
|
while (auto dent = readdir(fd)) {
|
||||||
|
auto name = dent->d_name;
|
||||||
|
if (name[0] == '.' && (name[1] == '\0' || (name[1] == '.' && name[2] == '\0')))
|
||||||
|
continue;
|
||||||
|
std::string srcItem = srcPath + "/" + name;
|
||||||
|
std::string dstItem = dstPath + "/" + name;
|
||||||
|
- ret = copyRecursive(srcItem, dstItem, error);
|
||||||
|
+ ret = dnf_copy_recursive(srcItem, dstItem, error);
|
||||||
|
if (!ret)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -382,7 +382,7 @@ copyRecursive(const std::string & srcPath, const std::string & dstPath, GError *
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
- return copyFile(srcPath, dstPath, error);
|
||||||
|
+ return dnf_copy_file(srcPath, dstPath, error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
auto err = errno;
|
||||||
|
@@ -410,7 +410,7 @@ gboolean
|
||||||
|
dnf_move_recursive(const char * srcDir, const char * dstDir, GError ** error)
|
||||||
|
{
|
||||||
|
if (rename(srcDir, dstDir) == -1) {
|
||||||
|
- if (!copyRecursive(srcDir, dstDir, error))
|
||||||
|
+ if (!dnf_copy_recursive(srcDir, dstDir, error))
|
||||||
|
return FALSE;
|
||||||
|
return dnf_remove_recursive(srcDir, error);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
@ -0,0 +1,60 @@
|
|||||||
|
From 842c0057f82a587f8dd2649d920420b7d888fddf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Thu, 5 Sep 2019 13:55:00 +0200
|
||||||
|
Subject: [PATCH 12/13] Add dnf_remove_recursive_v2() that support unlink of
|
||||||
|
file
|
||||||
|
|
||||||
|
The dnf_remove_recursive() accepts only directory as argument.
|
||||||
|
The new function supports unlink of files.
|
||||||
|
|
||||||
|
Closes: #789
|
||||||
|
Approved by: m-blaha
|
||||||
|
---
|
||||||
|
libdnf/hy-iutil-private.hpp | 1 +
|
||||||
|
libdnf/hy-iutil.cpp | 18 ++++++++++++++++++
|
||||||
|
2 files changed, 19 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libdnf/hy-iutil-private.hpp b/libdnf/hy-iutil-private.hpp
|
||||||
|
index 2d84cc21..bf1714e9 100644
|
||||||
|
--- a/libdnf/hy-iutil-private.hpp
|
||||||
|
+++ b/libdnf/hy-iutil-private.hpp
|
||||||
|
@@ -41,6 +41,7 @@ char *abspath(const char *path);
|
||||||
|
int is_readable_rpm(const char *fn);
|
||||||
|
int mkcachedir(char *path);
|
||||||
|
gboolean mv(const char *old_path, const char *new_path, GError **error);
|
||||||
|
+gboolean dnf_remove_recursive_v2(const gchar *path, GError **error);
|
||||||
|
gboolean dnf_copy_file(const std::string & srcPath, const std::string & dstPath, GError ** error);
|
||||||
|
gboolean dnf_copy_recursive(const std::string & srcPath, const std::string & dstPath, GError ** error);
|
||||||
|
gboolean dnf_move_recursive(const gchar *src_dir, const gchar *dst_dir, GError **error);
|
||||||
|
diff --git a/libdnf/hy-iutil.cpp b/libdnf/hy-iutil.cpp
|
||||||
|
index 5401a9cf..e1a1906a 100644
|
||||||
|
--- a/libdnf/hy-iutil.cpp
|
||||||
|
+++ b/libdnf/hy-iutil.cpp
|
||||||
|
@@ -333,6 +333,24 @@ mv(const char* old_path, const char* new_path, GError** error)
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * dnf_remove_recursive_v2:
|
||||||
|
+ * @directory: A directory path
|
||||||
|
+ * @error: A #GError, or %NULL
|
||||||
|
+ *
|
||||||
|
+ * Removes a file or a directory and its contents.
|
||||||
|
+ *
|
||||||
|
+ * Returns: %FALSE if an error was set
|
||||||
|
+ **/
|
||||||
|
+gboolean
|
||||||
|
+dnf_remove_recursive_v2(const gchar *path, GError **error)
|
||||||
|
+{
|
||||||
|
+ if (g_file_test(path, G_FILE_TEST_IS_DIR))
|
||||||
|
+ return dnf_remove_recursive(path, error);
|
||||||
|
+ else
|
||||||
|
+ return dnf_ensure_file_unlinked(path, error);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
gboolean
|
||||||
|
dnf_copy_file(const std::string & srcPath, const std::string & dstPath, GError ** error)
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
@ -0,0 +1,42 @@
|
|||||||
|
From dab2ade3727dbf61dbcfd58d7a2a3fdbbb36116e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Thu, 5 Sep 2019 14:01:26 +0200
|
||||||
|
Subject: [PATCH 13/13] Fix: dnf_move_recursive() for file in fallback mode
|
||||||
|
|
||||||
|
The dnf_move_recursive() had problem with moving a file in the fallback
|
||||||
|
mode. The file was copied but removing of its source failed.
|
||||||
|
The dnf_remove_recursive_v2() is used now to resolve the issue.
|
||||||
|
|
||||||
|
Related to https://bugzilla.redhat.com/show_bug.cgi?id=1700341
|
||||||
|
|
||||||
|
Closes: #789
|
||||||
|
Approved by: m-blaha
|
||||||
|
---
|
||||||
|
libdnf/hy-iutil.cpp | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/hy-iutil.cpp b/libdnf/hy-iutil.cpp
|
||||||
|
index e1a1906a..0bd0e245 100644
|
||||||
|
--- a/libdnf/hy-iutil.cpp
|
||||||
|
+++ b/libdnf/hy-iutil.cpp
|
||||||
|
@@ -419,7 +419,7 @@ dnf_copy_recursive(const std::string & srcPath, const std::string & dstPath, GEr
|
||||||
|
* @dst_dir: A destination directory path
|
||||||
|
* @error: A #GError, or %NULL
|
||||||
|
*
|
||||||
|
- * Moves a directory and its contents. Native move is preferred,
|
||||||
|
+ * Moves a file or a directory and its contents. Native move is preferred,
|
||||||
|
* if not supported copy and delete fallback is used.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE on successful move, %FALSE otherwise
|
||||||
|
@@ -430,7 +430,7 @@ dnf_move_recursive(const char * srcDir, const char * dstDir, GError ** error)
|
||||||
|
if (rename(srcDir, dstDir) == -1) {
|
||||||
|
if (!dnf_copy_recursive(srcDir, dstDir, error))
|
||||||
|
return FALSE;
|
||||||
|
- return dnf_remove_recursive(srcDir, error);
|
||||||
|
+ return dnf_remove_recursive_v2(srcDir, error);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From a9e281087d075f798ac64dad657d34816d533d2a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||||
|
Date: Tue, 3 Sep 2019 11:01:23 +0200
|
||||||
|
Subject: [PATCH] Mark job goal.upgrade with sltr as targeted
|
||||||
|
|
||||||
|
It allows to keep installed packages in upgrade set.
|
||||||
|
|
||||||
|
It also prevents from reinstalling of modified packages with same NEVRA.
|
||||||
|
---
|
||||||
|
libdnf/goal/Goal.cpp | 2 +-
|
||||||
|
libdnf/goal/Goal.hpp | 6 ++++--
|
||||||
|
2 files changed, 5 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/goal/Goal.cpp b/libdnf/goal/Goal.cpp
|
||||||
|
index b69be19..a38cbb4 100644
|
||||||
|
--- a/libdnf/goal/Goal.cpp
|
||||||
|
+++ b/libdnf/goal/Goal.cpp
|
||||||
|
@@ -767,7 +767,7 @@ void
|
||||||
|
Goal::upgrade(HySelector sltr)
|
||||||
|
{
|
||||||
|
pImpl->actions = static_cast<DnfGoalActions>(pImpl->actions | DNF_UPGRADE);
|
||||||
|
- sltrToJob(sltr, &pImpl->staging, SOLVER_UPDATE);
|
||||||
|
+ sltrToJob(sltr, &pImpl->staging, SOLVER_UPDATE|SOLVER_TARGETED);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
diff --git a/libdnf/goal/Goal.hpp b/libdnf/goal/Goal.hpp
|
||||||
|
index f33dfa2..d701317 100644
|
||||||
|
--- a/libdnf/goal/Goal.hpp
|
||||||
|
+++ b/libdnf/goal/Goal.hpp
|
||||||
|
@@ -86,8 +86,10 @@ public:
|
||||||
|
/**
|
||||||
|
* @brief If selector ill formed, it rises std::runtime_error()
|
||||||
|
*
|
||||||
|
- * @param sltr p_sltr: It should contain only upgrades with obsoletes otherwise it can try to
|
||||||
|
- * reinstall installonly packages.
|
||||||
|
+ * @param sltr p_sltr: It contains upgrade-to packages and obsoletes. The presence of installed
|
||||||
|
+ * packages prevents reinstalling packages with the same NEVRA but changed contant. To honor repo
|
||||||
|
+ * priority all relevant packages must be present. To upgrade package foo from priority repo, all
|
||||||
|
+ * installed and available packages of the foo must be in selector plus obsoletes of foo.
|
||||||
|
*/
|
||||||
|
void upgrade(HySelector sltr);
|
||||||
|
void userInstalled(DnfPackage *pkg);
|
||||||
|
--
|
||||||
|
libgit2 0.28.2
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From c235dae84d1b45911f6de1c5d31fedf4856c0d42 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||||
|
Date: Wed, 11 Sep 2019 13:26:43 +0200
|
||||||
|
Subject: [PATCH] Apply targeted upgrade only for selector with packages
|
||||||
|
|
||||||
|
It resolves problem when selector with name filter is used. Then
|
||||||
|
targeted transaction ignores obsoletes.
|
||||||
|
|
||||||
|
Closes: #793
|
||||||
|
Approved by: jrohel
|
||||||
|
---
|
||||||
|
libdnf/goal/Goal.cpp | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/goal/Goal.cpp b/libdnf/goal/Goal.cpp
|
||||||
|
index a38cbb4..88e7b8c 100644
|
||||||
|
--- a/libdnf/goal/Goal.cpp
|
||||||
|
+++ b/libdnf/goal/Goal.cpp
|
||||||
|
@@ -767,7 +767,11 @@ void
|
||||||
|
Goal::upgrade(HySelector sltr)
|
||||||
|
{
|
||||||
|
pImpl->actions = static_cast<DnfGoalActions>(pImpl->actions | DNF_UPGRADE);
|
||||||
|
- sltrToJob(sltr, &pImpl->staging, SOLVER_UPDATE|SOLVER_TARGETED);
|
||||||
|
+ auto flags = SOLVER_UPDATE;
|
||||||
|
+ if (sltr->getPkgs()) {
|
||||||
|
+ flags |= SOLVER_TARGETED;
|
||||||
|
+ }
|
||||||
|
+ sltrToJob(sltr, &pImpl->staging, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
--
|
||||||
|
libgit2 0.28.2
|
||||||
|
|
572
SPECS/libdnf.spec
Normal file
572
SPECS/libdnf.spec
Normal file
@ -0,0 +1,572 @@
|
|||||||
|
%global libsolv_version 0.7.4-1
|
||||||
|
%global libmodulemd_version 1.6.1
|
||||||
|
%global librepo_version 1.10.0
|
||||||
|
%global dnf_conflict 4.2.7-7
|
||||||
|
%global swig_version 3.0.12
|
||||||
|
|
||||||
|
%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}
|
||||||
|
%global rpm_version 4.14.2
|
||||||
|
%else
|
||||||
|
%global rpm_version 4.14.2.1-4
|
||||||
|
%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
|
||||||
|
|
||||||
|
%global _cmake_opts \\\
|
||||||
|
-DENABLE_RHSM_SUPPORT=%{?with_rhsm:ON}%{!?with_rhsm:OFF} \\\
|
||||||
|
%{nil}
|
||||||
|
|
||||||
|
Name: libdnf
|
||||||
|
Version: 0.35.1
|
||||||
|
Release: 9%{?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
|
||||||
|
# Temporary patch to not fail on modular RPMs without modular metadata
|
||||||
|
# until the infrastructure is ready
|
||||||
|
Patch2: 0002-Fix-attaching-and-detaching-of-libsolvRepo.patch
|
||||||
|
Patch3: 0003-Typo-in-error-message-RhBug1726661.patch
|
||||||
|
Patch4: 0004-Update-localizations-from-zanata-RhBug1689991.patch
|
||||||
|
Patch5: 0005-context-Fix-Dont-disable-nonexistent-but-required-repositories-RhBug1689331.patch
|
||||||
|
Patch6: 0006-config-ignore-trailing-blank-lines-of-multiline-value-RhBug1722493.patch
|
||||||
|
Patch7: 0007-Re-size-includes-map-before-re-computation-RhBug1725213.patch
|
||||||
|
Patch8: 0008-Add-suport-for-query-sequence-conversions.patch
|
||||||
|
Patch9: 0009-Added-dnf_move_recursive.patch
|
||||||
|
Patch10: 0010-Use-copy-delete-fallback-if-moving-of-directory-fail.patch
|
||||||
|
Patch11: 0011-Expose-dnf_copy_file-and-dnf_copy_recursive-in-priva.patch
|
||||||
|
Patch12: 0012-Add-dnf_remove_recursive_v2-that-support-unlink-of-f.patch
|
||||||
|
Patch13: 0013-Fix-dnf_move_recursive-for-file-in-fallback-mode.patch
|
||||||
|
Patch14: 0014-Mark-job-goalupgrade-with-sltr-as-targeted.patch
|
||||||
|
Patch15: 0015-Apply-targeted-upgrade-only-for-selector-with-packages.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 >= %{rpm_version}
|
||||||
|
%if %{with rhsm}
|
||||||
|
BuildRequires: pkgconfig(librhsm) >= 0.0.3
|
||||||
|
%endif
|
||||||
|
BuildRequires: pkgconfig(sqlite3)
|
||||||
|
BuildRequires: pkgconfig(json-c)
|
||||||
|
BuildRequires: pkgconfig(cppunit)
|
||||||
|
BuildRequires: pkgconfig(libcrypto)
|
||||||
|
BuildRequires: pkgconfig(modulemd) >= %{libmodulemd_version}
|
||||||
|
BuildRequires: pkgconfig(smartcols)
|
||||||
|
BuildRequires: gettext
|
||||||
|
BuildRequires: gpgme-devel
|
||||||
|
|
||||||
|
Requires: libmodulemd%{?_isa} >= %{libmodulemd_version}
|
||||||
|
Requires: libsolv%{?_isa} >= %{libsolv_version}
|
||||||
|
Requires: librepo%{?_isa} >= %{librepo_version}
|
||||||
|
|
||||||
|
%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%{?rhel} == 7
|
||||||
|
BuildRequires: python-sphinx
|
||||||
|
BuildRequires: swig3 >= %{swig_version}
|
||||||
|
%else
|
||||||
|
BuildRequires: python2-sphinx
|
||||||
|
BuildRequires: swig >= %{swig_version}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%description -n python2-%{name}
|
||||||
|
Python 2 bindings for the libdnf library.
|
||||||
|
%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: 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 # 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 # with python2
|
||||||
|
%if %{with python3}
|
||||||
|
mkdir build-py3
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%build
|
||||||
|
%if %{with python2}
|
||||||
|
pushd build-py2
|
||||||
|
%cmake -DPYTHON_DESIRED:FILEPATH=%{__python2} -DWITH_MAN=OFF ../ %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
|
||||||
|
%make_build
|
||||||
|
popd
|
||||||
|
%endif # with python2
|
||||||
|
|
||||||
|
%if %{with python3}
|
||||||
|
pushd build-py3
|
||||||
|
%cmake -DPYTHON_DESIRED:FILEPATH=%{__python3} -DWITH_GIR=0 -DWITH_MAN=0 -Dgtkdoc=0 ../ %{!?with_valgrind:-DDISABLE_VALGRIND=1} %{_cmake_opts}
|
||||||
|
%make_build
|
||||||
|
popd
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%check
|
||||||
|
if [ "$(id -u)" == "0" ] ; then
|
||||||
|
cat <<ERROR 1>&2
|
||||||
|
Package tests cannot be run under superuser account.
|
||||||
|
Please build the package as non-root user.
|
||||||
|
ERROR
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
%if %{with python2}
|
||||||
|
pushd build-py2
|
||||||
|
make ARGS="-V" test
|
||||||
|
popd
|
||||||
|
%endif # with python2
|
||||||
|
%if %{with python3}
|
||||||
|
# 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
|
||||||
|
|
||||||
|
%install
|
||||||
|
%if %{with python2}
|
||||||
|
pushd build-py2
|
||||||
|
%make_install
|
||||||
|
popd
|
||||||
|
%endif # with python2
|
||||||
|
%if %{with python3}
|
||||||
|
pushd build-py3
|
||||||
|
%make_install
|
||||||
|
popd
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%find_lang %{name}
|
||||||
|
|
||||||
|
%if 0%{?rhel} && 0%{?rhel} <= 7
|
||||||
|
%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 # with python2
|
||||||
|
|
||||||
|
%if %{with python3}
|
||||||
|
%files -n python3-%{name}
|
||||||
|
%{python3_sitearch}/%{name}/
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with python2}
|
||||||
|
%files -n python2-hawkey
|
||||||
|
%{python2_sitearch}/hawkey/
|
||||||
|
%endif # with python2
|
||||||
|
|
||||||
|
%if %{with python3}
|
||||||
|
%files -n python3-hawkey
|
||||||
|
%{python3_sitearch}/hawkey/
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Wed Oct 16 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.35.1-9
|
||||||
|
- Prevent reinstalling modified packages with same NEVRA (RhBug:1728252,1644241,1760825)
|
||||||
|
|
||||||
|
* Fri Sep 06 2019 Marek Blaha <mblaha@redhat.com> - 0.35.1-8
|
||||||
|
- Enhanced fix of moving directories in minimal container (RhBug:1700341)
|
||||||
|
|
||||||
|
* Thu Sep 05 2019 Jaroslav Mracek <jmracek@redhat.com> - 0.35.1-7
|
||||||
|
- Remove patch to not fail when installing modular RPMs without modular metadata
|
||||||
|
|
||||||
|
* Thu Sep 05 2019 Marek Blaha <mblaha@redhat.com> - 0.35.1-6
|
||||||
|
- Fix moving directories in minimal container (RhBug:1700341)
|
||||||
|
|
||||||
|
* Tue Aug 06 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.35.1-5
|
||||||
|
- Add suport for query sequence conversions
|
||||||
|
|
||||||
|
* Thu Aug 01 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 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 <mblaha@redhat.com> - 0.35.1-3
|
||||||
|
- Fix attaching and detaching of libsolvRepo and repo_internalize_trigger()
|
||||||
|
(RhBug:1730224)
|
||||||
|
|
||||||
|
* Thu Jul 04 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.35.1-2
|
||||||
|
- Add patch to not fail when installing modular RPMs without modular metadata
|
||||||
|
|
||||||
|
* Tue Jun 11 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 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 <pkratoch@redhat.com> - 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 <pkratoch@redhat.com> - 0.22.5-6
|
||||||
|
- Rebuild for libsolv soname bump (in libsolve update to 0.7.4)
|
||||||
|
|
||||||
|
* Wed Apr 03 2019 Jaroslav Mracek <jmracek@redhat.com> - 0.22.5-5
|
||||||
|
- Backport patches to set default to skip_if_unavailable to false (RhBug:1692452)
|
||||||
|
|
||||||
|
* Tue Feb 12 2019 Jaroslav Mracek <jmracek@redhat.com> - 0.22.5-4
|
||||||
|
- Backport patch to exclude module pkgs that have conflict (RhBug:1670496)
|
||||||
|
|
||||||
|
* Fri Feb 08 2019 Jaroslav Mracek <jmracek@redhat.com> - 0.22.5-3
|
||||||
|
- Backport patches to add support for modular updateinfoxml applicability
|
||||||
|
|
||||||
|
* Wed Feb 06 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.22.5-2
|
||||||
|
- Add patch: Add best as default behavior (RhBug1670776)
|
||||||
|
|
||||||
|
* Mon Dec 17 2018 Daniel Mach <dmach@redhat.com> - 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 <jmracek@redhat.com> - 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 <jmracek@redhat.com> - 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 <jmracek@redhat.com> - 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 <jmracek@redhat.com> - 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 <jmracek@redhat.com> - 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 <jmracek@redhat.com> - 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 <dmach@redhat.com> - 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 <dmach@redhat.com> - 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 <dmach@redhat.com> - 0.17.2-1
|
||||||
|
- [sqlite3] Change db locking mode to DEFAULT.
|
||||||
|
- [doc] Add libsmartcols-devel to devel deps.
|
||||||
|
|
||||||
|
* Mon Aug 13 2018 Daniel Mach <dmach@redhat.com> - 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 <dmach@redhat.com> - 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 <dmach@redhat.com> - 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 <dmach@redhat.com> - 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 <ignatenko@redhat.com> - 0.15.2-2
|
||||||
|
- Fix librhsm support logic
|
||||||
|
|
||||||
|
* Fri Jun 29 2018 Jaroslav Mracek <jmracek@redhat.com> - 0.15.2-1
|
||||||
|
- Update to 0.15.1
|
||||||
|
- Resolves: rhbz#1595487
|
||||||
|
|
||||||
|
* Fri Jun 29 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.15.1-2
|
||||||
|
- Restore proper ldconfig_scriptlets
|
||||||
|
|
||||||
|
* Tue Jun 26 2018 Jaroslav Mracek <jmracek@redhat.com> - 0.15.1-1
|
||||||
|
- Update to 0.15.1
|
||||||
|
|
||||||
|
* Fri Jun 15 2018 Miro Hrončok <mhroncok@redhat.com> - 0.11.1-6
|
||||||
|
- Rebuilt for Python 3.7
|
||||||
|
|
||||||
|
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.1-5
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jan 30 2018 Igor Gnatenko <ignatenko@redhat.com> - 0.11.1-4
|
||||||
|
- Switch to %%ldconfig_scriptlets
|
||||||
|
|
||||||
|
* Tue Nov 07 2017 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.11.1-3
|
||||||
|
- Use better Obsoletes for platform-python
|
||||||
|
|
||||||
|
* Fri Nov 03 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.11.1-2
|
||||||
|
- Remove platform-python subpackage
|
||||||
|
|
||||||
|
* Mon Oct 16 2017 Jaroslav Mracek <jmracek@redhat.com> - 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 <ignatenko@redhat.com> - 0.11.0-1
|
||||||
|
- Update to 0.11.0
|
||||||
|
|
||||||
|
* Mon Oct 02 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.10.1-2
|
||||||
|
- Rerelease of 0.10.1-1
|
||||||
|
|
||||||
|
* Wed Sep 27 2017 Jaroslav Mracek <jmracek@redhat.com> - 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 <ignatenko@redhat.com> - 0.9.3-8
|
||||||
|
- Disable platform python on old releases
|
||||||
|
|
||||||
|
* Tue Aug 15 2017 Lumír Balhar <lbalhar@redhat.com> - 0.9.3-7
|
||||||
|
- Add platform-python subpackage
|
||||||
|
|
||||||
|
* Fri Aug 11 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.3-6
|
||||||
|
- Rebuilt after RPM update (№ 3)
|
||||||
|
|
||||||
|
* Thu Aug 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.3-5
|
||||||
|
- Rebuilt for RPM soname bump
|
||||||
|
|
||||||
|
* Thu Aug 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.3-4
|
||||||
|
- Rebuilt for RPM soname bump
|
||||||
|
|
||||||
|
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.3-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.3-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jul 24 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.9.3-1
|
||||||
|
- Update to 0.9.3
|
||||||
|
|
||||||
|
* Sat Jul 01 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.9.2-1
|
||||||
|
- Update to 0.9.2
|
||||||
|
|
||||||
|
* Mon Jun 12 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.9.1-1
|
||||||
|
- Update to 0.9.1
|
||||||
|
|
||||||
|
* Mon May 22 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.9.0-1
|
||||||
|
- Update to 0.9.0
|
||||||
|
|
||||||
|
* Tue May 02 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.8.2-1
|
||||||
|
- Update to 0.8.2
|
||||||
|
|
||||||
|
* Fri Mar 24 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.8.1-1
|
||||||
|
- Update to 0.8.1
|
||||||
|
|
||||||
|
* Tue Mar 21 2017 Jaroslav Mracek <jmracek@redhat.com> - 0.8.0-1
|
||||||
|
- Update to 0.8.0
|
||||||
|
|
||||||
|
* Mon Feb 20 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.4-1
|
||||||
|
- Update to 0.7.4
|
||||||
|
|
||||||
|
* Fri Feb 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.3-1
|
||||||
|
- Update to 0.7.3
|
||||||
|
|
||||||
|
* Wed Feb 08 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.2-1
|
||||||
|
- 0.7.2
|
||||||
|
|
||||||
|
* Fri Jan 06 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.7.1-1
|
||||||
|
- 0.7.1
|
||||||
|
|
||||||
|
* Wed Dec 21 2016 Peter Robinson <pbrobinson@fedoraproject.org> 0.7.0-0.7gitf9b798c
|
||||||
|
- Rebuild for Python 3.6
|
||||||
|
|
||||||
|
* Mon Dec 19 2016 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 0.7.0-0.6gitf9b798c
|
||||||
|
- Use new upstream URL
|
||||||
|
|
||||||
|
* Tue Dec 13 2016 Stratakis Charalampos <cstratak@redhat.com> - 0.7.0-0.5gitf9b798c
|
||||||
|
- Rebuild for Python 3.6
|
||||||
|
|
||||||
|
* Tue Dec 06 2016 Martin Hatina <mhatina@redhat.com> - 0.7.0-0.4gitf9b798c
|
||||||
|
- Increase conflict version of dnf
|
||||||
|
|
||||||
|
* Thu Dec 01 2016 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 0.7.0-0.3gitf9b798c
|
||||||
|
- Update to latest snapshot
|
||||||
|
|
||||||
|
* Fri Nov 04 2016 Igor Gnatenko <ignatenko@redhat.com> - 0.7.0-0.2git8bd77f8
|
||||||
|
- Update to latest snapshot
|
||||||
|
|
||||||
|
* Thu Sep 29 2016 Igor Gnatenko <ignatenko@redhat.com> - 0.7.0-0.1git179c0a6
|
||||||
|
- Initial package
|
Loading…
Reference in New Issue
Block a user