From db1a2b07e1fdafa239d217c2423cef052faad10d Mon Sep 17 00:00:00 2001
From: Michael Simacek <msimacek@redhat.com>
Date: Thu, 2 Aug 2018 17:10:59 +0200
Subject: [PATCH] Port to new hawkey
Stop using methods that were removed in new libdnf/hawkey.
Changes the format of dependency problems to a more verbose one which
mostly matches what dnf prints.
---
koschei/backend/depsolve.py | 18 +++++++++++-------
koschei/backend/repo_util.py | 2 +-
koschei/frontend/model_additions.py | 11 +++++++++--
.../backend/services/copr_resolver.py | 2 +-
4 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/koschei/backend/depsolve.py b/koschei/backend/depsolve.py
index 9046963..0ddfe65 100644
--- a/koschei/backend/depsolve.py
+++ b/koschei/backend/depsolve.py
@@ -71,13 +71,17 @@ def run_goal(sack, br, group):
problems.append("No package found for: {}".format(r))
else:
goal.install(select=sltr)
- if not problems:
- kwargs = {}
- if get_config('dependency.ignore_weak_deps'):
- kwargs = {'ignore_weak_deps': True}
- resolved = goal.run(**kwargs)
- return resolved, goal.problems, goal.list_installs() if resolved else None
- return False, problems, None
+ kwargs = {}
+ if get_config('dependency.ignore_weak_deps'):
+ kwargs = {'ignore_weak_deps': True}
+ goal.run(**kwargs)
+ for first, *rest in goal.problem_rules():
+ problems.append(
+ f"Problem: {first}" +
+ ''.join(f'\n - {problem}' for problem in rest)
+ )
+ resolved = not problems
+ return resolved, problems, goal.list_installs() if resolved else None
class DependencyWithDistance(object):
diff --git a/koschei/backend/repo_util.py b/koschei/backend/repo_util.py
index 437b606..2772d5b 100644
--- a/koschei/backend/repo_util.py
+++ b/koschei/backend/repo_util.py
@@ -94,5 +94,5 @@ def load_sack(repo_dir, repo_descriptor, download=False):
sack = hawkey.Sack(arch=for_arch, cachedir=cache_dir)
repo = get_repo(repo_dir, repo_descriptor, download)
if repo:
- sack.load_yum_repo(repo, load_filelists=True, build_cache=download)
+ sack.load_repo(repo, load_filelists=True, build_cache=download)
return sack
diff --git a/koschei/frontend/model_additions.py b/koschei/frontend/model_additions.py
index 60beef9..c85ab1d 100644
--- a/koschei/frontend/model_additions.py
+++ b/koschei/frontend/model_additions.py
@@ -24,12 +24,12 @@ and adds few model specific global functions to templates.
import re
-from flask import url_for
+from flask import url_for, escape
from jinja2 import Markup
from koschei.frontend.base import app
from koschei.models import (
- Package, Build, ResolutionChange, AppliedChange, UnappliedChange,
+ Package, Build, ResolutionChange, AppliedChange, UnappliedChange, ResolutionProblem,
)
@@ -155,6 +155,13 @@ def resolution_change_css_class(resolution_change):
ResolutionChange.css_class = property(resolution_change_css_class)
+def problem_html(self):
+ return str(escape(str(self))).replace('\n', '<br>')
+
+
+ResolutionProblem.__html__ = problem_html
+
+
EVR_SEPARATORS_RE = re.compile(r'([-._~])')
diff --git a/koschei/plugins/copr_plugin/backend/services/copr_resolver.py b/koschei/plugins/copr_plugin/backend/services/copr_resolver.py
index b0ace09..d58fef2 100644
--- a/koschei/plugins/copr_plugin/backend/services/copr_resolver.py
+++ b/koschei/plugins/copr_plugin/backend/services/copr_resolver.py
@@ -77,7 +77,7 @@ class CoprResolver(Service):
repo = repo_util.get_repo(repo_dir, desc, download=True)
if not repo:
raise RequestProcessingError("Cannot download user repo")
- sack.load_yum_repo(repo, load_filelists=True)
+ sack.load_repo(repo, load_filelists=True)
if get_config('copr.overriding_by_exclusions', True):
exclusions = []
pkg_by_name = defaultdict(list)
--
2.17.2