Hello community,
here is the log from the commit of package yast2-installation for
openSUSE:Factory checked in at 2017-02-04 15:19:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-installation (Old)
and /work/SRC/openSUSE:Factory/.yast2-installation.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-installation"
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-installation/yast2-installation.changes
2017-02-03 20:07:45.487975593 +0100
+++
/work/SRC/openSUSE:Factory/.yast2-installation.new/yast2-installation.changes
2017-02-04 16:52:28.365738147 +0100
@@ -1,0 +2,46 @@
+Fri Feb 3 10:07:35 UTC 2017 - [email protected]
+
+- Downloading release notes: Do not download them at all during
+ AutoYaST (bsc#1009276)
+- Use the directory.yast file to check avilable
+ translations (fate#322372)
+- 3.2.20
+
+-------------------------------------------------------------------
+Wed Feb 1 17:07:23 CET 2017 - [email protected]
+
+- Downloading release notes: Do not try again if the host or the
+ proxy cannot be resolved (bnc#1022784)
+- 3.2.19
+
+-------------------------------------------------------------------
+Fri Jan 27 15:55:33 UTC 2017 - [email protected]
+
+- Ask for installation confirmation in all-in-one dialog before
+ proceed with it. (Fate#322328)
+- 3.2.18
+
+-------------------------------------------------------------------
+Fri Jan 27 09:11:32 UTC 2017 - [email protected]
+
+- Respect newly registered update repos in software proposal and
+ do register. (FATE#322328)
+
+-------------------------------------------------------------------
+Thu Jan 26 14:16:43 UTC 2017 - [email protected]
+
+- handle proposal errors in all-in-one dialog (FATE#322328)
+
+-------------------------------------------------------------------
+Wed Jan 25 15:29:02 UTC 2017 - [email protected]
+
+- Added an all-in-one installation overview for CaaSP (FATE#322328)
+
+-------------------------------------------------------------------
+Wed Jan 25 10:41:33 UTC 2017 - [email protected]
+
+- Add an option to disable the self-update feature through the
+ AutoYaST profile (FATE#319716)
+- 3.2.17
+
+-------------------------------------------------------------------
Old:
----
yast2-installation-3.2.16.tar.bz2
New:
----
yast2-installation-3.2.20.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-installation.spec ++++++
--- /var/tmp/diff_new_pack.o88xcb/_old 2017-02-04 16:52:28.905661273 +0100
+++ /var/tmp/diff_new_pack.o88xcb/_new 2017-02-04 16:52:28.909660704 +0100
@@ -17,7 +17,7 @@
Name: yast2-installation
-Version: 3.2.16
+Version: 3.2.20
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -82,11 +82,11 @@
# Requires: yast2-update
# new root password cwm widget
-Requires: yast2-users >= 3.2.7
-# new keyboard layout cwm widget needed only for CASP, so use version that
works
-# also for SP3
-# FIXME: update dependency when CASP is merged to SP2 and SP3 for yast2-country
-Requires: yast2-country >= 3.1.30
+BuildRequires: yast2-users >= 3.2.8
+Requires: yast2-users >= 3.2.8
+# new keyboard layout cwm widget
+BuildRequires: yast2-country >= 3.2.7
+Requires: yast2-country >= 3.2.7
# Pkg::SourceProvideSignedFile Pkg::SourceProvideDigestedFile
# pkg-bindings are not directly required
@@ -104,8 +104,8 @@
# Top bar with logo
Conflicts: yast2-ycp-ui-bindings < 3.1.7
-# RegserviceSelectionDialog
-Conflicts: yast2-registration < 3.1.179
+# new registration widget
+Conflicts: yast2-registration <= 3.2.1
Obsoletes: yast2-installation-devel-doc
++++++ yast2-installation-3.2.16.tar.bz2 -> yast2-installation-3.2.20.tar.bz2
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/yast2-installation-3.2.16/doc/SELF_UPDATE.md
new/yast2-installation-3.2.20/doc/SELF_UPDATE.md
--- old/yast2-installation-3.2.16/doc/SELF_UPDATE.md 2017-01-24
13:35:27.696000000 +0100
+++ new/yast2-installation-3.2.20/doc/SELF_UPDATE.md 2017-02-03
14:17:23.482807975 +0100
@@ -7,9 +7,21 @@
## Disabling Updates
-Self-update is enabled by default. However, it can be disabled by setting
-`self_update=0` boot option. In the following sections it is assumed that this
-feature is enabled.
+Starting in SUSE Linux Enterprise 12 SP3, self-update is enabled by default.
+However, it can be disabled by setting `self_update=0` boot option. If you're
+using AutoYaST, it is also possible to disable this feature using the
+`self_update` element in the `general` section of the profile:
+
+ ```xml
+ <general>
+ <self_update config:type="boolean">false</self_update>
+ </general>
+ ```
+
+Please, take into account that self-update will be skipped if any option
+disables it (boot parameter *or* AutoYaST profile).
+
+During the rest of this document it is assumed that self-update is enabled.
## Basic Workflow
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/package/yast2-installation.changes
new/yast2-installation-3.2.20/package/yast2-installation.changes
--- old/yast2-installation-3.2.16/package/yast2-installation.changes
2017-01-24 13:35:28.112000000 +0100
+++ new/yast2-installation-3.2.20/package/yast2-installation.changes
2017-02-03 14:17:23.494813976 +0100
@@ -1,4 +1,50 @@
-------------------------------------------------------------------
+Fri Feb 3 10:07:35 UTC 2017 - [email protected]
+
+- Downloading release notes: Do not download them at all during
+ AutoYaST (bsc#1009276)
+- Use the directory.yast file to check avilable
+ translations (fate#322372)
+- 3.2.20
+
+-------------------------------------------------------------------
+Wed Feb 1 17:07:23 CET 2017 - [email protected]
+
+- Downloading release notes: Do not try again if the host or the
+ proxy cannot be resolved (bnc#1022784)
+- 3.2.19
+
+-------------------------------------------------------------------
+Fri Jan 27 15:55:33 UTC 2017 - [email protected]
+
+- Ask for installation confirmation in all-in-one dialog before
+ proceed with it. (Fate#322328)
+- 3.2.18
+
+-------------------------------------------------------------------
+Fri Jan 27 09:11:32 UTC 2017 - [email protected]
+
+- Respect newly registered update repos in software proposal and
+ do register. (FATE#322328)
+
+-------------------------------------------------------------------
+Thu Jan 26 14:16:43 UTC 2017 - [email protected]
+
+- handle proposal errors in all-in-one dialog (FATE#322328)
+
+-------------------------------------------------------------------
+Wed Jan 25 15:29:02 UTC 2017 - [email protected]
+
+- Added an all-in-one installation overview for CaaSP (FATE#322328)
+
+-------------------------------------------------------------------
+Wed Jan 25 10:41:33 UTC 2017 - [email protected]
+
+- Add an option to disable the self-update feature through the
+ AutoYaST profile (FATE#319716)
+- 3.2.17
+
+-------------------------------------------------------------------
Fri Jan 20 08:44:28 UTC 2017 - [email protected]
- bnc#1017752
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/package/yast2-installation.spec
new/yast2-installation-3.2.20/package/yast2-installation.spec
--- old/yast2-installation-3.2.16/package/yast2-installation.spec
2017-01-24 13:35:28.112000000 +0100
+++ new/yast2-installation-3.2.20/package/yast2-installation.spec
2017-02-03 14:17:23.494813976 +0100
@@ -17,7 +17,7 @@
Name: yast2-installation
-Version: 3.2.16
+Version: 3.2.20
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -82,11 +82,11 @@
# Requires: yast2-update
# new root password cwm widget
-Requires: yast2-users >= 3.2.7
-# new keyboard layout cwm widget needed only for CASP, so use version that
works
-# also for SP3
-# FIXME: update dependency when CASP is merged to SP2 and SP3 for yast2-country
-Requires: yast2-country >= 3.1.30
+BuildRequires: yast2-users >= 3.2.8
+Requires: yast2-users >= 3.2.8
+# new keyboard layout cwm widget
+BuildRequires: yast2-country >= 3.2.7
+Requires: yast2-country >= 3.2.7
# Pkg::SourceProvideSignedFile Pkg::SourceProvideDigestedFile
# pkg-bindings are not directly required
@@ -104,8 +104,8 @@
# Top bar with logo
Conflicts: yast2-ycp-ui-bindings < 3.1.7
-# RegserviceSelectionDialog
-Conflicts: yast2-registration < 3.1.179
+# new registration widget
+Conflicts: yast2-registration <= 3.2.1
Obsoletes: yast2-installation-devel-doc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/src/clients/inst_casp_overview.rb
new/yast2-installation-3.2.20/src/clients/inst_casp_overview.rb
--- old/yast2-installation-3.2.16/src/clients/inst_casp_overview.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-3.2.20/src/clients/inst_casp_overview.rb
2017-02-03 14:17:23.494813976 +0100
@@ -0,0 +1,2 @@
+require "installation/clients/inst_casp_overview"
+::Installation::InstCaspOverview.new.run
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/src/lib/installation/clients/inst_casp_overview.rb
new/yast2-installation-3.2.20/src/lib/installation/clients/inst_casp_overview.rb
---
old/yast2-installation-3.2.16/src/lib/installation/clients/inst_casp_overview.rb
1970-01-01 01:00:00.000000000 +0100
+++
new/yast2-installation-3.2.20/src/lib/installation/clients/inst_casp_overview.rb
2017-02-03 14:17:23.502817976 +0100
@@ -0,0 +1,156 @@
+# encoding: utf-8
+
+#
------------------------------------------------------------------------------
+# Copyright (c) 2017 SUSE LLC
+#
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of version 2 of the GNU General Public License as published by the
+# Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, contact SUSE.
+#
+# To contact SUSE about this file by physical or electronic mail, you may find
+# current contact information at www.suse.com.
+#
------------------------------------------------------------------------------
+
+require "users/widgets"
+require "y2country/widgets"
+require "ui/widgets"
+require "tune/widgets"
+require "registration/widgets/registration_code"
+
+require "installation/widgets/overview"
+require "installation/widgets/system_role"
+
+module Installation
+ # This library provides a simple dialog for setting
+ # - the password for the system administrator (root)
+ # - the keyboard layout
+ # This dialog does not write the password to the system,
+ # only stores it in UsersSimple module,
+ # to be written during inst_finish.
+ class InstCaspOverview
+ include Yast::Logger
+ include Yast::I18n
+ include Yast::UIShortcuts
+
+ def run
+ Yast.import "UI"
+ Yast.import "Language"
+ Yast.import "Mode"
+ Yast.import "CWM"
+ Yast.import "Popup"
+ Yast.import "Pkg"
+
+ textdomain "installation"
+
+ # Simplified work-flow do not contain language proposal, but have
software one.
+ # So avoid false positive detection of language change
+ Yast::Pkg.SetPackageLocale(Yast::Language.language)
+
+ # We do not need to create a wizard dialog in installation, but it's
+ # helpful when testing all manually on a running system
+ Yast::Wizard.CreateDialog if separate_wizard_needed?
+
+ ret = nil
+ loop do
+ ret = Yast::CWM.show(
+ content,
+ # Title for installation overview dialog
+ caption: _("Installation Overview"),
+ # Button label: start the installation
+ next_button: _("Install"),
+ # do not show abort and back button
+ abort_button: "",
+ back_button: "",
+ # do not store stuff when just redrawing
+ skip_store_for: [:redraw]
+ )
+ next if ret == :redraw
+
+ # do software proposal
+ d = Yast::WFM.CallFunction("software_proposal",
+ [
+ "MakeProposal",
+ { "simple_mode" => true }
+ ])
+ # report problems with sofware proposal
+ if [:blocker, :fatal].include?(d["warning_level"])
+ # %s is a problem description
+ Yast::Popup.Error(
+ _("Software proposal failed. Cannot proceed with
installation.\n%s") % d["warning"]
+ )
+ # continue only if confirmed
+ elsif Yast::WFM.CallFunction("inst_doit", []) == :next
+ break
+ end
+ end
+
+ Yast::Wizard.CloseDialog if separate_wizard_needed?
+
+ ret
+ end
+
+ private
+
+ def quadrant_layout(upper_left:, lower_left:, upper_right:, lower_right:)
+ HBox(
+ HWeight(
+ 6,
+ VBox(
+ VWeight(5, upper_left),
+ VStretch(),
+ VWeight(5, lower_left)
+ )
+ ),
+ HSpacing(3),
+ HWeight(
+ 4,
+ VBox(
+ VWeight(5, upper_right),
+ VStretch(),
+ VWeight(5, lower_right)
+ )
+ )
+ )
+ end
+
+ # Returns a pair with UI widget-set for the dialog and widgets that can
+ # block installation
+ def content
+ dashboard = Installation::Widgets::DashboardPlace.new
+ quadrant_layout(
+ upper_left: VBox(
+ ::Registration::Widgets::RegistrationCode.new,
+ ::Users::PasswordWidget.new(little_space: true),
+ # use english us as default keyboard layout
+ ::Y2Country::Widgets::KeyboardSelectionCombo.new("english-us")
+ ),
+ lower_left: VBox(
+ Installation::Widgets::SystemRole.new(dashboard),
+ dashboard,
+ Tune::Widgets::SystemInformation.new
+ ),
+ upper_right: VBox(
+ Installation::Widgets::Overview.new(client: "partitions_proposal"),
+ Installation::Widgets::Overview.new(client: "bootloader_proposal")
+ ),
+ lower_right: VBox(
+ Installation::Widgets::Overview.new(client: "network_proposal"),
+ Installation::Widgets::Overview.new(client: "kdump_proposal")
+ )
+ )
+ end
+
+ # Returns whether we need/ed to create new UI Wizard
+ def separate_wizard_needed?
+ Yast::Mode.normal
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/src/lib/installation/clients/inst_download_release_notes.rb
new/yast2-installation-3.2.20/src/lib/installation/clients/inst_download_release_notes.rb
---
old/yast2-installation-3.2.16/src/lib/installation/clients/inst_download_release_notes.rb
2017-01-24 13:35:28.368000000 +0100
+++
new/yast2-installation-3.2.20/src/lib/installation/clients/inst_download_release_notes.rb
2017-02-03 14:17:23.502817976 +0100
@@ -31,9 +31,53 @@
# When cURL returns one of those codes, the download won't be retried
# @see man curl
- # 7 = Failed to connect to host.
- # 28 = Operation timeout.
- CURL_GIVE_UP_RETURN_CODES = [7, 28].freeze
+ CURL_GIVE_UP_RETURN_CODES = {
+ 5 => "Couldn't resolve proxy.",
+ 6 => "Couldn't resolve host.",
+ 7 => "Failed to connect to host.",
+ 28 => "Operation timeout."
+ }.freeze
+
+ # Download of index of release notes for a specific product
+ # @param url_base URL pointing to directory with the index
+ # @param proxy the proxy URL to be passed to curl
+ #
+ # @return true when successful
+ def download_release_notes_index(url_base, proxy)
+ url_index = url_base + "/directory.yast2"
+ log.info("Index with available files: #{url_index}")
+ filename = Builtins.sformat("%1/directory.yast",
SCR.Read(path(".target.tmpdir")))
+ # download the index with much shorter time-out
+ cmd = Builtins.sformat(
+ "/usr/bin/curl --location --verbose --fail --max-time 30
--connect-timeout 15 %1 '%2' --output '%3' > '%4/%5' 2>&1",
+ proxy,
+ url_index,
+ String.Quote(filename),
+ String.Quote(Directory.logdir),
+ "curl_log"
+ )
+ ret = SCR.Execute(path(".target.bash"), cmd)
+ log.info("Downloading release notes index: #{cmd} returned #{ret}")
+ if ret == 0
+ log.info("Release notes index downloaded successfully")
+ index_file = File.read(filename)
+ if index_file.nil? || index_file.empty?
+ log.info("Release notes index empty, not filtering further
downloads")
+ return nil
+ else
+ rn_filter = index_file.split("\n")
+ log.info("Index of RN files at the server: #{rn_filter}")
+ return rn_filter
+ end
+ elsif CURL_GIVE_UP_RETURN_CODES.key? ret
+ log.info "Communication with server for release notes download failed
( #{CURL_GIVE_UP_RETURN_CODES[ret]} ), skipping further attempts."
+ InstData.stop_relnotes_download = true
+ return nil
+ else
+ log.info "Downloading index failed, trying all files according to
selected language"
+ return nil
+ end
+ end
# Download all release notes mentioned in Product::relnotesurl_all
#
@@ -93,9 +137,23 @@
next
end
url_base = url[0, pos]
+
+ rn_filter = download_release_notes_index(url_base, proxy)
+ if InstData.stop_relnotes_download
+ log.info("Skipping release notes download due to previous download
issues")
+ break
+ end
+
url_template = url_base + filename_templ
log.info("URL template: #{url_base}")
[Language.language, Language.language[0..1], "en"].uniq.each do |lang|
+ if !rn_filter.nil?
+ filename = Builtins.sformat(filename_templ, lang)
+ if !rn_filter.include?(filename[1..-1])
+ log.info "File #{filename} not found in index, skipping attempt
download"
+ next
+ end
+ end
url = Builtins.sformat(url_template, lang)
log.info("URL: #{url}")
# Where we want to store the downloaded release notes
@@ -123,8 +181,8 @@
InstData.release_notes[product["short_name"]] =
SCR.Read(path(".target.string"), filename)
InstData.downloaded_release_notes << product["short_name"]
break
- elsif CURL_GIVE_UP_RETURN_CODES.include?(ret)
- log.info "Communication with server for release notes download
failed, skipping further attempts."
+ elsif CURL_GIVE_UP_RETURN_CODES.key? ret
+ log.info "Communication with server for release notes download
failed ( #{CURL_GIVE_UP_RETURN_CODES[ret]} ), skipping further attempts."
InstData.stop_relnotes_download = true
break
else
@@ -161,6 +219,12 @@
return :back if GetInstArgs.going_back
+ # skip download during AutoYaST
+ if Mode.auto
+ log.info "Skipping release notes during AutoYaST-driven installation
or upgrade"
+ return :auto
+ end
+
init_ui
download_release_notes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/src/lib/installation/clients/inst_update_installer.rb
new/yast2-installation-3.2.20/src/lib/installation/clients/inst_update_installer.rb
---
old/yast2-installation-3.2.16/src/lib/installation/clients/inst_update_installer.rb
2017-01-24 13:35:28.400000000 +0100
+++
new/yast2-installation-3.2.20/src/lib/installation/clients/inst_update_installer.rb
2017-02-03 14:17:23.506819976 +0100
@@ -63,13 +63,12 @@
return :next
end
- initialize_progress
-
if Mode.auto
process_profile
- Yast::Progress.NextStage
+ return :next if disabled_in_profile?
end
+ initialize_progress
initialize_packager
# self-update not possible, the repo URL is not defined
@@ -149,6 +148,14 @@
Linuxrc.InstallInf("SelfUpdate") == "0"
end
+ # Determines whether self-update feature is disabled via AutoYaST profile
+ #
+ # @return [Boolean] true if self update has been disabled by AutoYaST
profile
+ def disabled_in_profile?
+ profile = Yast::Profile.current
+ !profile.fetch("general", {}).fetch("self_update", true)
+ end
+
# Return the self-update URLs
#
# @return [Array<URI>] self-update URLs
@@ -582,8 +589,6 @@
_("Restart")
]
- stages.unshift(_("Fetching AutoYast Profile")) if Mode.auto
-
# open a new wizard dialog with title on the top
# (the default dialog with title on the left looks ugly with the
# Progress dialog)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/src/lib/installation/widgets/overview.rb
new/yast2-installation-3.2.20/src/lib/installation/widgets/overview.rb
--- old/yast2-installation-3.2.16/src/lib/installation/widgets/overview.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-3.2.20/src/lib/installation/widgets/overview.rb
2017-02-03 14:17:23.510821975 +0100
@@ -0,0 +1,112 @@
+# encoding: utf-8
+
+#
------------------------------------------------------------------------------
+# Copyright (c) 2017 SUSE LLC
+#
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of version 2 of the GNU General Public License as published by the
+# Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, contact SUSE.
+#
+# To contact SUSE about this file by physical or electronic mail, you may find
+# current contact information at www.suse.com.
+#
------------------------------------------------------------------------------
+
+require "yast"
+require "cwm/widget"
+
+Yast.import "Popup"
+
+module Installation
+ module Widgets
+ # A widget for an all-in-one installation dialog.
+ # It uses the `simple_mode` of {Installation::ProposalClient#make_proposal}
+ # It is immutable, so for showing new values reinitialize widget
+ class Overview < CWM::CustomWidget
+ attr_reader :proposal_client
+
+ # @param client [String] A proposal client implementing simple_mode,
+ # eg. "bootloader_proposal"
+ def initialize(client:)
+ textdomain "installation"
+ @proposal_client = client
+ # by default widget_id is the class name; must differentiate instances
+ self.widget_id = "overview_" + client
+ @blocking = false
+ end
+
+ def contents
+ VBox(
+ Left(PushButton(Id(button_id), label)),
+ * items.map { |i| Left(Label(" * #{i}")) }
+ )
+ end
+
+ def label
+ return @label if @label
+
+ d = Yast::WFM.CallFunction(proposal_client, ["Description", {}])
+ @label = d["menu_title"]
+ end
+
+ def items
+ return @items if @items
+
+ d = Yast::WFM.CallFunction(proposal_client,
+ [
+ "MakeProposal",
+ { "simple_mode" => true }
+ ])
+ if d["warning"] && !d["warning"].empty? && d["warning_level"] !=
:notice
+ Yast::Popup.LongError(
+ format(
+ _("Problem found when proposing %{client}:<br>" \
+ "Severity: %{severity}<br>" \
+ "Message: %{message}"),
+ client: label.delete("&"),
+ severity: (d["warning_level"] || :warning).to_s,
+ message: d["warning"]
+ )
+ )
+ @blocking = [:blocker, :fatal].include?(d["warning_level"])
+ end
+ @items = d["label_proposal"]
+ end
+
+ def handle(_event)
+ Yast::WFM.CallFunction(proposal_client, ["AskUser", {}])
+ :redraw
+ end
+
+ def validate
+ return true unless @blocking
+
+ # %s is a heading of a problematic section, like "Partitioning" or
"Network"
+ Yast::Popup.Error(
+ _("%s blocks the installation. Please solve the problem there before
proceeding.") %
+ label.delete("&")
+ )
+
+ false
+ end
+
+ def blocking?
+ @blocking
+ end
+
+ private
+
+ def button_id
+ # an arbitrary unique id
+ "ask_" + proposal_client
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/src/lib/installation/widgets/system_role.rb
new/yast2-installation-3.2.20/src/lib/installation/widgets/system_role.rb
--- old/yast2-installation-3.2.16/src/lib/installation/widgets/system_role.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-3.2.20/src/lib/installation/widgets/system_role.rb
2017-02-03 14:17:23.510821975 +0100
@@ -0,0 +1,149 @@
+# encoding: utf-8
+
+#
------------------------------------------------------------------------------
+# Copyright (c) 2017 SUSE LLC
+#
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of version 2 of the GNU General Public License as published by the
+# Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, contact SUSE.
+#
+# To contact SUSE about this file by physical or electronic mail, you may find
+# current contact information at www.suse.com.
+#
------------------------------------------------------------------------------
+
+require "yast"
+require "cwm/widget"
+require "installation/services"
+
+Yast.import "ProductControl"
+Yast.import "ProductFeatures"
+
+module Installation
+ module Widgets
+ class DashboardURL < CWM::InputField
+ def label
+ # intentional no translation for CAASP
+ "Dashboard URL"
+ end
+
+ def store
+ # TODO: implement it together with init and some validation
+ end
+ end
+
+ class DashboardPlace < CWM::ReplacePoint
+ def initialize
+ @dashboard = DashboardURL.new
+ @empty = CWM::Empty.new("no_dashboard")
+ super(widget: @empty)
+ end
+
+ def show
+ replace(@dashboard)
+ end
+
+ def hide
+ replace(@empty)
+ end
+ end
+
+ class SystemRole < CWM::ComboBox
+ class << self
+ # once the user selects a role, remember it in case they come back
+ attr_accessor :original_role_id
+ end
+
+ def initialize(dashboard_widget)
+ textdomain "installation"
+ @dashboard_widget = dashboard_widget
+ end
+
+ def label
+ Yast::ProductControl.GetTranslatedText("roles_caption")
+ end
+
+ def opt
+ [:hstretch, :notify]
+ end
+
+ def init
+ self.class.original_role_id ||= roles_description.first[:id]
+ self.value = self.class.original_role_id
+ handle
+ end
+
+ def handle
+ if value == "worker_role"
+ @dashboard_widget.show
+ else
+ @dashboard_widget.hide
+ end
+
+ nil
+ end
+
+ def items
+ roles_description.map do |attr|
+ [attr[:id], attr[:label]]
+ end
+ end
+
+ def help
+ Yast::ProductControl.GetTranslatedText("roles_help") + "\n\n" +
+ roles_description.map { |r| r[:label] + "\n\n" + r[:description]
}.join("\n\n\n")
+ end
+
+ NON_OVERLAY_ATTRIBUTES = [
+ "additional_dialogs",
+ "id"
+ ].freeze
+ private_constant :NON_OVERLAY_ATTRIBUTES
+
+ def store
+ log.info "Applying system role '#{value}'"
+ features = raw_roles.find { |r| r["id"] == value }
+ features = features.dup
+ NON_OVERLAY_ATTRIBUTES.each { |a| features.delete(a) }
+ Yast::ProductFeatures.SetOverlay(features)
+ adapt_services
+ self.class.original_role_id = value
+ end
+
+ private
+
+ def raw_roles
+ @raw_roles ||=
Yast::ProductControl.productControl.fetch("system_roles", [])
+ end
+
+ def roles_description
+ @roles_description ||= raw_roles.map do |r|
+ id = r["id"]
+
+ {
+ id: id,
+ label: Yast::ProductControl.GetTranslatedText(id),
+ description: Yast::ProductControl.GetTranslatedText(id +
"_description")
+ }
+ end
+ end
+
+ def adapt_services
+ services = raw_roles.find { |r| r["id"] == value }["services"]
+ services ||= []
+
+ to_enable = services.map { |s| s["name"] }
+ log.info "enable for #{value} these services: #{to_enable.inspect}"
+
+ Installation::Services.enabled = to_enable
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/test/inst_casp_overview_test.rb
new/yast2-installation-3.2.20/test/inst_casp_overview_test.rb
--- old/yast2-installation-3.2.16/test/inst_casp_overview_test.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-3.2.20/test/inst_casp_overview_test.rb
2017-02-03 14:17:23.526829976 +0100
@@ -0,0 +1,112 @@
+#! /usr/bin/env rspec
+
+require_relative "test_helper"
+
+require "installation/clients/inst_casp_overview"
+
+Yast.import "CWM"
+Yast.import "Language"
+Yast.import "Mode"
+Yast.import "Pkg"
+Yast.import "Popup"
+Yast.import "Wizard"
+
+# stub tune widgets used in dialog
+require "cwm/widget"
+
+module Tune
+ module Widgets
+ class SystemInformation < CWM::PushButton
+ def label
+ "System Information"
+ end
+ end
+ end
+end
+
+module Registration
+ module Widgets
+ class RegistrationCode < CWM::InputField
+ def label
+ "Registration code"
+ end
+ end
+ end
+end
+
+module Users
+ class PasswordWidget < CWM::CustomWidget
+ def initialize(little_space: true)
+ end
+
+ def label
+ "Password"
+ end
+ end
+end
+
+module Y2Country
+ module Widgets
+ class KeyboardSelectionCombo < CWM::ComboBox
+ def initialize(_language)
+ end
+
+ def label
+ "Keyboard"
+ end
+ end
+ end
+end
+
+describe ::Installation::InstCaspOverview do
+ describe "#run" do
+ before do
+ allow(Yast::Wizard).to receive(:CreateDialog)
+ allow(Yast::Wizard).to receive(:CloseDialog)
+ allow(Yast::Pkg).to receive(:SetPackageLocale)
+ allow(Yast::CWM).to receive(:show).and_return(:next)
+ allow(Yast::Language).to receive(:language).and_return("en_US")
+ allow(Yast::WFM).to receive(:CallFunction).and_return({})
+ allow(Yast::WFM).to receive(:CallFunction)
+ .with("inst_doit", []).and_return(:next)
+ end
+
+ it "sets package locale same as Language" do
+ expect(Yast::Pkg).to
receive(:SetPackageLocale).with(Yast::Language.language)
+
+ subject.run
+ end
+
+ it "creates wizard dialog in normal mode" do
+ allow(Yast::Mode).to receive(:normal).and_return(true)
+
+ expect(Yast::Wizard).to receive(:CreateDialog)
+
+ subject.run
+ end
+
+ it "closed wizard dialog in normal mode" do
+ allow(Yast::Mode).to receive(:normal).and_return(true)
+
+ expect(Yast::Wizard).to receive(:CloseDialog)
+
+ subject.run
+ end
+
+ it "shows CWM widgets" do
+ allow(Yast::Mode).to receive(:normal).and_return(true)
+
+ expect(Yast::CWM).to receive(:show).and_return(:next)
+
+ subject.run
+ end
+
+ it "shows CWM widgets again if it returns redraw event" do
+ allow(Yast::Mode).to receive(:normal).and_return(true)
+
+ expect(Yast::CWM).to receive(:show).twice.and_return(:redraw, :next)
+
+ subject.run
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/test/inst_update_installer_test.rb
new/yast2-installation-3.2.20/test/inst_update_installer_test.rb
--- old/yast2-installation-3.2.16/test/inst_update_installer_test.rb
2017-01-24 13:35:28.864000000 +0100
+++ new/yast2-installation-3.2.20/test/inst_update_installer_test.rb
2017-02-03 14:17:23.526829976 +0100
@@ -484,6 +484,15 @@
end
end
end
+
+ context "when update is disabled through the profile" do
+ let(:profile) { { "general" => { "self_update" => false } } }
+
+ it "does not update the installer" do
+ expect(subject).to_not receive(:update_installer)
+ expect(subject.main).to eq(:next)
+ end
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.2.16/test/lib/inst_download_release_notes_test.rb
new/yast2-installation-3.2.20/test/lib/inst_download_release_notes_test.rb
--- old/yast2-installation-3.2.16/test/lib/inst_download_release_notes_test.rb
2017-01-24 13:35:28.892000000 +0100
+++ new/yast2-installation-3.2.20/test/lib/inst_download_release_notes_test.rb
2017-02-03 14:17:23.526829976 +0100
@@ -37,6 +37,10 @@
.and_return([product])
allow(Yast::SCR).to receive(:Execute)
+ .with(Yast::Path.new(".target.bash"), /curl.*directory.yast/)
+ .and_return(CURL_NOT_FOUND_CODE)
+
+ allow(Yast::SCR).to receive(:Execute)
.with(Yast::Path.new(".target.bash"), /curl.*relnotes/)
.and_return(curl_code)
@@ -127,6 +131,39 @@
end
end
+ context "when release notes index file is found" do
+ let(:language) { "es_ES" }
+
+ it "Reads the index and falls back to es" do
+ expect(Yast::SCR).to receive(:Execute)
+ .with(Yast::Path.new(".target.bash"), /curl.*directory.yast/)
+ .and_return(CURL_SUCCESS_CODE)
+ expect(File).to receive(:read)
+ .with(/directory.yast/)
+ .and_return("foo\nRELEASE-NOTES.es.rtf\nbar")
+ expect(Yast::SCR).to receive(:Execute).once
+ .with(Yast::Path.new(".target.bash"),
/curl.*RELEASE-NOTES.#{language[0..1]}.rtf/)
+ .and_return(CURL_SUCCESS_CODE)
+ client.main
+ end
+
+ it "Tries to read the index file, which is empty, falls back to es" do
+ expect(Yast::SCR).to receive(:Execute)
+ .with(Yast::Path.new(".target.bash"), /curl.*directory.yast/)
+ .and_return(CURL_SUCCESS_CODE)
+ expect(File).to receive(:read)
+ .with(/directory.yast/)
+ .and_return("")
+ expect(Yast::SCR).to receive(:Execute).once
+ .with(Yast::Path.new(".target.bash"),
/curl.*RELEASE-NOTES.#{language}.rtf/)
+ .and_return(CURL_NOT_FOUND_CODE)
+ expect(Yast::SCR).to receive(:Execute).once
+ .with(Yast::Path.new(".target.bash"),
/curl.*RELEASE-NOTES.#{language[0..1]}.rtf/)
+ .and_return(CURL_SUCCESS_CODE)
+ client.main
+ end
+ end
+
context "when called twice" do
let(:language) { "en" }
let(:curl_code) { 22 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/yast2-installation-3.2.16/test/test_helper.rb
new/yast2-installation-3.2.20/test/test_helper.rb
--- old/yast2-installation-3.2.16/test/test_helper.rb 2017-01-24
13:35:28.940000000 +0100
+++ new/yast2-installation-3.2.20/test/test_helper.rb 2017-02-03
14:17:23.530831976 +0100
@@ -13,6 +13,9 @@
FIXTURES_DIR = Pathname.new(__FILE__).dirname.join("fixtures")
+# mock some dependencies, to not increase built dependencies
+$LOAD_PATH.unshift(File.join(FIXTURES_DIR.to_s, "stub_libs"))
+
# stub module to prevent its Import
# Useful for modules from different yast packages, to avoid build dependencies
def stub_module(name)