Hello community, here is the log from the commit of package libzypp for openSUSE:Factory checked in at 2020-09-29 18:59:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libzypp (Old) and /work/SRC/openSUSE:Factory/.libzypp.new.4249 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libzypp" Tue Sep 29 18:59:22 2020 rev:435 rq:837395 version:17.25.1 Changes: -------- --- /work/SRC/openSUSE:Factory/libzypp/libzypp.changes 2020-09-24 16:12:09.588773542 +0200 +++ /work/SRC/openSUSE:Factory/.libzypp.new.4249/libzypp.changes 2020-09-29 18:59:31.001606819 +0200 @@ -1,0 +2,17 @@ +Fri Sep 25 13:39:38 CEST 2020 - [email protected] + +- Fix bsc#1176902: When kernel-rt has been installed, the + purge-kernels service fails during boot. +- Use package name provides as group key in purge-kernel + (bsc#1176740 bsc#1176192) + kernel-default-base has new packaging, where the kernel uname -r + does not reflect the full package version anymore. This patch + adds additional logic to use the most generic/shortest edition + each package provides with %{packagename}=<version> to group the + kernel packages instead of the rpm versions. + This also changes how the keep-spec for specific versions is + applied, instead of matching the package versions, each of the + package name provides will be matched. +- version 17.25.1 (22) + +------------------------------------------------------------------- Old: ---- libzypp-17.25.0.tar.bz2 New: ---- libzypp-17.25.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libzypp.spec ++++++ --- /var/tmp/diff_new_pack.jJTRZn/_old 2020-09-29 18:59:33.505609860 +0200 +++ /var/tmp/diff_new_pack.jJTRZn/_new 2020-09-29 18:59:33.505609860 +0200 @@ -31,7 +31,7 @@ %bcond_without mediabackend_tests Name: libzypp -Version: 17.25.0 +Version: 17.25.1 Release: 0 URL: https://github.com/openSUSE/libzypp Summary: Library for package, patch, pattern and product management ++++++ libzypp-17.25.0.tar.bz2 -> libzypp-17.25.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/VERSION.cmake new/libzypp-17.25.1/VERSION.cmake --- old/libzypp-17.25.0/VERSION.cmake 2020-09-18 16:54:42.000000000 +0200 +++ new/libzypp-17.25.1/VERSION.cmake 2020-09-25 13:48:06.000000000 +0200 @@ -61,8 +61,8 @@ SET(LIBZYPP_MAJOR "17") SET(LIBZYPP_COMPATMINOR "22") SET(LIBZYPP_MINOR "25") -SET(LIBZYPP_PATCH "0") +SET(LIBZYPP_PATCH "1") # -# LAST RELEASED: 17.25.0 (22) +# LAST RELEASED: 17.25.1 (22) # (The number in parenthesis is LIBZYPP_COMPATMINOR) #======= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/package/libzypp.changes new/libzypp-17.25.1/package/libzypp.changes --- old/libzypp-17.25.0/package/libzypp.changes 2020-09-18 16:54:42.000000000 +0200 +++ new/libzypp-17.25.1/package/libzypp.changes 2020-09-25 13:48:06.000000000 +0200 @@ -1,4 +1,21 @@ ------------------------------------------------------------------- +Fri Sep 25 13:39:38 CEST 2020 - [email protected] + +- Fix bsc#1176902: When kernel-rt has been installed, the + purge-kernels service fails during boot. +- Use package name provides as group key in purge-kernel + (bsc#1176740 bsc#1176192) + kernel-default-base has new packaging, where the kernel uname -r + does not reflect the full package version anymore. This patch + adds additional logic to use the most generic/shortest edition + each package provides with %{packagename}=<version> to group the + kernel packages instead of the rpm versions. + This also changes how the keep-spec for specific versions is + applied, instead of matching the package versions, each of the + package name provides will be matched. +- version 17.25.1 (22) + +------------------------------------------------------------------- Fri Sep 18 16:45:49 CEST 2020 - [email protected] - RepoInfo: Return the type of the local metadata cache as diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/po/pt_BR.po new/libzypp-17.25.1/po/pt_BR.po --- old/libzypp-17.25.0/po/pt_BR.po 2020-09-18 16:49:30.000000000 +0200 +++ new/libzypp-17.25.1/po/pt_BR.po 2020-09-23 02:53:59.000000000 +0200 @@ -14,8 +14,8 @@ "Project-Id-Version: zypp\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-09-18 16:45+0200\n" -"PO-Revision-Date: 2019-12-05 20:54+0000\n" -"Last-Translator: Rodrigo Macedo <[email protected]>\n" +"PO-Revision-Date: 2020-09-23 00:48+0000\n" +"Last-Translator: Luiz Fernando Ranghetti <[email protected]>\n" "Language-Team: Portuguese (Brazil) <https://l10n.opensuse.org/projects/" "libzypp/master/pt_BR/>\n" "Language: pt_BR\n" @@ -4912,6 +4912,8 @@ "Download (curl) error for '%s':\n" "Error code: %s\n" msgstr "" +"Erro de download (curl) para '%s':\n" +"Código do erro: %s\n" #: zypp/zyppng/media/network/networkrequesterror.cc:138 #, c-format, boost-format @@ -4919,6 +4921,8 @@ "Download (curl) error for '%s':\n" "Unable to retrieve HTTP response\n" msgstr "" +"Erro de download (curl) para '%s':\n" +"Não foi possível obter a resposta HTTP\n" #~ msgid "Can't open lock file: %s" #~ msgstr "Não foi possível abrir o arquivo de bloqueio: %s" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/tests/zypp/PurgeKernels_test.cc new/libzypp-17.25.1/tests/zypp/PurgeKernels_test.cc --- old/libzypp-17.25.0/tests/zypp/PurgeKernels_test.cc 2020-08-20 10:20:12.000000000 +0200 +++ new/libzypp-17.25.1/tests/zypp/PurgeKernels_test.cc 2020-09-25 09:34:10.000000000 +0200 @@ -252,6 +252,66 @@ //{ "kernel-default-5.8.1-3.1.g846658e.x86_64", false }, } }, + TestSample { + TESTS_SRC_DIR"/zypp/data/PurgeKernels/kernel-base", + "5.7.8-3-default", + Arch("x86_64"), + "running", + { + { "kernel-default-base-5.7.8-1.1.1.1.x86_64", false }, + { "kernel-default-base-5.7.8-2.1.1.1.x86_64", false }, + //{ "kernel-default-base-5.7.8-3.1.1.1.x86_64", false }, + { "kernel-default-base-5.8.8-2.1.1.1.x86_64", false }, + } + }, + TestSample { + TESTS_SRC_DIR"/zypp/data/PurgeKernels/kernel-base", + "5.7.8-3-default", + Arch("x86_64"), + "running, 5.7.8-2.1.1", + { + { "kernel-default-base-5.7.8-1.1.1.1.x86_64", false }, + { "kernel-default-base-5.8.8-2.1.1.1.x86_64", false }, + //{ "kernel-default-base-5.7.8-2.1.1.1.x86_64", false }, + //{ "kernel-default-base-5.7.8-3.1.1.1.x86_64", false }, + } + }, + TestSample { + TESTS_SRC_DIR"/zypp/data/PurgeKernels/flavour", + "1-3-rt", + Arch("x86_64"), + "running", + { + { "kernel-rt-1-1.x86_64", false }, + { "kernel-rt-devel-1-1.x86_64", false }, + { "kernel-rt-devel-debuginfo-1-1.x86_64", false }, + { "kernel-devel-rt-1-1.noarch", false }, + { "kernel-syms-rt-1-1.x86_64", false }, + { "kernel-source-rt-1-1.noarch", false }, + { "kernel-rt-1-2.x86_64", false }, + { "kernel-rt-devel-1-2.x86_64", false }, + { "kernel-rt-devel-debuginfo-1-2.x86_64", false }, + { "kernel-devel-rt-1-2.noarch", false }, + { "kernel-syms-rt-1-2.x86_64", false }, + { "kernel-rt-1-4.x86_64", false }, + { "kernel-rt-devel-1-4.x86_64", false }, + { "kernel-rt-devel-debuginfo-1-4.x86_64", false }, + { "kernel-devel-rt-1-4.noarch", false }, + { "kernel-syms-rt-1-4.x86_64", false }, + { "kernel-rt-1-5.x86_64", false }, + { "kernel-rt-devel-1-5.x86_64", false }, + { "kernel-rt-devel-debuginfo-1-5.x86_64", false }, + { "kernel-devel-rt-1-5.noarch", false }, + { "kernel-syms-rt-1-5.x86_64", false }, + // left over devel packages that need to go away too + { "kernel-devel-rt-1-1.2.noarch", false }, + { "kernel-source-rt-1-1.2.noarch", false }, + { "kernel-rt-devel-1-3.x86_64", false }, + { "kernel-devel-rt-1-3.noarch", false }, + { "kernel-rt-devel-1-3.x86_64", false }, + { "kernel-rt-devel-debuginfo-1-3.x86_64", false }, + } + }, }; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/tests/zypp/data/PurgeKernels/flavour/@System.repo new/libzypp-17.25.1/tests/zypp/data/PurgeKernels/flavour/@System.repo --- old/libzypp-17.25.0/tests/zypp/data/PurgeKernels/flavour/@System.repo 1970-01-01 01:00:00.000000000 +0100 +++ new/libzypp-17.25.1/tests/zypp/data/PurgeKernels/flavour/@System.repo 2020-09-25 09:34:10.000000000 +0200 @@ -0,0 +1,356 @@ +=Ver: 3.0 +=Pkg: glibc 1 1 x86_64 ++Prv: +glibc = 1-1 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-firmware <NULL> - noarch ++Prv: +kernel-firmware = 20190312-lp151.2.3.1 +kernel-firmware = <NULL> +-Prv: + +=Pkg: kernel-macros 1 0 noarch ++Prv: +kernel-subpackage-macros +kernel-macros = 1-0 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-rt 1 1 x86_64 ++Prv: +multiversion(kernel) +kernel-rt-1-1 +kernel = 1-1 +kernel-uname-r = 1-1-rt +kernel-rt = 1-1 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel 1 1 x86_64 ++Req: +kernel-devel-rt = 1-1 +-Req: ++Prv: +multiversion(kernel) +kernel-rt-devel = 1-1 +-Prv: ++Sup: +kernel-rt & kernel-devel-rt +-Sup: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel-debuginfo 1 1 x86_64 ++Prv: +kernel-rt-devel-debuginfo = 1-1 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-devel-rt 1 1 noarch ++Req: +kernel-macros +-Req: ++Prv: +multiversion(kernel) +kernel-devel-rt = 1-1 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-source-rt 1 1 noarch ++Req: +kernel-devel-rt = 1-1 +-Req: ++Prv: +multiversion(kernel) +kernel-source-rt = 1-1 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-devel-rt 1 1.2 noarch ++Req: +kernel-macros +-Req: ++Prv: +multiversion(kernel) +kernel-devel-rt = 1-1 +kernel-devel-rt = 1-1.2 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-source-rt 1 1.2 noarch ++Req: +kernel-devel-rt = 1-1.2 +-Req: ++Prv: +multiversion(kernel) +kernel-source-rt = 1-1 +kernel-source-rt = 1-1.2 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-syms-rt 1 1 x86_64 ++Req: +kernel-devel-rt = 1-1 +kernel-rt-devel = 1-1 +-Req: ++Prv: +multiversion(kernel) +kernel-syms-rt = 1-1 +-Prv: +=Vnd: openSUSE + +=Tim: 1570603549 +=Pkg: kernel-rt 1 2 x86_64 ++Prv: +multiversion(kernel) +kernel-rt-1-2 +kernel = 1-2 +kernel-uname-r = 1-2-rt +kernel-rt = 1-2 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel 1 2 x86_64 ++Req: +kernel-devel-rt = 1-2 +-Req: ++Prv: +multiversion(kernel) +kernel-rt-devel = 1-2 +-Prv: ++Sup: +kernel-rt & kernel-devel-rt +-Sup: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel-debuginfo 1 2 x86_64 ++Prv: +kernel-rt-devel-debuginfo = 1-2 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-devel-rt 1 2 noarch ++Req: +kernel-macros +-Req: ++Prv: +multiversion(kernel) +kernel-devel-rt = 1-2 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-syms-rt 1 2 x86_64 ++Req: +kernel-devel-rt = 1-2 +kernel-rt-devel = 1-2 +-Req: ++Prv: +multiversion(kernel) +kernel-syms-rt = 1-2 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-rt 1 3 x86_64 ++Prv: +multiversion(kernel) +kernel-rt-1-3 +kernel = 1-3 +kernel-uname-r = 1-3-rt +kernel-rt = 1-3 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel 1 3 x86_64 ++Req: +kernel-devel-rt = 1-3 +-Req: ++Prv: +multiversion(kernel) +kernel-rt-devel = 1-3 +-Prv: ++Sup: +kernel-rt & kernel-devel-rt +-Sup: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel 1 3.2 x86_64 ++Req: +kernel-devel-rt = 1-3.2 +-Req: ++Prv: +multiversion(kernel) +kernel-rt-devel = 1-3 +kernel-rt-devel = 1-3.2 +-Prv: ++Sup: +kernel-rt & kernel-devel-rt +-Sup: +=Vnd: openSUSE + +=Pkg: kernel-devel-rt 1 3.2 noarch ++Req: +kernel-macros +-Req: ++Prv: +multiversion(kernel) +kernel-devel-rt = 1-3 +kernel-devel-rt = 1-3.2 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-source-rt 1 3.2 noarch ++Req: +kernel-devel-rt = 1-3.2 +-Req: ++Prv: +multiversion(kernel) +kernel-source-rt = 1-3 +kernel-source-rt = 1-3.2 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel-debuginfo 1 3 x86_64 ++Prv: +kernel-rt-devel-debuginfo = 1-3 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-devel-rt 1 3 noarch ++Req: +kernel-macros +-Req: ++Prv: +multiversion(kernel) +kernel-devel-rt = 1-3 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-syms-rt 1 3 x86_64 ++Req: +kernel-devel-rt = 1-3 +kernel-rt-devel = 1-3 +-Req: ++Prv: +multiversion(kernel) +kernel-syms-rt = 1-3 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-rt 1 4 x86_64 ++Prv: +multiversion(kernel) +kernel-rt-1-4 +kernel = 1-4 +kernel-uname-r = 1-4-rt +kernel-rt = 1-4 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel 1 4 x86_64 ++Req: +kernel-devel-rt = 1-4 +-Req: ++Prv: +multiversion(kernel) +kernel-rt-devel = 1-4 +-Prv: ++Sup: +kernel-rt & kernel-devel-rt +-Sup: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel-debuginfo 1 4 x86_64 ++Prv: +kernel-rt-devel-debuginfo = 1-4 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-devel-rt 1 4 noarch ++Req: +kernel-macros +-Req: ++Prv: +multiversion(kernel) +kernel-devel-rt = 1-4 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-syms-rt 1 4 x86_64 ++Req: +kernel-devel-rt = 1-4 +kernel-rt-devel = 1-4 +-Req: ++Prv: +multiversion(kernel) +kernel-syms-rt = 1-4 +-Prv: +=Vnd: openSUSE +=Tim: 1570603549 + +=Pkg: kernel-rt 1 5 x86_64 ++Prv: +multiversion(kernel) +kernel-rt-1-5 +kernel = 1-5 +kernel-uname-r = 1-5-rt +ksym(foobar) = abdcfee +kernel-rt = 1-5 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel 1 5 x86_64 ++Req: +kernel-devel-rt = 1-5 +-Req: ++Prv: +multiversion(kernel) +kernel-rt-devel = 1-5 +-Prv: ++Sup: +kernel-rt & kernel-devel-rt +-Sup: +=Vnd: openSUSE + +=Pkg: kernel-rt-devel-debuginfo 1 5 x86_64 ++Prv: +kernel-rt-devel-debuginfo = 1-5 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-devel-rt 1 5 noarch ++Req: +kernel-macros +-Req: ++Prv: +multiversion(kernel) +kernel-devel-rt = 1-5 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-syms-rt 1 5 x86_64 ++Req: +kernel-devel-rt = 1-5 +kernel-rt-devel = 1-5 +-Req: ++Prv: +multiversion(kernel) +kernel-syms-rt = 1-5 +-Prv: +=Vnd: openSUSE +=Tim: 1570603549 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/tests/zypp/data/PurgeKernels/flavour/zypp-control.yaml new/libzypp-17.25.1/tests/zypp/data/PurgeKernels/flavour/zypp-control.yaml --- old/libzypp-17.25.0/tests/zypp/data/PurgeKernels/flavour/zypp-control.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/libzypp-17.25.1/tests/zypp/data/PurgeKernels/flavour/zypp-control.yaml 2020-09-25 09:34:10.000000000 +0200 @@ -0,0 +1,38 @@ +version: 1.0 +setup: + channels: + - alias: "@System" + url: [] + path: "" + type: NONE + generated: 0 + outdated: 0 + priority: 99 + file: "@System.repo" + arch: x86_64 + locales: + - fate: "" + name: en_US + - fate: "" + name: de + autoinst: + [] + modalias: + [] + multiversion: + [] + resolverFlags: + focus: Job + ignorealreadyrecommended: false + onlyRequires: false + forceResolve: false + cleandepsOnRemove: false + allowDowngrade: false + allowNameChange: false + allowArchChange: false + allowVendorChange: false + dupAllowDowngrade: false + dupAllowNameChange: false + dupAllowArchChange: false + dupAllowVendorChange: false +trials: [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/tests/zypp/data/PurgeKernels/kernel-base/@System.repo new/libzypp-17.25.1/tests/zypp/data/PurgeKernels/kernel-base/@System.repo --- old/libzypp-17.25.0/tests/zypp/data/PurgeKernels/kernel-base/@System.repo 1970-01-01 01:00:00.000000000 +0100 +++ new/libzypp-17.25.1/tests/zypp/data/PurgeKernels/kernel-base/@System.repo 2020-09-23 17:09:59.000000000 +0200 @@ -0,0 +1,81 @@ +=Ver: 3.0 + +=Pkg: glibc 1 1 x86_64 ++Prv: +glibc = 1-1 +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-firmware <NULL> - noarch ++Prv: +kernel-firmware = <NULL> +-Prv: +=Vnd: openSUSE + +=Pkg: kernel-default-base 5.7.8 1.1.1.1 x86_64 ++Prv: +multiversion(kernel) +kernel-default-5.7.8-1 +kernel = 5.7.8-1 +kernel-base = 5.7.8-1 +kernel-uname-r = 5.7.8-1-default +kernel-default-base = 5.7.8-1 +kernel-default-base = 5.7.8-1.1 +kernel-default-base = 5.7.8-1.1.1 +kernel-default-base = 5.7.8-1.1.1.1 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE + +=Pkg: kernel-default-base 5.7.8 2.1.1.1 x86_64 ++Prv: +multiversion(kernel) +kernel-default-5.7.8-2 +kernel = 5.7.8-2 +kernel-base = 5.7.8-2 +kernel-uname-r = 5.7.8-2-default +kernel-default-base = 5.7.8-2 +kernel-default-base = 5.7.8-2.1 +kernel-default-base = 5.7.8-2.1.1 +kernel-default-base = 5.7.8-2.1.1.1 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE + +=Pkg: kernel-default-base 5.7.8 3.1.1.1 x86_64 ++Prv: +multiversion(kernel) +kernel-default-5.7.8-3 +kernel = 5.7.8-3 +kernel-base = 5.7.8-3 +kernel-uname-r = 5.7.8-3-default +kernel-default-base = 5.7.8-3 +kernel-default-base = 5.7.8-3.1 +kernel-default-base = 5.7.8-3.1.1 +kernel-default-base = 5.7.8-3.1.1.1 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE + +=Pkg: kernel-default-base 5.8.8 2.1.1.1 x86_64 ++Prv: +multiversion(kernel) +kernel-default-5.8.8-1 +kernel = 5.8.8-1 +kernel-base = 5.8.8-1 +kernel-uname-r = 5.8.8-1-default +kernel-default-base = 5.8.8-1 +kernel-default-base = 5.8.8-1.1 +kernel-default-base = 5.8.8-1.1.1 +kernel-default-base = 5.8.8-1.1.1.1 +-Prv: ++Rec: +kernel-firmware +-Rec: +=Vnd: openSUSE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/tests/zypp/data/PurgeKernels/kernel-base/zypp-control.yaml new/libzypp-17.25.1/tests/zypp/data/PurgeKernels/kernel-base/zypp-control.yaml --- old/libzypp-17.25.0/tests/zypp/data/PurgeKernels/kernel-base/zypp-control.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/libzypp-17.25.1/tests/zypp/data/PurgeKernels/kernel-base/zypp-control.yaml 2020-09-23 17:09:59.000000000 +0200 @@ -0,0 +1,38 @@ +version: 1.0 +setup: + channels: + - alias: "@System" + url: [] + path: "" + type: NONE + generated: 0 + outdated: 0 + priority: 99 + file: "@System.repo" + arch: x86_64 + locales: + - fate: "" + name: en_US + - fate: "" + name: de + autoinst: + [] + modalias: + [] + multiversion: + [] + resolverFlags: + focus: Job + ignorealreadyrecommended: false + onlyRequires: false + forceResolve: false + cleandepsOnRemove: false + allowDowngrade: false + allowNameChange: false + allowArchChange: false + allowVendorChange: false + dupAllowDowngrade: false + dupAllowNameChange: false + dupAllowArchChange: false + dupAllowVendorChange: false +trials: [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.25.0/zypp/PurgeKernels.cc new/libzypp-17.25.1/zypp/PurgeKernels.cc --- old/libzypp-17.25.0/zypp/PurgeKernels.cc 2020-08-20 10:20:12.000000000 +0200 +++ new/libzypp-17.25.1/zypp/PurgeKernels.cc 2020-09-25 09:34:10.000000000 +0200 @@ -14,7 +14,6 @@ #include <zypp/base/Logger.h> #include <zypp/base/Regex.h> #include <zypp/base/Iterator.h> -#include <zypp/ui/Selectable.h> #include <zypp/PurgeKernels.h> #include <zypp/PoolQuery.h> #include <zypp/ResPool.h> @@ -36,7 +35,7 @@ namespace zypp { using Flavour = std::string; - using SolvableList = std::list<sat::Solvable::IdType>; + using SolvableList = std::list<sat::Solvable>; using EditionToSolvableMap = std::map<Edition, SolvableList >; using ArchToEditionMap = std::map<Arch, EditionToSolvableMap >; @@ -102,10 +101,10 @@ MIL << "Kernel Edition: " << _runningKernelEdition << std::endl; } - bool removePackageAndCheck( const sat::Solvable::IdType id, const std::set<sat::Solvable::IdType> &keepList , const std::set<sat::Solvable::IdType> &removeList ) const; + bool removePackageAndCheck( const sat::Solvable slv, const std::set<sat::Solvable> &keepList , const std::set<sat::Solvable> &removeList ) const; static bool versionMatch ( const Edition &a, const Edition &b ); void parseKeepSpec(); - void fillKeepList(const GroupMap &installedKernels, std::set<sat::Solvable::IdType> &keepList , std::set<sat::Solvable::IdType> &removeList ) const; + void fillKeepList(const GroupMap &installedKernels, std::set<sat::Solvable> &keepList , std::set<sat::Solvable> &removeList ) const; std::set<size_t> _keepLatestOffsets = { 0 }; std::set<size_t> _keepOldestOffsets; @@ -123,11 +122,11 @@ * tries to remove a the \ref PoolItem \a pi from the pool, solves and checks if no unexpected packages are removed due to the \a validRemovals regex. * If the constraint fails the changes are reverted and \a false is returned. */ - bool PurgeKernels::Impl::removePackageAndCheck( const sat::Solvable::IdType id, const std::set<sat::Solvable::IdType> &keepList , const std::set<sat::Solvable::IdType> &removeList ) const + bool PurgeKernels::Impl::removePackageAndCheck( const sat::Solvable slv, const std::set<sat::Solvable> &keepList , const std::set<sat::Solvable> &removeList ) const { const filter::ByStatus toBeUninstalledFilter( &ResStatus::isToBeUninstalled ); - PoolItem pi ( (sat::Solvable(id)) ); + PoolItem pi ( slv ); auto pool = ResPool::instance(); @@ -142,15 +141,15 @@ //list of packages that are allowed to be removed automatically. const str::regex validRemovals("(kernel-syms(-.*)?|kgraft-patch(-.*)?|kernel-livepatch(-.*)?|.*-kmp(-.*)?)"); - if ( ui::asSelectable()( pi )->hasLocks() ) { + if ( pi.status().isLocked() ) { MIL << "Package " << pi << " is locked by the user, not removing." << std::endl; return false; } //remember which packages are already marked for removal, we do not need to check them again - std::set< sat::Solvable::IdType> currentSetOfRemovals; - for ( auto it = pool.byStatusBegin( toBeUninstalledFilter ); it != pool.byStatusEnd( toBeUninstalledFilter ); it++ ) { - currentSetOfRemovals.insert( it->id() ); + std::set<sat::Solvable> currentSetOfRemovals; + for ( const PoolItem & p : pool.byStatus( toBeUninstalledFilter ) ) { + currentSetOfRemovals.insert( p.satSolvable() ); } pi.status().setToBeUninstalled( ResStatus::USER ); @@ -163,35 +162,35 @@ return false; } - std::set<sat::Solvable::IdType> removedInThisRun; - removedInThisRun.insert( pi.id() ); + std::set<sat::Solvable> removedInThisRun; + removedInThisRun.insert( slv ); - for ( auto it = pool.byStatusBegin( toBeUninstalledFilter ); it != pool.byStatusEnd( toBeUninstalledFilter ); it++ ) { + for ( const PoolItem & p : pool.byStatus( toBeUninstalledFilter ) ) { //check if that package is removeable - if ( it->status().isByUser() //this was set by us, ignore it - || (currentSetOfRemovals.find( it->id() ) != currentSetOfRemovals.end()) //this was marked by a previous removal, ignore them + if ( p.status().isByUser() //this was set by us, ignore it + || (currentSetOfRemovals.find( p.satSolvable() ) != currentSetOfRemovals.end()) //this was marked by a previous removal, ignore them ) continue; // remember for later we need remove the debugsource and debuginfo packages as well - removedInThisRun.insert( it->id() ); + removedInThisRun.insert( p.satSolvable() ); - MIL << "Package " << PoolItem(*it) << " was marked by the solver for removal." << std::endl; + MIL << "Package " << p << " was marked by the solver for removal." << std::endl; // if we do not plan to remove that package anyway, we need to check if its allowed to be removed ( package in removelist can never be in keep list ) - if ( removeList.find( it->id() ) != removeList.end() ) + if ( removeList.find( p.satSolvable() ) != removeList.end() ) continue; - if ( keepList.find( it->id() ) != keepList.end() ) { - MIL << "Package " << PoolItem(*it) << " is in keep spec, skipping" << pi << std::endl; + if ( keepList.find( p.satSolvable() ) != keepList.end() ) { + MIL << "Package " << p << " is in keep spec, skipping" << pi << std::endl; pi.statusReset(); return false; } str::smatch what; - if ( !str::regex_match( it->name(), what, validRemovals) ) { - MIL << "Package " << PoolItem(*it) << " should not be removed, skipping " << pi << std::endl; + if ( !str::regex_match( p.name(), what, validRemovals) ) { + MIL << "Package " << p << " should not be removed, skipping " << pi << std::endl; pi.statusReset(); return false; } @@ -201,28 +200,27 @@ //now check and mark the -debugsource and -debuginfo packages for this package and all the packages that were removed. Maybe collect it before and just remove here MIL << "Trying to remove debuginfo for: " << pi <<"."<<std::endl; - for ( const auto id : removedInThisRun ) { + for ( sat::Solvable solvable : removedInThisRun ) { - const auto solvable = sat::Solvable(id); if ( solvable.arch() == Arch_noarch || solvable.arch() == Arch_empty ) continue; - for ( const auto suffix : { "-debugsource", "-debuginfo" } ) { + for ( const char * suffix : { "-debugsource", "-debuginfo" } ) { PoolQuery q; q.addKind( zypp::ResKind::package ); q.addDependency( sat::SolvAttr::provides, Capability( solvable.name()+suffix, Rel::EQ, solvable.edition() ) ); q.setInstalledOnly(); q.setMatchExact(); - for ( const auto debugPackage : q ) { + for ( sat::Solvable debugPackage : q ) { if ( debugPackage.arch() != solvable.arch() ) continue; MIL << "Found debug package for " << solvable << " : " << debugPackage << std::endl; //if removing the package fails it will not stop us from going on , so no need to check - removePackageAndCheck( debugPackage.id(), keepList, removeList ); + removePackageAndCheck( debugPackage, keepList, removeList ); } } } @@ -325,11 +323,11 @@ * doable. This is also what the perl script did. * */ - void PurgeKernels::Impl::fillKeepList( const GroupMap &installedKernels, std::set<sat::Solvable::IdType> &keepList, std::set<sat::Solvable::IdType> &removeList ) const + void PurgeKernels::Impl::fillKeepList( const GroupMap &installedKernels, std::set<sat::Solvable> &keepList, std::set<sat::Solvable> &removeList ) const { - const auto markAsKeep = [ &keepList, &removeList ]( const auto &pck ) { - MIL << "Marking package " << sat::Solvable(pck) << " as to keep." << std::endl; + const auto markAsKeep = [ &keepList, &removeList ]( sat::Solvable pck ) { + MIL << "Marking package " << pck << " as to keep." << std::endl; keepList.insert( pck ) ; removeList.erase( pck ); }; @@ -369,7 +367,7 @@ MIL << "NOT removing any packages for flavor "<<_runningKernelFlavour<<"-"<<_kernelArch<<" ."<<std::endl; for ( const auto &kernelMap : map ) { - for( const auto &pck : kernelMap.second ) + for( sat::Solvable pck : kernelMap.second ) markAsKeep(pck); } continue; @@ -387,7 +385,7 @@ // mark all packages of the running version as keep if ( it != map.end() ) { - for( const auto &pck : it->second ) { + for( sat::Solvable pck : it->second ) { markAsKeep(pck); } } @@ -395,19 +393,22 @@ for ( const auto &kernelMap : map ) { //if we find one of the running offsets in the keepspec, we add the kernel id the the list of packages to keep - if ( _keepOldestOffsets.find( currOff ) != _keepOldestOffsets.end() - || _keepLatestOffsets.find( currROff ) != _keepLatestOffsets.end() - // a kernel might be explicitely locked by version - // this will currently keep all editions that match, so if keep spec has 1-1 , this will keep 1-1 but also all 1-1.n - || std::find_if( _keepSpecificEditions.begin(), _keepSpecificEditions.end(), - [ edition = &kernelMap.first ]( const auto &elem ) { return versionMatch( *edition, elem ); } ) != _keepSpecificEditions.end() ) { - - for( const auto &pck : kernelMap.second ) { - markAsKeep(pck); - } + if ( _keepOldestOffsets.find( currOff ) != _keepOldestOffsets.end() || _keepLatestOffsets.find( currROff ) != _keepLatestOffsets.end() ) { + std::for_each( kernelMap.second.begin(), kernelMap.second.end(), markAsKeep ); } currOff++; currROff--; + + // a kernel package might be explicitely locked by version + // We need to go over all package name provides ( provides is named like the package ) and match + // them against the specified version to know which ones to keep. (bsc#1176740 bsc#1176192) + std::for_each( kernelMap.second.begin(), kernelMap.second.end(), [ & ]( sat::Solvable solv ){ + for ( Capability prov : solv.provides() ) { + if ( prov.detail().name() == solv.name() && _keepSpecificEditions.count( prov.detail().ed() ) ) { + markAsKeep( solv ); + } + } + }); } } } @@ -449,9 +450,9 @@ // packages that we plan to remove - std::set<sat::Solvable::IdType> packagesToRemove; + std::set<sat::Solvable> packagesToRemove; - const auto addPackageToMap = [&installedKrnlPackages, &packagesToRemove] ( const GroupInfo::GroupType type, const std::string &ident, const std::string &flavour, const auto &installedKrnlPck ) { + const auto addPackageToMap = [&installedKrnlPackages, &packagesToRemove] ( const GroupInfo::GroupType type, const std::string &ident, const std::string &flavour, const sat::Solvable &installedKrnlPck ) { if ( !installedKrnlPackages.count( ident ) ) installedKrnlPackages.insert( std::make_pair( ident, GroupInfo(type, flavour) ) ); @@ -469,18 +470,40 @@ auto &editionToSolvableMap = groupInfo.archToEdMap[ currArch ]; - const auto currEd = installedKrnlPck.edition(); - if ( !editionToSolvableMap.count( currEd ) ) - editionToSolvableMap.insert( std::make_pair( currEd, SolvableList{} ) ); + // calculate the "shortest" or most generic edition of all the package name provides + // ( the key of the provides is the package name ). This generic edition is used to + // group the packages together. This should get us around the issue that uname -r does + // not represent the actual rpm package version anymore. ( bsc#1176740 ) + auto currCount = INT_MAX; + Edition edToUse; + for ( Capability prov : installedKrnlPck.provides() ) { + if ( prov.detail().name() == installedKrnlPck.name() ) { + if ( edToUse == Edition::noedition ) { + edToUse = installedKrnlPck.edition(); + const auto &relStr = edToUse.release(); + currCount = std::count( relStr.begin(), relStr.end(), '.'); + } else { + const auto &pckEd = prov.detail().ed(); + const auto &relStr = pckEd.release(); + if ( const auto pntCnt = std::count( relStr.begin(), relStr.end(), '.'); pntCnt < currCount ) { + currCount = pntCnt; + edToUse = pckEd; + } + } + } + } + + if ( !editionToSolvableMap.count( edToUse ) ) + editionToSolvableMap.insert( std::make_pair( edToUse, SolvableList{} ) ); - editionToSolvableMap[currEd].push_back( installedKrnlPck.id() ); + editionToSolvableMap[edToUse].push_back( installedKrnlPck ); //in the first step we collect all packages in this list, then later we will remove the packages we want to explicitely keep - packagesToRemove.insert( installedKrnlPck.id() ); + packagesToRemove.insert( installedKrnlPck ); }; - // the set of package IDs that have to be kept always - std::set<sat::Solvable::IdType> packagesToKeep; + // the set of satSolvables that have to be kept always + std::set<sat::Solvable> packagesToKeep; //collect the list of installed kernel packages PoolQuery q; @@ -491,7 +514,7 @@ MIL << "Searching for obsolete multiversion kernel packages." << std::endl; - for ( auto installedKrnlPck : q ) { + for ( sat::Solvable installedKrnlPck : q ) { MIL << "Found installed multiversion kernel package " << installedKrnlPck << std::endl; @@ -519,6 +542,7 @@ } else { + // if adapting the groups do not forget to explicitely handle the group when querying the matches const str::regex explicitelyHandled("kernel-syms(-.*)?|kernel(-.*)?-devel"); MIL << "Not a kernel package, inspecting more closely " << std::endl; @@ -536,15 +560,18 @@ // getting no flavour for a kernel(-*)?-devel means we have the kernel-devel package otherwise the flavour specific one // ...yes this is horrible std::string flav; - if ( match.size() > 1 ) { + + // first group match is a kernel-syms + if ( match.size() > 1 && match[1].size() ) + flav = match[1].substr(1); + // second group match is a kernel-flavour-devel + else if ( match.size() > 2 && match[2].size() ) flav = match[2].substr(1); - } else if ( installedKrnlPck.name() == "kernel-syms" ) { + else if ( installedKrnlPck.name() == "kernel-syms" ) flav = "default"; - } MIL << "Handling package explicitely due to name match."<< std::endl; addPackageToMap ( GroupInfo::RelatedBinaries, installedKrnlPck.name(), flav, installedKrnlPck ); - } else { MIL << "Package not explicitely handled" << std::endl; } @@ -570,8 +597,8 @@ _pimpl->fillKeepList( installedKrnlPackages, packagesToKeep, packagesToRemove ); - for ( const auto id : packagesToRemove ) - _pimpl->removePackageAndCheck( id, packagesToKeep, packagesToRemove ); + for ( sat::Solvable slv : packagesToRemove ) + _pimpl->removePackageAndCheck( slv, packagesToKeep, packagesToRemove ); } void PurgeKernels::setUnameR( const std::string &val )
