Hello community, here is the log from the commit of package PackageKit for openSUSE:Factory checked in at 2019-11-29 15:56:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/PackageKit (Old) and /work/SRC/openSUSE:Factory/.PackageKit.new.26869 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "PackageKit" Fri Nov 29 15:56:22 2019 rev:195 rq:750926 version:1.1.12 Changes: -------- --- /work/SRC/openSUSE:Factory/PackageKit/PackageKit.changes 2019-11-06 15:46:26.134854406 +0100 +++ /work/SRC/openSUSE:Factory/.PackageKit.new.26869/PackageKit.changes 2019-11-29 15:57:05.856965467 +0100 @@ -1,0 +2,17 @@ +Thu Nov 21 01:09:07 UTC 2019 - Jonathan Kang <songchuan.k...@suse.com> + +- Add PackageKit-zypp-update-packages-in-all-openSUSE.patch: Handle + Tumbleweed upgrade in update-packages as well so that it doesn't + break other components. + +------------------------------------------------------------------- +Wed Nov 13 02:00:32 UTC 2019 - Jonathan Kang <sck...@suse.com> + +- Add PackageKit-zypp-upgrade-system.patch: zypp: implement + upgrade-system method (bsc#1155638, bsc#1154973, + gh#hughsie/PackageKit/commit/d060dd24). +- Add PackageKit-zypp-get-files-string-array.patch: zypp: pass an + array of strings to pk_backend_job_files() + (gh#hughsie/PackageKit#351). + +------------------------------------------------------------------ New: ---- PackageKit-zypp-get-files-string-array.patch PackageKit-zypp-update-packages-in-all-openSUSE.patch PackageKit-zypp-upgrade-system.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ PackageKit.spec ++++++ --- /var/tmp/diff_new_pack.ZQBb3O/_old 2019-11-29 15:57:06.712964976 +0100 +++ /var/tmp/diff_new_pack.ZQBb3O/_new 2019-11-29 15:57:06.716964973 +0100 @@ -1,7 +1,7 @@ # # spec file for package PackageKit # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -60,6 +60,12 @@ # PATCH-FIX-UPSTREAM PackageKit-zypp-dont-set-upgrade-mode-on-updating-specific-packages.patch gh#hughsie/PackageKit#345 sck...@suse.com -- zypp: Don't set upgrade mode in update-packages Patch9: PackageKit-zypp-dont-set-upgrade-mode-on-updating-specific-packages.patch Patch10: zypp-perform-actions-disallowed-by-update-in-upgrade-mode.patch +# PATCH-FIX-UPSTREAM PackageKit-zypp-upgrade-system.patch bsc#1155638, bsc#1154973, gh#hughsie/PackageKit/commit/d060dd24 sck...@suse.com -- zypp: implement upgrade-system method +Patch11: PackageKit-zypp-upgrade-system.patch +# PATCH-FIX-UPSTREAM PackageKit-zypp-get-files-string-array.patch gh#hughsie/PackageKit#351 sck...@suse.com -- zypp: pass an array of strings to pk_backend_job_files() +Patch12: PackageKit-zypp-get-files-string-array.patch +# PATCH-FIX-UPSTREAM PackageKit-zypp-update-packages-in-all-openSUSE.patch sck...@suse.com -- Handle Tumbleweed upgrade in update-packages as well so that it doesn't break other components. +Patch13: PackageKit-zypp-update-packages-in-all-openSUSE.patch BuildRequires: autoconf-archive BuildRequires: fdupes ++++++ PackageKit-zypp-get-files-string-array.patch ++++++ >From 98dd535f594bf43eb5f9ab6d27aa55b75d3ea4e5 Mon Sep 17 00:00:00 2001 From: Jonathan Kang <jonathank...@gnome.org> Date: Fri, 8 Nov 2019 10:55:29 +0800 Subject: [PATCH] zypp: pass an array of strings to pk_backend_job_files() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previous, a list of file strings were joined a single string with ";" inserted between each of them and the generated long string was passed to pk_backend_job_files(). While pk_backend_job_files() expects an array of strings. Fix that by passing an array of string instread of a long string to pk_backend_job_files(). https://github.com/hughsie/PackageKit/issues/351 --- backends/zypp/pk-backend-zypp.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp index 572c63e02..ffa8a2425 100644 --- a/backends/zypp/pk-backend-zypp.cpp +++ b/backends/zypp/pk-backend-zypp.cpp @@ -3351,7 +3351,7 @@ backend_get_files_thread (PkBackendJob *job, GVariant *params, gpointer user_dat for (uint i = 0; package_ids[i]; i++) { pk_backend_job_set_status (job, PK_STATUS_ENUM_QUERY); sat::Solvable solvable = zypp_get_package_by_id (package_ids[i]); - + if (zypp_is_no_solvable(solvable)) { zypp_backend_finished_error ( job, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, @@ -3359,15 +3359,18 @@ backend_get_files_thread (PkBackendJob *job, GVariant *params, gpointer user_dat return; } - string temp; + g_auto(GStrv) strv = NULL; + g_autoptr(GPtrArray) pkg_files = NULL; + + pkg_files = g_ptr_array_new (); + if (solvable.isSystem ()){ try { target::rpm::RpmHeader::constPtr rpmHeader = zypp_get_rpmHeader (solvable.name (), solvable.edition ()); list<string> files = rpmHeader->tag_filenames (); for (list<string>::iterator it = files.begin (); it != files.end (); ++it) { - temp.append (*it); - temp.append (";"); + g_ptr_array_add (pkg_files, g_strdup (it->c_str ())); } } catch (const target::rpm::RpmException &ex) { @@ -3376,12 +3379,14 @@ backend_get_files_thread (PkBackendJob *job, GVariant *params, gpointer user_dat return; } } else { - temp = "Only available for installed packages"; + g_ptr_array_add (pkg_files, + g_strdup ("Only available for installed packages")); } - const gchar *to_strv[] = { NULL, NULL }; - to_strv[0] = temp.c_str (); - pk_backend_job_files (job, package_ids[i], (gchar **) to_strv); // file_list + /* Convert to GStrv. */ + g_ptr_array_add (pkg_files, NULL); + strv = g_strdupv ((gchar **) pkg_files->pdata); + pk_backend_job_files (job, package_ids[i], strv); } } -- 2.23.0 ++++++ PackageKit-zypp-update-packages-in-all-openSUSE.patch ++++++ >From 91c8ffd7cdfb80f48c255e097675db34cc671dc9 Mon Sep 17 00:00:00 2001 From: Jonathan Kang <jonathank...@gnome.org> Date: Wed, 20 Nov 2019 15:13:04 +0800 Subject: [PATCH] zypp: Merge updating function into update-packages No matter whether you are using Tumbleweed or Leap, update-packages is the place where all the action happens. --- backends/zypp/pk-backend-zypp.cpp | 40 ++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp index 861c93ab0..2e582a0e6 100644 --- a/backends/zypp/pk-backend-zypp.cpp +++ b/backends/zypp/pk-backend-zypp.cpp @@ -3414,6 +3414,36 @@ pk_backend_get_packages (PkBackend *backend, PkBackendJob *job, PkBitfield filte pk_backend_job_thread_create (job, backend_get_packages_thread, NULL, NULL); } +static void +upgrade_system (PkBackendJob *job, + ZYpp::Ptr zypp, + PkBitfield transaction_flags) +{ + set<PoolItem> candidates; + + /* refresh the repos before checking for updates. */ + if (!zypp_refresh_cache (job, zypp, FALSE)) { + return; + } + zypp_build_pool (zypp, TRUE); + zypp_get_updates (job, zypp, candidates); + if (candidates.empty ()) { + pk_backend_job_error_code (job, PK_ERROR_ENUM_NO_DISTRO_UPGRADE_DATA, + "No Distribution Upgrade Available."); + + return; + } + + zypp->resolver ()->dupSetAllowVendorChange (ZConfig::instance ().solver_dupAllowVendorChange ()); + zypp->resolver ()->doUpgrade (); + + PoolStatusSaver saver; + + zypp_perform_execution (job, zypp, UPGRADE_SYSTEM, FALSE, transaction_flags); + + zypp->resolver ()->setUpgradeMode (FALSE); +} + static void backend_update_packages_thread (PkBackendJob *job, GVariant *params, gpointer user_data) { @@ -3432,9 +3462,7 @@ backend_update_packages_thread (PkBackendJob *job, GVariant *params, gpointer us } if (is_tumbleweed ()) { - zypp_backend_finished_error (job, - PK_ERROR_ENUM_NOT_SUPPORTED, - "This product requires to be updated by calling 'pkcon upgrade-system'"); + upgrade_system (job, zypp, transaction_flags); return; } @@ -3480,12 +3508,6 @@ backend_update_packages_thread (PkBackendJob *job, GVariant *params, gpointer us } zypp_perform_execution (job, zypp, UPDATE, FALSE, transaction_flags); - - /* Don't reset upgrade mode if we're simulating the changes. Only reset - * it after the real actions has been done. */ - if (!pk_bitfield_contain (transaction_flags, PK_TRANSACTION_FLAG_ENUM_SIMULATE)) { - zypp->resolver()->setUpgradeMode(FALSE); - } } /** -- 2.24.0 ++++++ PackageKit-zypp-upgrade-system.patch ++++++ >From 3a2bf70f348ea4cea42a3fd258a15440905bd8c3 Mon Sep 17 00:00:00 2001 From: Jonathan Kang <jonathank...@gnome.org> Date: Wed, 6 Nov 2019 15:58:28 +0800 Subject: [PATCH 1/2] zypp: Implement upgrade-system "pkcon upgrade-system" is now the equivalant of "zypper dup" in openSUSE. --- backends/zypp/pk-backend-zypp.cpp | 101 +++++++++++++++++++----------- 1 file changed, 65 insertions(+), 36 deletions(-) Index: PackageKit-1.1.12/backends/zypp/pk-backend-zypp.cpp =================================================================== --- PackageKit-1.1.12.orig/backends/zypp/pk-backend-zypp.cpp +++ PackageKit-1.1.12/backends/zypp/pk-backend-zypp.cpp @@ -100,7 +100,8 @@ using zypp::filesystem::PathInfo; typedef enum { INSTALL, REMOVE, - UPDATE + UPDATE, + UPGRADE_SYSTEM } PerformType; @@ -1113,19 +1114,19 @@ zypp_filter_solvable (PkBitfield filters return TRUE; if (i == PK_FILTER_ENUM_NOT_DOWNLOADED && zypp_package_is_cached (item)) return TRUE; - if (i == PK_FILTER_ENUM_NEWEST) { - if (item.isSystem ()) { - return FALSE; - } - else { - ui::Selectable::Ptr sel = ui::Selectable::get (item); - const PoolItem & newest (sel->highestAvailableVersionObj ()); - - if (newest && zypp::Edition::compare (newest.edition (), item.edition ())) - return TRUE; - return FALSE; - } - } + if (i == PK_FILTER_ENUM_NEWEST) { + if (item.isSystem ()) { + return FALSE; + } + else { + ui::Selectable::Ptr sel = ui::Selectable::get (item); + const PoolItem & newest (sel->highestAvailableVersionObj ()); + + if (newest && zypp::Edition::compare (newest.edition (), item.edition ())) + return TRUE; + return FALSE; + } + } // FIXME: add more enums - cf. libzif logic and pk-enum.h // PK_FILTER_ENUM_SUPPORTED, @@ -1241,6 +1242,10 @@ zypp_get_package_updates (string repo, s if (s->hasInstalledObj()) pks.insert(*it); } + + if (is_tumbleweed ()) { + resolver->setUpgradeMode (FALSE); + } } /** @@ -1486,6 +1491,7 @@ zypp_perform_execution (PkBackendJob *jo _dl_progress = 0; break; case UPDATE: + case UPGRADE_SYSTEM: pk_backend_job_set_status (job, PK_STATUS_ENUM_UPDATE); pk_backend_job_set_percentage(job, 0); _dl_progress = 0; @@ -1509,9 +1515,12 @@ zypp_perform_execution (PkBackendJob *jo case INSTALL: case UPDATE: // for updates we only care for updates - if (it->status ().isToBeUninstalledDueToUpgrade () && !zypp->resolver()->upgradeMode()) + if (it->status ().isToBeUninstalledDueToUpgrade ()) continue; break; + case UPGRADE_SYSTEM: + default: + break; } if (!zypp_backend_pool_item_notify (job, *it, TRUE)) @@ -3338,19 +3347,23 @@ backend_update_packages_thread (PkBacken g_variant_get(params, "(t^a&s)", &transaction_flags, &package_ids); - + ZyppJob zjob(job); ZYpp::Ptr zypp = zjob.get_zypp(); if (zypp == NULL){ return; } + + if (is_tumbleweed ()) { + zypp_backend_finished_error (job, + PK_ERROR_ENUM_NOT_SUPPORTED, + "This product requires to be updated by calling 'pkcon upgrade-system'"); + return; + } + ResPool pool = zypp_build_pool (zypp, TRUE); PkRestartEnum restart = PK_RESTART_ENUM_NONE; - - if ( zypp->resolver()->upgradeMode() ) { - zypp->resolver()->dupSetAllowVendorChange ( ZConfig::instance().solver_dupAllowVendorChange() ); - } PoolStatusSaver saver; @@ -3365,17 +3378,17 @@ backend_update_packages_thread (PkBacken } ui::Selectable::Ptr sel( ui::Selectable::get( solvable )); - + PoolItem item(solvable); // patches are special - they are not installed and can't have update candidates if (sel->kind() != ResKind::patch) { MIL << "sel " << sel->kind() << " " << sel->ident() << endl; - if (sel->installedEmpty() && !zypp->resolver()->upgradeMode()) { + if (sel->installedEmpty()) { zypp_backend_finished_error (job, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Package %s is not installed", package_ids[i]); return; } item = sel->updateCandidateObj(); - if (!item && !zypp->resolver()->upgradeMode()) { + if (!item) { zypp_backend_finished_error(job, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "There is no update candidate for %s", sel->installedObj().satSolvable().asString().c_str()); return; } @@ -3392,7 +3405,11 @@ backend_update_packages_thread (PkBacken zypp_perform_execution (job, zypp, UPDATE, FALSE, transaction_flags); - zypp->resolver()->setUpgradeMode(FALSE); + /* Don't reset upgrade mode if we're simulating the changes. Only reset + * it after the real actions has been done. */ + if (!pk_bitfield_contain (transaction_flags, PK_TRANSACTION_FLAG_ENUM_SIMULATE)) { + zypp->resolver()->setUpgradeMode(FALSE); + } } /** @@ -3405,6 +3422,61 @@ pk_backend_update_packages (PkBackend *b } static void +backend_upgrade_system_thread (PkBackendJob *job, + GVariant *params, + gpointer user_data) +{ + PkBitfield transaction_flags = 0; + ZyppJob zjob (job); + set<PoolItem> candidates; + + g_variant_get (params, "(t&su)", + &transaction_flags, + NULL, + NULL); + + ZYpp::Ptr zypp = zjob.get_zypp (); + if (zypp == NULL) { + return; + } + + /* refresh the repos before checking for updates. */ + if (!zypp_refresh_cache (job, zypp, FALSE)) { + return; + } + zypp_build_pool (zypp, TRUE); + zypp_get_updates (job, zypp, candidates); + if (candidates.empty ()) { + pk_backend_job_error_code (job, PK_ERROR_ENUM_NO_DISTRO_UPGRADE_DATA, + "No Distribution Upgrade Available."); + + return; + } + + zypp->resolver ()->dupSetAllowVendorChange (ZConfig::instance ().solver_dupAllowVendorChange ()); + zypp->resolver ()->doUpgrade (); + + PoolStatusSaver saver; + + zypp_perform_execution (job, zypp, UPGRADE_SYSTEM, FALSE, transaction_flags); + + zypp->resolver ()->setUpgradeMode (FALSE); +} + +/** + * pk_backend_upgrade_system + */ +void +pk_backend_upgrade_system (PkBackend *backend, + PkBackendJob *job, + PkBitfield transaction_flags, + const gchar *distro_id, + PkUpgradeKindEnum upgrade_kind) +{ + pk_backend_job_thread_create (job, backend_upgrade_system_thread, NULL, NULL); +} + +static void backend_repo_set_data_thread (PkBackendJob *job, GVariant *params, gpointer user_data) { MIL << endl;