lorax/0001-Don-t-try-to-append-to-DNF-config-value-that-can-t-t.patch

69 lines
2.8 KiB
Diff

From a7c2d7d66b1a4df5b06a0c5b401558531199f791 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Wed, 26 Sep 2018 18:14:06 -0700
Subject: [PATCH] Don't try to append to DNF config value that can't take it
See https://bugzilla.redhat.com/show_bug.cgi?id=1595917 and
https://github.com/rpm-software-management/dnf/pull/1200 for
more on this. Briefly, DNF before 3.0 presented this config
value as a list...and mutating it worked. DNF from 3.0 until
3.6 presented it as a list...mutating it didn't work, but also
didn't *fail*, so this has actually not been doing anything on
DNF 3.x but we haven't noticed.
In DNF 3.6 values like this are presented as tuples instead of
lists, to try and catch usages like this, and it worked! We
need to change this one.
There is an additional weirdness here. tsflags is actually, in
libdnf terms, an OptionStringListAppend option: that means that
when something tries to *set* its value, the new value is just
appended to the existing list of values. This is very weird
behaviour when you're interacting with it like this, but
happens to be quite useful, as we can just 'set' the value to
a list like this and it will actually get appended (which is
what we want), and this one syntax happens to work correctly in
DNF 2.x, 3.0 through 3.5.1, and 3.6.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
src/pylorax/api/dnfbase.py | 5 ++++-
src/sbin/lorax | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/pylorax/api/dnfbase.py b/src/pylorax/api/dnfbase.py
index b7a4d1c6..1d7f32cc 100644
--- a/src/pylorax/api/dnfbase.py
+++ b/src/pylorax/api/dnfbase.py
@@ -56,7 +56,10 @@ def get_base_object(conf):
dbc.reposdir = [repodir]
dbc.install_weak_deps = False
dbc.prepend_installroot('persistdir')
- dbc.tsflags.append('nodocs')
+ # this is a weird 'AppendOption' thing that, when you set it,
+ # actually appends. Doing this adds 'nodocs' to the existing list
+ # of values, over in libdnf, it does not replace the existing values.
+ dbc.tsflags = ['nodocs']
if conf.get_default("dnf", "proxy", None):
dbc.proxy = conf.get("dnf", "proxy")
diff --git a/src/sbin/lorax b/src/sbin/lorax
index 30b9cadc..2729757d 100755
--- a/src/sbin/lorax
+++ b/src/sbin/lorax
@@ -212,7 +212,10 @@ def get_dnf_base_object(installroot, sources, mirrorlists=None, repos=None,
conf.releasever = releasever
conf.installroot = installroot
conf.prepend_installroot('persistdir')
- conf.tsflags.append('nodocs')
+ # this is a weird 'AppendOption' thing that, when you set it,
+ # actually appends. Doing this adds 'nodocs' to the existing list
+ # of values, over in libdnf, it does not replace the existing values.
+ conf.tsflags = ['nodocs']
if proxy:
conf.proxy = proxy
--
2.19.0