From ac9f91eed2974de0e1da0451677095060d02bf6e Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Fri, 26 Jan 2018 12:57:30 +0100 Subject: [PATCH 1/3] report packages which cannot be selected for installation --- src/modules/AutoinstSoftware.rb | 66 ++++++++++----------------------- 1 file changed, 19 insertions(+), 47 deletions(-) diff --git a/src/modules/AutoinstSoftware.rb b/src/modules/AutoinstSoftware.rb index 84c300fa0..6e86c4ee9 100644 --- a/src/modules/AutoinstSoftware.rb +++ b/src/modules/AutoinstSoftware.rb @@ -98,8 +98,6 @@ def Import(settings) @patterns = settings.fetch("patterns",[]) @instsource = settings.fetch("instsource","") - notFound = "" - # what is this good for? disturbs the main-repo selection # Packages::Init(true); # Packages::InitializeAddOnProducts(); @@ -160,26 +158,6 @@ def Import(settings) :to => "list " ) - Builtins.foreach(Ops.get_list(settings, "packages", [])) do |pack| - if Stage.initial && # We are in the first installation stage - !Mode.config && # but not cloning system to autoinst.xml (bnc#901747) - !Pkg.IsAvailable(pack) # and package is NOT on installation medium - notFound = Ops.add(Ops.add(notFound, pack), "\n") - end - end - if Ops.greater_than(Builtins.size(notFound), 0) - Builtins.y2error("packages not found: %1", notFound) - # warning text during the installation. %1 is a list of package names - Report.Error( - Builtins.sformat( - _( - "These packages could not be found in the software repositories:\n%1" - ), - notFound - ) - ) - end - PackageAI.toinstall = settings.fetch("packages",[]) @kernel = settings.fetch("kernel","") @@ -878,27 +856,13 @@ def Write ) end - autoinstPacks = autoinstPackages - # FIXME: optimization for package list evaluation turned off because it optimized it - # into an unbootable state (no kernel) bnc#427731 - # - # list autoinstPacks = PackageAI::toinstall; - Builtins.y2milestone( - "Packages selected in autoinstall mode: %1", - autoinstPacks - ) - - if Ops.greater_than(Builtins.size(autoinstPacks), 0) - Builtins.y2milestone( - "Installing individual packages: %1", - Pkg.DoProvide(autoinstPacks) - ) - end - + log.info "Individual Packages for installation: #{autoinstPackages}" + failed_packages = {} + failed_packages = Pkg.DoProvide(autoinstPackages) unless autoinstPackages.empty? computed_packages = Packages.ComputeSystemPackageList - Builtins.y2debug("Computed list of packages: %1", computed_packages) - Pkg.DoProvide(computed_packages) + log.info "Computed packages for installation: #{computed_packages}" + failed_packages = failed_packages.merge(Pkg.DoProvide(computed_packages)) unless computed_packages.empty? Builtins.foreach(computed_packages) do |pack2| if Ops.greater_than(Builtins.size(@kernel), 0) && pack2 != @kernel && @@ -921,13 +885,21 @@ def Write Pkg.DoRemove(PackageAI.toremove) end - pack = Storage.AddPackageList - if Ops.greater_than(Builtins.size(pack), 0) - Builtins.y2milestone( - "Installing storage packages: %1", - Pkg.DoProvide(pack) - ) + + storage_pack = Storage.AddPackageList + log.info "Storage packages for installation: #{storage_pack}" + failed_packages = failed_packages.merge(Pkg.DoProvide(storage_pack)) unless storage_pack.empty? + + unless failed_packages.empty? + log.error "Cannot select: #{failed_packages}" + not_selected = "" + failed_packages.each do |name,reason| + not_selected << "#{name}: #{reason}\n" + end + # TRANSLATORS: Warning text during the installation. %s is a list of package + Report.Error(_("These packages cannot be found in the software repositories:\n%s") % not_selected) end + # # Solve dependencies # From 31cc1284c170dd9160c1358c56fd4a7587bdc428 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Fri, 26 Jan 2018 12:59:37 +0100 Subject: [PATCH 2/3] packaging --- package/autoyast2.changes | 7 +++++++ package/autoyast2.spec | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package/autoyast2.changes b/package/autoyast2.changes index 35bf23be2..a8e62543e 100644 --- a/package/autoyast2.changes +++ b/package/autoyast2.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri Jan 26 12:58:17 CET 2018 - schubi@suse.de + +- Reporting packages which cannot be selected for installation. + (bnc#1077292) +- 3.1.169 + ------------------------------------------------------------------- Wed Oct 18 14:09:07 UTC 2017 - igonzalezsosa@suse.com diff --git a/package/autoyast2.spec b/package/autoyast2.spec index bedcefa5b..5863ff814 100644 --- a/package/autoyast2.spec +++ b/package/autoyast2.spec @@ -17,7 +17,7 @@ Name: autoyast2 -Version: 3.1.168 +Version: 3.1.169 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build From c619521530ae1ec703fa9c171d9eb19ee4e179a0 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Fri, 26 Jan 2018 14:51:36 +0100 Subject: [PATCH 3/3] splitted into an own call --- src/modules/AutoinstSoftware.rb | 43 ++++++++++++++++++--------------- test/AutoinstSoftware_test.rb | 12 +++++++++ 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/modules/AutoinstSoftware.rb b/src/modules/AutoinstSoftware.rb index 6e86c4ee9..4b5c3be6a 100644 --- a/src/modules/AutoinstSoftware.rb +++ b/src/modules/AutoinstSoftware.rb @@ -856,14 +856,9 @@ def Write ) end - log.info "Individual Packages for installation: #{autoinstPackages}" - failed_packages = {} - failed_packages = Pkg.DoProvide(autoinstPackages) unless autoinstPackages.empty? + SelectPackagesForInstallation() computed_packages = Packages.ComputeSystemPackageList - log.info "Computed packages for installation: #{computed_packages}" - failed_packages = failed_packages.merge(Pkg.DoProvide(computed_packages)) unless computed_packages.empty? - Builtins.foreach(computed_packages) do |pack2| if Ops.greater_than(Builtins.size(@kernel), 0) && pack2 != @kernel && Builtins.search(pack2, "kernel-") == 0 @@ -886,20 +881,6 @@ def Write Pkg.DoRemove(PackageAI.toremove) end - storage_pack = Storage.AddPackageList - log.info "Storage packages for installation: #{storage_pack}" - failed_packages = failed_packages.merge(Pkg.DoProvide(storage_pack)) unless storage_pack.empty? - - unless failed_packages.empty? - log.error "Cannot select: #{failed_packages}" - not_selected = "" - failed_packages.each do |name,reason| - not_selected << "#{name}: #{reason}\n" - end - # TRANSLATORS: Warning text during the installation. %s is a list of package - Report.Error(_("These packages cannot be found in the software repositories:\n%s") % not_selected) - end - # # Solve dependencies # @@ -1095,6 +1076,28 @@ def SavedPackageSelection @saved_package_selection end + def SelectPackagesForInstallation + log.info "Individual Packages for installation: #{autoinstPackages}" + failed_packages = {} + failed_packages = Pkg.DoProvide(autoinstPackages) unless autoinstPackages.empty? + computed_packages = Packages.ComputeSystemPackageList + log.info "Computed packages for installation: #{computed_packages}" + failed_packages = failed_packages.merge(Pkg.DoProvide(computed_packages)) unless computed_packages.empty? + storage_pack = Storage.AddPackageList + log.info "Storage packages for installation: #{storage_pack}" + failed_packages = failed_packages.merge(Pkg.DoProvide(storage_pack)) unless storage_pack.empty? + + unless failed_packages.empty? + log.error "Cannot select: #{failed_packages}" + not_selected = "" + failed_packages.each do |name,reason| + not_selected << "#{name}: #{reason}\n" + end + # TRANSLATORS: Warning text during the installation. %s is a list of package + Report.Error(_("These packages cannot be found in the software repositories:\n%s") % not_selected) + end + end + publish :variable => :Software, :type => "map" publish :variable => :image, :type => "map " publish :variable => :image_arch, :type => "string" diff --git a/test/AutoinstSoftware_test.rb b/test/AutoinstSoftware_test.rb index 8bf211b6c..94ab889aa 100755 --- a/test/AutoinstSoftware_test.rb +++ b/test/AutoinstSoftware_test.rb @@ -29,4 +29,16 @@ end + describe "selecting packages for installation" do + it "shows a popup if some packages have not been found" do + allow(subject).to receive(:autoinstPackages).and_return(["a1"]) + expect(Yast::Packages).to receive(:ComputeSystemPackageList).and_return([]) + expect(Yast::Storage).to receive(:AddPackageList).and_return(["a2","a3"]) + expect(Yast::Pkg).to receive(:DoProvide).with(["a1"]).and_return({"a1" => "not found"}) + expect(Yast::Pkg).to receive(:DoProvide).with(["a2","a3"]).and_return({}) + expect(Yast::Report).to receive(:Error) + subject.SelectPackagesForInstallation() + end + end + end