Hello community, here is the log from the commit of package autoyast2 for openSUSE:Factory checked in at 2016-08-18 10:20:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/autoyast2 (Old) and /work/SRC/openSUSE:Factory/.autoyast2.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "autoyast2" Changes: -------- --- /work/SRC/openSUSE:Factory/autoyast2/autoyast2.changes 2016-07-16 22:12:59.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.autoyast2.new/autoyast2.changes 2016-08-18 10:20:41.000000000 +0200 @@ -1,0 +2,53 @@ +Wed Aug 17 09:56:28 CEST 2016 - [email protected] + +- Improved logging for broken script descriptions. + Still a part of bnc#986049. +- 3.1.147 + +------------------------------------------------------------------- +Mon Aug 12 10:48:18 CEST 2016 - [email protected] + +- Cloning devices: Devices which are not needed for the + installation will be ignored explicitly in the "skip_list". + (bnc#989392) +- 3.1.146 + +------------------------------------------------------------------- +Thu Aug 11 15:45:01 CEST 2016 - [email protected] + +- Added "confirm_base_product_license" to rnc file. + (bnc#992535) +- 3.1.145 + +------------------------------------------------------------------- +Fri Aug 5 15:37:30 CEST 2016 - [email protected] + +- Reintroduced autoyast=usb as a valid URL to AutoYaST profile + (bsc#987858) +- 3.1.144 + +------------------------------------------------------------------- +Tue Aug 2 12:28:29 CEST 2016 - [email protected] + +- Added missed flag "install_recommended" in software section. + (bnc#990494) +- 3.1.143 + +------------------------------------------------------------------- +Fri Jul 29 16:12:42 CEST 2016 - [email protected] + +- Added new [Stop] button for <ask> dialogs with timeout. The + button shows the current time in seconds till the automatic + timeout (bsc#990114). +- More possible user actions can now stop the execution to prevent + from timeout (bsc#990114). +- 3.1.142 + +------------------------------------------------------------------- +Mon Jul 25 12:50:20 CEST 2016 - [email protected] + +- Check if AutoYaST "script" elements are hashes. + Other entries will be ignored. (bnc#986049) +- 3.1.141 + +------------------------------------------------------------------- Old: ---- autoyast2-3.1.140.tar.bz2 New: ---- autoyast2-3.1.147.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ autoyast2.spec ++++++ --- /var/tmp/diff_new_pack.bNR1Dt/_old 2016-08-18 10:20:42.000000000 +0200 +++ /var/tmp/diff_new_pack.bNR1Dt/_new 2016-08-18 10:20:42.000000000 +0200 @@ -17,7 +17,7 @@ Name: autoyast2 -Version: 3.1.140 +Version: 3.1.147 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -35,6 +35,7 @@ BuildRequires: yast2 BuildRequires: yast2-packager BuildRequires: yast2-services-manager +BuildRequires: yast2-slp BuildRequires: yast2-storage >= 3.1.59 BuildRequires: yast2-transfer BuildRequires: yast2-update >= 3.1.36 ++++++ autoyast2-3.1.140.tar.bz2 -> autoyast2-3.1.147.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/.travis.yml new/autoyast2-3.1.147/.travis.yml --- old/autoyast2-3.1.140/.travis.yml 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/.travis.yml 2016-08-17 10:56:40.000000000 +0200 @@ -5,7 +5,7 @@ # disable rvm, use system Ruby - rvm reset - wget https://raw.githubusercontent.com/yast/yast-devtools/master/travis-tools/travis_setup.sh - - sh ./travis_setup.sh -p "rake yast2-devtools yast2-testsuite yast2 yast2-storage yast2-xml yast2-transfer yast2-services-manager yast2-installation yast2-installation-control yast2-packager trang" -g "rspec:3.3.0 yast-rake gettext" + - sh ./travis_setup.sh -p "rake yast2-devtools yast2-testsuite yast2 yast2-storage yast2-xml yast2-transfer yast2-services-manager yast2-installation yast2-installation-control yast2-packager yast2-slp trang" -g "rspec:3.3.0 yast-rake gettext" script: - rake check:syntax - rake check:pot diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/POTFILES new/autoyast2-3.1.147/POTFILES --- old/autoyast2-3.1.140/POTFILES 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/POTFILES 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -src/config/autoinst_modules.conf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/package/autoyast2.changes new/autoyast2-3.1.147/package/autoyast2.changes --- old/autoyast2-3.1.140/package/autoyast2.changes 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/package/autoyast2.changes 2016-08-17 10:56:40.000000000 +0200 @@ -1,4 +1,57 @@ ------------------------------------------------------------------- +Wed Aug 17 09:56:28 CEST 2016 - [email protected] + +- Improved logging for broken script descriptions. + Still a part of bnc#986049. +- 3.1.147 + +------------------------------------------------------------------- +Mon Aug 12 10:48:18 CEST 2016 - [email protected] + +- Cloning devices: Devices which are not needed for the + installation will be ignored explicitly in the "skip_list". + (bnc#989392) +- 3.1.146 + +------------------------------------------------------------------- +Thu Aug 11 15:45:01 CEST 2016 - [email protected] + +- Added "confirm_base_product_license" to rnc file. + (bnc#992535) +- 3.1.145 + +------------------------------------------------------------------- +Fri Aug 5 15:37:30 CEST 2016 - [email protected] + +- Reintroduced autoyast=usb as a valid URL to AutoYaST profile + (bsc#987858) +- 3.1.144 + +------------------------------------------------------------------- +Tue Aug 2 12:28:29 CEST 2016 - [email protected] + +- Added missed flag "install_recommended" in software section. + (bnc#990494) +- 3.1.143 + +------------------------------------------------------------------- +Fri Jul 29 16:12:42 CEST 2016 - [email protected] + +- Added new [Stop] button for <ask> dialogs with timeout. The + button shows the current time in seconds till the automatic + timeout (bsc#990114). +- More possible user actions can now stop the execution to prevent + from timeout (bsc#990114). +- 3.1.142 + +------------------------------------------------------------------- +Mon Jul 25 12:50:20 CEST 2016 - [email protected] + +- Check if AutoYaST "script" elements are hashes. + Other entries will be ignored. (bnc#986049) +- 3.1.141 + +------------------------------------------------------------------- Tue Jul 14 15:01:29 CEST 2016 - [email protected] - Exporting NFS root partition correctly. (bnc#986124) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/package/autoyast2.spec new/autoyast2-3.1.147/package/autoyast2.spec --- old/autoyast2-3.1.140/package/autoyast2.spec 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/package/autoyast2.spec 2016-08-17 10:56:40.000000000 +0200 @@ -17,7 +17,7 @@ Name: autoyast2 -Version: 3.1.140 +Version: 3.1.147 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -40,6 +40,7 @@ BuildRequires: yast2-services-manager BuildRequires: yast2-packager BuildRequires: yast2-update >= 3.1.36 +BuildRequires: yast2-slp # %%{_unitdir} macro definition is in a separate package since 13.1 %if 0%{?suse_version} >= 1310 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/src/autoyast-rnc/general.rnc new/autoyast2-3.1.147/src/autoyast-rnc/general.rnc --- old/autoyast2-3.1.140/src/autoyast-rnc/general.rnc 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/src/autoyast-rnc/general.rnc 2016-08-17 10:56:40.000000000 +0200 @@ -10,6 +10,7 @@ element final_halt { BOOLEAN }? & element final_reboot { BOOLEAN }? & element forceboot { BOOLEAN }? & + element confirm_base_product_license { BOOLEAN }? & element ntp_sync_time_before_installation { text }? & element max_systemd_wait { INTEGER }? }? & diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/src/include/autoinstall/ask.rb new/autoyast2-3.1.147/src/include/autoinstall/ask.rb --- old/autoyast2-3.1.140/src/include/autoinstall/ask.rb 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/src/include/autoinstall/ask.rb 2016-08-17 10:56:40.000000000 +0200 @@ -9,7 +9,11 @@ # $Id$ module Yast module AutoinstallAskInclude + include Yast::Logger + def initialize_autoinstall_ask(include_target) + textdomain "autoinst" + Yast.import "Profile" Yast.import "UI" Yast.import "Label" @@ -37,6 +41,44 @@ deep_copy(ret) end + # Function handles any user input in askDialog or timeouts if user did not + # give any input during the countdown + # + # @param [Integer] timeout in seconds + # @return [Symbol] any user input or :timeout in case of timeout + def user_input_with_countdown(timeout) + ret = nil + + if timeout == 0 + log.info "Waiting for user to enter their data" + ret = UI.UserInput + else + log.info "Waiting #{timeout} sec for the user to enter their data" + sec_till_timeout = timeout + + while (sec_till_timeout > 0) + UI.ReplaceWidget(:stop_button, PushButton(Id(:stop_timeout), "#{Label.StopButton} (#{sec_till_timeout})")) + sec_till_timeout -= 1 + ret = UI.TimeoutUserInput(1000) + + # User has done something in UI - stop the timeout + if ret != :timeout + log.info "Countdown stopped by user" + + if ret == :stop_timeout + UI.ChangeWidget(Id(:stop_timeout), :Enabled, false) + UI.SetFocus(:ok) + end + + # leave the timeout-loop now + break + end + end + end + + ret + end + def askDialog mod = false @@ -219,7 +261,7 @@ ) ) end - widget = ComboBox(Id(entry_id), Opt(:notify), question, dummy) + widget = ComboBox(Id(entry_id), Opt(:notify, :immediate), question, dummy) dlg = createWidget(widget, frametitle) elsif type == "static_text" widget = Label(Id(entry_id), Ops.get_string(ask, "default", "")) @@ -228,13 +270,13 @@ if Ops.get_boolean(ask, "password", false) == true widget1 = Password( Id(entry_id), - Opt(:notify), + Opt(:notify, :notifyContextMenu), question, Ops.get_string(ask, "default", "") ) widget2 = Password( Id("#{entry_id}_pass2"), - Opt(:notify), + Opt(:notify, :notifyContextMenu), "", Ops.get_string(ask, "default", "") ) @@ -259,9 +301,9 @@ widget = ComboBox(Id(entry_id), Opt(:notify), question, dummy) dlg = createWidget(widget, frametitle) else - widget = TextEntry( + widget = InputField( Id(entry_id), - Opt(:notify), + Opt(:hstretch, :notify, :notifyContextMenu), question, Ops.get_string(ask, "default", "") ) @@ -325,7 +367,12 @@ dialog_term, VSpacing(1), VStretch(), - HBox(HStretch(), backButton, PushButton(Id(:ok), ok_label)) + HBox( + HStretch(), + backButton, + ReplacePoint(Id(:stop_button), Empty()), + PushButton(Id(:ok), ok_label) + ) ) ), HSpacing(1) @@ -342,12 +389,11 @@ # while true ret = nil - if timeout == 0 - ret = UI.UserInput - else - ret = UI.TimeoutUserInput(Ops.multiply(timeout, 1000)) - end - timeout = 0 + + ret = user_input_with_countdown(timeout) + # Any user action stops the timeout + timeout = 0 if ret != :timeout + if ret == :ok || ret == :timeout # Process users' input and save asks into dialogs hash. runAgain = 0 element_cnt2 = 0 @@ -562,9 +608,13 @@ Ops.subtract(Builtins.size(history), 1) ) break + else + log.info "User ret ignored: #{ret}" end end + UI.CloseDialog + if jumpToDialog != -2 # If we must jump to another dialog (as read on /tmp/next_dialog) dialog_nr = jumpToDialog jumpToDialog = -2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/src/modules/AutoinstConfig.rb new/autoyast2-3.1.147/src/modules/AutoinstConfig.rb --- old/autoyast2-3.1.140/src/modules/AutoinstConfig.rb 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/src/modules/AutoinstConfig.rb 2016-08-17 10:56:40.000000000 +0200 @@ -17,6 +17,10 @@ include ServicesManagerTargetClass::BaseTargets end + DEFAULT_PROFILE_NAME = "autoinst.xml".freeze + + include Yast::Logger + def main Yast.import "UI" textdomain "autoinst" @@ -28,6 +32,7 @@ Yast.import "SLP" Yast.import "Stage" Yast.import "Label" + Yast.import "Report" Yast.include self, "autoinstall/xml.rb" @@ -214,114 +219,158 @@ nil end - - # Return location of profile from command line. - # @return [Hash] with protocol, server, path - # @example autoyast=http://www.server.com/profiles/ - def ParseCmdLine(autoinstall) - Yast.import "URL" - - result = {} - cmdLine = "" - - if Ops.greater_than(Builtins.size(autoinstall), 0) - cmdLine = autoinstall - if cmdLine == "default" - Ops.set(result, "scheme", "file") - Ops.set(result, "path", "/autoinst.xml") - else - if cmdLine == "slp" - slpData = SLP.FindSrvs("autoyast", "") - if Ops.greater_than(Builtins.size(slpData), 1) - dummy = [] - comment2url = {} - Builtins.foreach(slpData) do |m| - attrList = SLP.FindAttrs(Ops.get_string(m, "srvurl", "")) - if Ops.greater_than(Builtins.size(attrList), 0) - url = Builtins.substring(Ops.get_string(m, "srvurl", ""), 17) - # FIXME: that's really lazy coding here but I allow only one attribute currently anyway - # so it's lazy but okay. No reason to be too strict here with the checks - # As soon as more than one attr is possible, I need to iterate over the attr list - # - comment = Ops.get(attrList, 0, "") - # The line above needs to be fixed when we have more attributes - - # comment will look like this: "(description=BLA BLA)" - startComment = Builtins.findfirstof(comment, "=") - endComment = Builtins.findlastof(comment, ")") - if startComment != nil && endComment != nil && - Ops.greater_than( - Ops.subtract(Ops.subtract(endComment, startComment), 1), - 0 - ) - comment = Builtins.substring( - comment, - Ops.add(startComment, 1), - Ops.subtract(Ops.subtract(endComment, startComment), 1) - ) - else - comment = "" - end - if Ops.less_than(Builtins.size(comment), 1) - comment = Builtins.sformat( - "bad description in SLP for %1", - url - ) - end - dummy = Builtins.add(dummy, Item(comment, false)) - Ops.set(comment2url, comment, url) - else - url = Builtins.substring(Ops.get_string(m, "srvurl", ""), 17) - dummy = Builtins.add(dummy, Item(url, false)) - Ops.set(comment2url, url, url) - end - end - dlg = Left(ComboBox(Id(:choose), _("Choose Profile"), dummy)) - UI.OpenDialog(VBox(dlg, PushButton(Id(:ok), Label.OKButton))) - UI.UserInput - cmdLine = Ops.get( - comment2url, - Convert.to_string(UI.QueryWidget(Id(:choose), :Value)), - "" + # Searches for 'autoyast' via SLP and returns the full URL of + # the profile. If more providers are found, user is asked to + # select one. + # + # FIXME: This function has been intentionally left (almost) intact + # and needs refactoring + # + # @return [String] profile location or 'nil' if nothing is found + def find_slp_autoyast + profile_location = nil + + slpData = SLP.FindSrvs("autoyast", "") + + # SLP data returned by SLP server contain the service ID, colon + # and then the URL of that service + url_starts_at = "service.autoyast:".size + + # More providers to choose from + if Ops.greater_than(Builtins.size(slpData), 1) + dummy = [] + comment2url = {} + Builtins.foreach(slpData) do |m| + attrList = SLP.FindAttrs(Ops.get_string(m, "srvurl", "")) + + if Ops.greater_than(Builtins.size(attrList), 0) + url = Builtins.substring(Ops.get_string(m, "srvurl", ""), url_starts_at) + # FIXME: that's really lazy coding here but I allow only one attribute currently anyway + # so it's lazy but okay. No reason to be too strict here with the checks + # As soon as more than one attr is possible, I need to iterate over the attr list + # + comment = Ops.get(attrList, 0, "") + # The line above needs to be fixed when we have more attributes + + # comment will look like this: "(description=BLA BLA)" + startComment = Builtins.findfirstof(comment, "=") + endComment = Builtins.findlastof(comment, ")") + + if startComment != nil && endComment != nil && + Ops.greater_than( + Ops.subtract(Ops.subtract(endComment, startComment), 1), + 0 ) - UI.CloseDialog - elsif Builtins.size(slpData) == 1 - cmdLine = Builtins.substring( - Ops.get_string(slpData, [0, "srvurl"], ""), - 17 + comment = Builtins.substring( + comment, + Ops.add(startComment, 1), + Ops.subtract(Ops.subtract(endComment, startComment), 1) ) else - cmdLine = "slp query for 'autoyast' failed" + comment = "" end + + if Ops.less_than(Builtins.size(comment), 1) + comment = Builtins.sformat( + "bad description in SLP for %1", + url + ) + end + + dummy = Builtins.add(dummy, Item(comment, false)) + Ops.set(comment2url, comment, url) + else + url = Builtins.substring(Ops.get_string(m, "srvurl", ""), url_starts_at) + dummy = Builtins.add(dummy, Item(url, false)) + Ops.set(comment2url, url, url) end - result = URL.Parse(cmdLine) - @OriginalURI = cmdLine end + + dlg = Left(ComboBox(Id(:choose), _("Choose Profile"), dummy)) + + UI.OpenDialog(VBox(dlg, PushButton(Id(:ok), Label.OKButton))) + UI.UserInput + + profile_location = Ops.get( + comment2url, + Convert.to_string(UI.QueryWidget(Id(:choose), :Value)), + "" + ) + + UI.CloseDialog + + # just one provider + elsif Builtins.size(slpData) == 1 + profile_location = Builtins.substring( + Ops.get_string(slpData, [0, "srvurl"], ""), + 17 + ) + + # Nothing returned by SLP query + else + log.error "slp query for 'autoyast' failed" + Report.Error(_("No 'autoyast' provider has been found via SLP.")) end + profile_location + end - if Ops.get_string(result, "scheme", "") == "" + # Updates or extends the profile location according to defaults + # @param [String] AutoYast profile location as defined on commandline + # @return [String] updated profile location + def update_profile_location(profile_location) + if profile_location.nil? || profile_location == "" + # FIXME: reevaluate this statement + # # Autoinstall mode was not activated from command line. # There must be a floppy with an 'autoinst.xml' in order # to be able to reach this point, so we set floppy with # autoinst.xml as the control file. - - result = Builtins.add(result, "scheme", "floppy") - result = Builtins.add(result, "path", "/autoinst.xml") + profile_location = "floppy:///#{DEFAULT_PROFILE_NAME}" + elsif profile_location == "default" + profile_location = "file:///#{DEFAULT_PROFILE_NAME}" + # bsc#987858: autoyast=usb checks for the default profile + elsif profile_location == "usb" + profile_location = "usb:///#{DEFAULT_PROFILE_NAME}" + elsif profile_location == "slp" + profile_location = find_slp_autoyast + else + profile_location end - @urltok = deep_copy(result) + end + + # Processes location of the profile given as a parameter. + # @param [String] AutoYast profile location as defined on commandline + # @example autoyast=http://www.server.com/profiles/ + # Fills internal variables + def ParseCmdLine(profile_location) - @scheme = Ops.get_string(@urltok, "scheme", "default") - @host = Ops.get_string(@urltok, "host", "") - @filepath = Ops.get_string(@urltok, "path", "") - @port = Ops.get_string(@urltok, "port", "") - @user = Ops.get_string(@urltok, "user", "") - @pass = Ops.get_string(@urltok, "pass", "") + log.info "AutoYast profile location #{profile_location}" - if @scheme == "default" || @scheme == "file" || @scheme == "floppy" - @remoteProfile = false + profile_location = update_profile_location(profile_location) + # There is no profile defined/found anywhere + return false if profile_location.nil? + + parsed_url = URL.Parse(profile_location) + + if parsed_url["scheme"].nil? || parsed_url["scheme"] == "" + Report.Error(_("Invalid AutoYaST profile URL\n%{url}") % {:url => profile_location}) + return false end - Builtins.y2milestone("urltok = %1", @urltok) + + @OriginalURI = profile_location + @urltok = deep_copy(parsed_url) + + @scheme = parsed_url["scheme"] || "default" + @host = parsed_url["host"] || "" + @filepath = parsed_url["path"] || "" + @port = parsed_url["port"] || "" + @user = parsed_url["user"] || "" + @pass = parsed_url["pass"] || "" + + @remoteProfile = !["default", "file", "floppy", "usb", "device"].include?(@scheme) + + log.info "urltok = #{URL.HidePassword(profile_location)}" true end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/src/modules/AutoinstPartPlan.rb new/autoyast2-3.1.147/src/modules/AutoinstPartPlan.rb --- old/autoyast2-3.1.140/src/modules/AutoinstPartPlan.rb 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/src/modules/AutoinstPartPlan.rb 2016-08-17 10:56:40.000000000 +0200 @@ -46,6 +46,13 @@ # default value of settings modified @modified = false + + # Devices which do not have any mount point, lvm_group or raid_name + # These devices will not be taken in the AutoYaSt configuration file + # but will be added to the skip_list in order not regarding it while + # next installation. (bnc#989392) + @skipped_devices = [] + end # Function sets internal variable, which indicates, that any @@ -660,6 +667,9 @@ end deep_copy(drive) end + + @skipped_devices = [] + drives = Builtins.filter( Convert.convert(drives, :from => "list", :to => "list <map>") ) do |v| @@ -672,8 +682,10 @@ raise Break end end + @skipped_devices << v["device"] unless keep keep end + Builtins.y2milestone("Skipped devices: #{@skipped_devices}") Mode.SetMode("autoinst_config") deep_copy(drives) @@ -800,6 +812,19 @@ deep_copy(d) end + # Adding skipped devices to partitioning section. + # These devices will not be taken in the AutoYaSt configuration file + # but will be added to the skip_list in order not regarding it while + # next installation. (bnc#989392) + unless @skipped_devices.empty? + skip_device = {} + skip_device["initialize"] = true + skip_device["skip_list"] = @skipped_devices.collect do |dev| + {"skip_key" => "device", "skip_value" => dev} + end + clean_drives << skip_device + end + deep_copy(clean_drives) end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/src/modules/AutoinstScripts.rb new/autoyast2-3.1.147/src/modules/AutoinstScripts.rb --- old/autoyast2-3.1.140/src/modules/AutoinstScripts.rb 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/src/modules/AutoinstScripts.rb 2016-08-17 10:56:40.000000000 +0200 @@ -10,6 +10,9 @@ module Yast class AutoinstScriptsClass < Module + + include Yast::Logger + def main Yast.import "UI" textdomain "autoinst" @@ -62,6 +65,17 @@ @modified end + # Checking if the script has the right format + # @param [Hash] scripts section of the AutoYast configuration + # @param [String] kind of script (pre, post,..) + # @return [Array<String>] of scripts + def valid_scripts_for(tree, key) + tree.fetch(key, []).select do |h| + next true if h.is_a?(Hash) + log.warn "Cannot evaluate #{key}: #{h.inspect}" + false + end + end # merge all types of scripts into one single list # @param - @@ -304,11 +318,12 @@ def Import(s) s = deep_copy(s) Builtins.y2debug("Calling AutoinstScripts::Import()") - @pre = Ops.get_list(s, "pre-scripts", []) - @init = Ops.get_list(s, "init-scripts", []) - @post = Ops.get_list(s, "post-scripts", []) - @chroot = Ops.get_list(s, "chroot-scripts", []) - @postpart = Ops.get_list(s, "postpartitioning-scripts", []) + # take only hash entries (bnc#986049) + @pre = valid_scripts_for(s, "pre-scripts") + @init = valid_scripts_for(s, "init-scripts") + @post = valid_scripts_for(s, "post-scripts") + @chroot = valid_scripts_for(s, "chroot-scripts") + @postpart = valid_scripts_for(s, "postpartitioning-scripts") @pre = Resolve_location(@pre) @init = Resolve_location(@init) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/src/modules/AutoinstSoftware.rb new/autoyast2-3.1.147/src/modules/AutoinstSoftware.rb --- old/autoyast2-3.1.140/src/modules/AutoinstSoftware.rb 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/src/modules/AutoinstSoftware.rb 2016-08-17 10:56:40.000000000 +0200 @@ -702,6 +702,12 @@ Ops.set(s, "image", @image) + # In the installed system the flag solver.onlyRequires in zypp.conf is + # set to true. This differs from the installation process. So we have + # to set "install_recommended" to true in order to reflect the + # installation process and cannot use the package bindings. (bnc#990494) + Ops.set(s, "install_recommended", true) + deep_copy(s) end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/test/AutoinstConfig_tests.rb new/autoyast2-3.1.147/test/AutoinstConfig_tests.rb --- old/autoyast2-3.1.140/test/AutoinstConfig_tests.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/autoyast2-3.1.147/test/AutoinstConfig_tests.rb 2016-08-17 10:56:40.000000000 +0200 @@ -0,0 +1,113 @@ +#!/usr/bin/env rspec + +require_relative "test_helper" + +Yast.import "AutoinstConfig" + +describe Yast::AutoinstConfig do + subject { Yast::AutoinstConfig } + + describe "#find_slp_autoyast" do + before do + allow(Yast::SLP).to receive(:FindSrvs).with("autoyast", "").and_return(slp_server_reply) + end + + context "when no 'autoyast' provider returned by SLP" do + let(:slp_server_reply) { [] } + + it "returns nil" do + expect(subject.find_slp_autoyast).to eq(nil) + end + end + + context "when only one 'autoyast' provider returned by SLP" do + let(:service_url) { "https://192.168.0.1/autoinst.xml" } + let(:slp_server_reply) { [{ "srvurl" => "service:autoyast:#{service_url}" }] } + + it "returns the service URL" do + expect(subject.find_slp_autoyast).to eq(service_url) + end + end + + context "when two or more 'autoyast' services are returned by SLP" do + before do + allow(Yast::UI).to receive(:OpenDialog).and_return(true) + allow(Yast::UI).to receive(:UserInput).and_return(:ok) + allow(Yast::UI).to receive(:CloseDialog).and_return(true) + expect(Yast::UI).to receive(:QueryWidget).and_return(service_url_2) + end + + let(:service_url_1) { "https://192.168.0.1/autoinst.xml" } + let(:service_url_2) { "https://192.168.0.2/autoinst.xml" } + + let(:slp_server_reply) { + [ + {"srvurl" => "service:autoyast:#{service_url_1}" }, + {"srvurl" => "service:autoyast:#{service_url_2}" } + ] + } + + context "when no additional SLP attributes are found" do + it "asks user to choose one URL and returns the selected one" do + allow(Yast::SLP).to receive(:FindAttrs).and_return([]) + + expect(subject.find_slp_autoyast).to eq(service_url_2) + end + end + end + end + + describe "#update_profile_location" do + context "when profile location is not defined" do + it "returns 'floppy' with path to a profile as the new location" do + expect(subject.update_profile_location("")).to match(/floppy:\/+.*xml/) + end + end + + context "when profile location is 'default'" do + it "returns 'file' with path to a profile as the new location" do + expect(subject.update_profile_location("default")).to match(/file:\/+.*xml/) + end + end + + context "when profile location is 'usb'" do + it "returns 'usb' with path to a profile as the new location" do + expect(subject.update_profile_location("usb")).to match(/usb:\/+.*xml/) + end + end + + context "when profile location is 'slp'" do + let(:url_from_slp) { "https://user@pass:server/path/to/profile.xml" } + + it "returns the URL found using SLP search" do + allow(subject).to receive(:find_slp_autoyast).and_return(url_from_slp) + expect(subject.update_profile_location("slp")).to eq(url_from_slp) + end + end + end + + describe "#ParseCmdLine" do + context "when the profile url is invalid" do + let(:autoyast_profile_url) { "//file:8080/path/auto-installation.xml" } + it "reports an error and returns false" do + expect(Yast::Report).to receive(:Error).with(/Invalid.*/).and_call_original + expect(subject.ParseCmdLine(autoyast_profile_url)).to eq(false) + end + end + + context "when the autoyast profile url is valid" do + let(:autoyast_profile_url) { "https://moo:[email protected]:8080/path/auto-installation.xml" } + + it "parses the given profile location and fill internal structures and returns boolean whether it succeded" do + expect(subject.ParseCmdLine(autoyast_profile_url)).to eq(true) + + expect(subject.scheme).to eq("https") + expect(subject.host).to eq("192.168.0.1") + expect(subject.filepath).to eq("/path/auto-installation.xml") + expect(subject.port).to eq("8080") + expect(subject.user).to eq("moo") + expect(subject.pass).to eq("woo") + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/test/AutoinstPartPlan_test.rb new/autoyast2-3.1.147/test/AutoinstPartPlan_test.rb --- old/autoyast2-3.1.140/test/AutoinstPartPlan_test.rb 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/test/AutoinstPartPlan_test.rb 2016-08-17 10:56:40.000000000 +0200 @@ -9,6 +9,7 @@ describe Yast::AutoinstPartPlan do FIXTURES_PATH = File.join(File.dirname(__FILE__), 'fixtures') let(:target_map_path) { File.join(FIXTURES_PATH, 'storage', "nfs_root.yml") } + let(:target_map_clone) { File.join(FIXTURES_PATH, 'storage', "target_clone.yml") } describe "#read partition target" do @@ -28,6 +29,22 @@ ) end + it "ignoring not needed devices" do + target_map = YAML.load_file(target_map_clone) + + expect(Yast::Storage).to receive(:GetTargetMap).and_return(target_map) + expect(Yast::AutoinstPartPlan.Read).to eq(true) + export = Yast::AutoinstPartPlan.Export.select { |d| d.key?("skip_list") } + expect(export).to eq( + [ { "initialize"=>true, + "skip_list"=> + [{"skip_key"=>"device", "skip_value"=>"/dev/sdb"}, + {"skip_key"=>"device", "skip_value"=>"/dev/sde"}] + } + ] + ) + end + end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/test/Makefile.am new/autoyast2-3.1.147/test/Makefile.am --- old/autoyast2-3.1.140/test/Makefile.am 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/test/Makefile.am 2016-08-17 10:56:40.000000000 +0200 @@ -6,6 +6,7 @@ AutoInstallRules_test.rb \ AutoInstall_test.rb \ AutoinstClass_test.rb \ + AutoinstConfig_tests.rb \ AutoinstFunctions_test.rb \ AutoinstGeneral_test.rb \ AutoinstSoftware_test.rb \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/test/fixtures/storage/target_clone.yml new/autoyast2-3.1.147/test/fixtures/storage/target_clone.yml --- old/autoyast2-3.1.140/test/fixtures/storage/target_clone.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/autoyast2-3.1.147/test/fixtures/storage/target_clone.yml 2016-08-17 10:56:40.000000000 +0200 @@ -0,0 +1,673 @@ +--- +"/dev/sda": + bus: "SCSI" + cyl_count: 138903 + cyl_size: 8225280 + dasd_format: 0 + dasd_type: 0 + device: "/dev/sda" + driver: "ipr" + driver_module: "ipr" + label: "gpt" + max_logical: 0 + max_primary: 128 + model: "IPR-0 5D80CA00" + name: "sda" + partitions: + - detected_fs: :unknown + device: "/dev/sda1" + fsid: 264 + fstype: "GPT PReP" + name: "sda1" + nr: 1 + region: [0, 2] + size_k: 7168 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA0000000080-part1"] + udev_path: "pci-0001:04:00.0-scsi-0:2:0:0-part1" + used_by_device: "" + used_by_type: :UB_NONE" + - detected_fs: :swap + device: "/dev/sda3" + fsid: 130 + fstopt: "defaults" + fstype: "Linux swap" + mount: "swap" + mountby: :uuid + name: "sda3" + nr: 3 + region: [133284, 5619] + size_k: 45134848 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA0000000080-part3"] + udev_path: "pci-0001:04:00.0-scsi-0:2:0:0-part3" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :swap + uuid: "42e87c44-addf-4863-8121-396bcd34b413" + sector_size: 512 + size_k: 1115742208 + transport: :unknown + type: :CT_DISK + udev_id: + - "scsi-1IBM_IPR-0_5D80CA0000000080" + udev_path: "pci-0001:04:00.0-scsi-0:2:0:0" + unique: "R7kM.1O_LPY9+5AC" + used_by_device: "" + used_by_type: :UB_NONE + vendor: "IBM" +"/dev/sdb": + bus: "SCSI" + cyl_count: 138903 + cyl_size: 8225280 + dasd_format: 0 + dasd_type: 0 + device: "/dev/sdb" + driver: "ipr" + driver_module: "ipr" + label: "gpt" + max_logical: 0 + max_primary: 128 + model: "IPR-0 5D80CA00" + name: "sdb" + partitions: + - detected_fs: :btrfs + device: "/dev/sdb1" + fsid: 131 + fstype: "Linux native" + name: "sdb1" + nr: 1 + region: [0, 5223] + size_k: 41945088 + subvol: + - name: "@/.snapshots" + - name: "@/.snapshots/1/snapshot" + - name: "@/opt" + - name: "@/srv" + - name: "@/tmp" + - name: "@/usr/local" + - name: "@/var/cache" + - name: "@/var/crash" + - name: "@/var/lib/libvirt/images" + nocow: true + - name: "@/var/lib/mailman" + - name: "@/var/lib/mariadb" + nocow: true + - name: "@/var/lib/mysql" + nocow: true + - name: "@/var/lib/named" + - name: "@/var/lib/pgsql" + nocow: true + - name: "@/var/log" + - name: "@/var/opt" + - name: "@/var/spool" + - name: "@/var/tmp" + - name: "@/.snapshots/1/snapshot/var/lib/machines" + - name: "@/.snapshots/2/snapshot" + - name: "@/.snapshots/3/snapshot" + - name: "@/.snapshots/4/snapshot" + - name: "@/.snapshots/5/snapshot" + - name: "@/.snapshots/6/snapshot" + - name: "@/.snapshots/7/snapshot" + - name: "@/.snapshots/8/snapshot" + - name: "@/.snapshots/9/snapshot" + - name: "@/.snapshots/10/snapshot" + type: :primary + udev_id: ["scsi-0IBM_IPR-0_5D80CA00_0-part1", "scsi-1IBM_IPR-0_5D80CA0000000060-part1"] + udev_path: "pci-0001:04:00.0-scsi-0:2:1:0-part1" + used_by: + - device: "731e8614-ebc7-4a76-900b-c03045982be3" + type: :UB_BTRFS + used_by_device: "731e8614-ebc7-4a76-900b-c03045982be3" + used_by_type: :UB_BTRFS + used_fs: :btrfs + uuid: "731e8614-ebc7-4a76-900b-c03045982be3" + - detected_fs: :xfs + device: "/dev/sdb2" + fsid: 131 + fstype: "Linux native" + name: "sdb2" + nr: 2 + region: [5222, 133681] + size_k: 1073795072 + type: :primary + udev_id: ["scsi-0IBM_IPR-0_5D80CA00_0-part2", "scsi-1IBM_IPR-0_5D80CA0000000060-part2"] + udev_path: "pci-0001:04:00.0-scsi-0:2:1:0-part2" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :xfs + uuid: "b6dfed78-5afa-4350-b55d-3594e52ee23f" + sector_size: 512 + size_k: 1115742208 + transport: :unknown + type: :CT_DISK + udev_id: ["scsi-0IBM_IPR-0_5D80CA00_0", "scsi-1IBM_IPR-0_5D80CA0000000060"] + udev_path: "pci-0001:04:00.0-scsi-0:2:1:0" + unique: "uI_Q.1O_LPY9+5AC" + used_by_device: "" + used_by_type: :UB_NONE + vendor: "IBM" +"/dev/sdc": + bus: "SCSI" + cyl_count: 138903 + cyl_size: 8225280 + dasd_format: 0 + dasd_type: 0 + device: "/dev/sdc" + driver: "ipr" + driver_module: "ipr" + label: "gpt" + max_logical: 0 + max_primary: 128 + model: "IPR-0 5D80CA00" + name: "sdc" + partitions: + - detected_fs: :unknown + device: "/dev/sdc1" + fsid: 264 + fstype: "GPT PReP" + name: "sdc1" + nr: 1 + region: [0, 2] + size_k: 7168 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000C0-part1"] + udev_path: "pci-0001:04:00.0-scsi-0:2:2:0-part1" + used_by_device: "" + used_by_type: :UB_NONE + - detected_fs: :ext4 + device: "/dev/sdc2" + fsid: 131 + fstype: "Linux native" + name: "sdc2" + nr: 2 + region: [1, 133283] + size_k: 1070595072 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000C0-part2"] + udev_path: "pci-0001:04:00.0-scsi-0:2:2:0-part2" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :ext4 + uuid: "0a0b9581-caad-47e7-beb6-cc99b36d2ec9" + - detected_fs: :swap + device: "/dev/sdc3" + fsid: 130 + fstopt: "defaults" + fstype: "Linux swap" + mount: "swap" + mountby: :uuid + name: "sdc3" + nr: 3 + region: [133283, 5620] + size_k: 45137920 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000C0-part3"] + udev_path: "pci-0001:04:00.0-scsi-0:2:2:0-part3" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :swap + uuid: "3c8acc18-7459-4a1f-9ecb-88bd1e1c9b55" + sector_size: 512 + size_k: 1115742208 + transport: :unknown + type: :CT_DISK + udev_id: + - "scsi-1IBM_IPR-0_5D80CA00000000C0" + udev_path: "pci-0001:04:00.0-scsi-0:2:2:0" + unique: "LUEV.1O_LPY9+5AC" + used_by_device: "" + used_by_type: :UB_NONE + vendor: "IBM" +"/dev/sdd": + bus: "SCSI" + cyl_count: 138903 + cyl_size: 8225280 + dasd_format: 0 + dasd_type: 0 + device: "/dev/sdd" + driver: "ipr" + driver_module: "ipr" + label: "msdos" + max_logical: 255 + max_primary: 4 + model: "IPR-0 5D80CA00" + name: "sdd" + partitions: + - detected_fs: :ext4 + device: "/dev/sdd1" + fsid: 131 + fstype: "Linux native" + name: "sdd1" + nr: 1 + region: [0, 51] + size_k: 408576 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000E0-part1"] + udev_path: "pci-0001:04:00.0-scsi-0:2:3:0-part1" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :ext4 + uuid: "8fd2039f-eabb-4656-8463-d04db2ae89a3" + - detected_fs: :unknown + device: "/dev/sdd2" + fsid: 131 + fstype: "Linux native" + name: "sdd2" + nr: 2 + region: [50, 3] + size_k: 8192 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000E0-part2"] + udev_path: "pci-0001:04:00.0-scsi-0:2:3:0-part2" + used_by_device: "" + used_by_type: :UB_NONE] + - detected_fs: :swap + device: "/dev/sdd3" + fsid: 130 + fstopt: "defaults" + fstype: "Linux swap" + mount: "swap" + mountby: :uuid + name: "sdd3" + nr: 3 + region: [52, 1306] + size_k: 10482688 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000E0-part3"] + udev_path: "pci-0001:04:00.0-scsi-0:2:3:0-part3" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :swap + uuid: "e330b520-3e8e-4575-85e1-dfb443c3ea45" + - detected_fs: :btrfs + device: "/dev/sdd4" + fsid: 131 + fstype: "Linux native" + name: "sdd4" + nr: 4 + region: [1357, 104432] + size_k: 838849536 + subvol: + - name: "@/.snapshots" + - name: "@/.snapshots/1/snapshot" + - name: "@/home" + - name: "@/opt" + - name: "@/srv" + - name: "@/tmp" + - name: "@/usr/local" + - name: "@/var/cache" + - name: "@/var/crash" + - name: "@/var/lib/libvirt/images" + - name: "@/var/lib/mailman" + - name: "@/var/lib/mariadb" + - name: "@/var/lib/mysql" + - name: "@/var/lib/named" + - name: "@/var/lib/pgsql" + - name: "@/var/log" + - name: "@/var/opt" + - name: "@/var/spool" + - name: "@/var/tmp" + type: :primary, + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000E0-part4"] + udev_path: "pci-0001:04:00.0-scsi-0:2:3:0-part4" + used_by: + - device: "9c1dba5d-a64e-44a6-a72f-e766482a3c62" + type: :UB_BTRFS + used_by_device: "9c1dba5d-a64e-44a6-a72f-e766482a3c62" + used_by_type: :UB_BTRFS + used_fs: :btrfs + uuid: "9c1dba5d-a64e-44a6-a72f-e766482a3c62" + sector_size: 512 + size_k: 1115742208 + transport: unknown + type: :CT_DISK + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000E0"] + udev_path: "pci-0001:04:00.0-scsi-0:2:3:0" + unique: "ofUZ.1O_LPY9+5AC" + used_by_device: "" + used_by_type: :UB_NONE + vendor: "IBM" +"/dev/sde": + bus: "SCSI" + cyl_count: 138903 + cyl_size: 8225280 + dasd_format: 0 + dasd_type: 0 + device: "/dev/sde" + driver: "ipr" + driver_module: "ipr" + label: "gpt" + max_logical: 0 + max_primary: 128 + model: "IPR-0 5D80CA00" + name: "sde" + partitions: + - detected_fs: :btrfs + device: "/dev/sde1" + fsid: 131 + fstype: "Linux native" + name: "sde1" + nr: 1 + region: [0, 5223] + size_k: 41945088 + subvol: + - name: "@/.snapshots" + - name: "@/.snapshots/1/snapshot" + - name: "@/opt" + - name: "@/srv" + - name: "@/tmp" + - name: "@/usr/local" + - name: "@/var/cache" + - name: "@/var/crash" + - name: "@/var/lib/libvirt/images" + nocow: true + - name: "@/var/lib/mailman" + - name: "@/var/lib/mariadb" + nocow: true + - name: "@/var/lib/mysql" + nocow: true + - name: "@/var/lib/named" + - name: "@/var/lib/pgsql" + nocow: true + - name: "@/var/log" + - name: "@/var/opt" + - name: "@/var/spool" + - name: "@/var/tmp" + - name: "@/.snapshots/1/snapshot/var/lib/machines" + - name: "@/.snapshots/2/snapshot" + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA0000000100-part1"] + udev_path: "pci-0001:04:00.0-scsi-0:2:4:0-part1" + used_by: + - device: "13c14102-fa63-4a44-8932-76e1d5e62261" + type: :UB_BTRFS + used_by_device: "13c14102-fa63-4a44-8932-76e1d5e62261" + used_by_type: :UB_BTRFS + used_fs: :btrfs + uuid: "13c14102-fa63-4a44-8932-76e1d5e62261" + - detected_fs: :xfs + device: "/dev/sde2" + fsid: 131 + fstype: "Linux native" + name: "sde2" + nr: 2 + region: [5222, 133681] + size_k: 1073795072 + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA0000000100-part2"] + udev_path: "pci-0001:04:00.0-scsi-0:2:4:0-part2" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :xfs + uuid: "25515534-39d8-485e-a46e-12b2b909dca6" + sector_size: 512 + size_k: 1115742208 + transport: unknown + type: :CT_DISK + udev_id: ["scsi-0IBM_IPR-0_5D80CA00_0", "scsi-1IBM_IPR-0_5D80CA0000000100"] + udev_path: "pci-0001:04:00.0-scsi-0:2:4:0" + unique: "Frkd.1O_LPY9+5AC" + used_by_device: "" + used_by_type: :UB_NONE + vendor: "IBM" +"/dev/sdf": + bus: "SCSI" + cyl_count: 138903 + cyl_size: 8225280 + dasd_format: 0 + dasd_type: 0 + device: "/dev/sdf" + driver: "ipr" + driver_module: "ipr" + label: "msdos" + max_logical: 255 + max_primary: 4 + model: "IPR-0 5D80CA00" + name: "sdf" + partitions: + - detected_fs: :btrfs + device: "/dev/sdf1" + fsid: 131 + fstopt: "defaults" + fstype: "Linux native" + mount: "/home" + mountby: :uuid + name: "sdf1" + nr: 1 + region: [0, 5223] + size_k: 41945088 + subvol: + - name: "@/.snapshots" + - name: "@/.snapshots/1/snapshot" + - name: "@/opt" + - name: "@/srv" + - name: "@/tmp" + - name: "@/usr/local" + - name: "@/var/cache" + - name: "@/var/crash" + - name: "@/var/lib/libvirt/images" + nocow: true + - name: "@/var/lib/mailman" + - name: "@/var/lib/mariadb" + nocow: true + - name: "@/var/lib/mysql" + nocow: true + - name: "@/var/lib/named" + - name: "@/var/lib/pgsql" + nocow: true + - name: "@/var/log" + - name: "@/var/opt" + - name: "@/var/spool" + - name: "@/var/tmp" + - name: "@/.snapshots/1/snapshot/var/lib/machines" + - name: "@/.snapshots/2/snapshot" + - name: "@/.snapshots/5/snapshot" + - name: "@/.snapshots/6/snapshot" + - name: "@/.snapshots/7/snapshot" + - name: "@/.snapshots/8/snapshot" + - name: "@/.snapshots/9/snapshot" + - name: "@/.snapshots/10/snapshot" + - name: "@/.snapshots/11/snapshot" + - name: "@/.snapshots/12/snapshot" + - name: "@/.snapshots/13/snapshot" + - name: "@/.snapshots/14/snapshot" + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000A0-part1"] + udev_path: "pci-0001:04:00.0-scsi-0:2:5:0-part1" + used_by: + - device: "4025ea3c-4d81-41ee-9a97-58dade6f6b53" + type: :UB_BTRFS + used_by_device: "4025ea3c-4d81-41ee-9a97-58dade6f6b53" + used_by_type: :UB_BTRFS + used_fs: :btrfs + uuid: "4025ea3c-4d81-41ee-9a97-58dade6f6b53" + - detected_fs: :btrfs + device: "/dev/sdf2" + fsid: 131 + fstopt: "defaults" + fstype: "Linux native" + mount: "/" + mountby: :uuid + name: "sdf2" + nr: 2 + region: [5222, 133681] + size_k: 1073796096 + subvol: + - name: "@/.snapshots" + - name: "@/.snapshots/1/snapshot" + - name: "@/opt" + - name: "@/srv" + - name: "@/tmp" + - name: "@/usr/local" + - name: "@/var/cache" + - name: "@/var/crash" + - name: "@/var/lib/libvirt/images" + nocow: true + - name: "@/var/lib/mailman" + - name: "@/var/lib/mariadb" + nocow: true + - name: "@/var/lib/mysql" + nocow: true + - name: "@/var/lib/named" + - name: "@/var/lib/pgsql" + nocow: true + - name: "@/var/log" + - name: "@/var/opt" + - name: "@/var/spool" + - name: "@/var/tmp" + - name: "@/.snapshots/1/snapshot/var/lib/machines" + - name: "@/.snapshots/2/snapshot" + - name: "@/.snapshots/3/snapshot" + type: :primary + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000A0-part2"] + udev_path: "pci-0001:04:00.0-scsi-0:2:5:0-part2" + used_by: + - device: "04bdb08c-59a0-4ba4-901f-36422bede9fd" + type: :UB_BTRFS + used_by_device: "04bdb08c-59a0-4ba4-901f-36422bede9fd" + used_by_type: :UB_BTRFS + used_fs: :btrfs + uuid: "04bdb08c-59a0-4ba4-901f-36422bede9fd" + sector_size: 512 + size_k: 1115742208 + transport: unknown + type: :CT_DISK + udev_id: ["scsi-1IBM_IPR-0_5D80CA00000000A0"] + udev_path: "pci-0001:04:00.0-scsi-0:2:5:0" + unique: "i0+h.1O_LPY9+5AC" + used_by_device: "" + used_by_type: :UB_NONE + vendor: "IBM" +"/dev/sdg": + bus: "SCSI" + cyl_count: 36472 + cyl_size: 8225280 + dasd_format: 0 + dasd_type: 0 + device: "/dev/sdg" + driver: "ipr" + driver_module: "ipr" + label: "gpt" + max_logical: 0 + max_primary: 128 + model: "MK3001GRRB" + name: "sdg" + partitions: + - detected_fs: :btrfs + device: "/dev/sdg1" + fsid: 264 + fstype: "GPT PReP" + name: "sdg1" + nr: 1 + region: [0, 2] + size_k: 7168 + type: :primary + udev_id: ["scsi-350000394982064f8-part1", "scsi-SIBM_MK3001GRRB_23I0A16NFQ92-part1", "wwn-0x50000394982064f8-part1"] + udev_path: "pci-0001:04:00.0-scsi-0:0:9:0-part1" + used_by: + - device: "98907e29-a2f0-4736-9ca3-b46db8e4525b" + type: :UB_BTRFS + used_by_device: "98907e29-a2f0-4736-9ca3-b46db8e4525b" + used_by_type: :UB_BTRFS + used_fs: :btrfs + uuid: "98907e29-a2f0-4736-9ca3-b46db8e4525b" + - detected_fs: :swap + device: "/dev/sdg2" + fsid: 130 + fstopt: "defaults" + fstype: "Linux swap" + mount: "swap" + mountby: :uuid + name: "sdg2" + nr: 2 + region: [1, 1216] + size_k: 9765888 + type: :primary + udev_id: ["scsi-350000394982064f8-part2", "scsi-SIBM_MK3001GRRB_23I0A16NFQ92-part2", "wwn-0x50000394982064f8-part2"] + udev_path: "pci-0001:04:00.0-scsi-0:0:9:0-part2" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :swap + uuid: "12620e4f-b174-4298-a2a7-843f44e0e301" + - detected_fs: :ext4 + device: "/dev/sdg3" + fsid: 131 + fstype: "Linux native" + name: "sdg3" + nr: 3 + region: [1216, 35256] + size_k: 283194368 + type: :primary + udev_id: ["scsi-350000394982064f8-part3", "scsi-SIBM_MK3001GRRB_23I0A16NFQ92-part3", "wwn-0x50000394982064f8-part3"] + udev_path: "pci-0001:04:00.0-scsi-0:0:9:0-part3" + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :ext4 + uuid: "5c21931a-7d58-49c2-ade4-4b79c87a8010" + readonly: true + sector_size: 512 + size_k: 292968750 + transport: unknown + type: :CT_DISK + udev_id: ["scsi-350000394982064f8", "scsi-SIBM_MK3001GRRB_23I0A16NFQ92", "wwn-0x50000394982064f8"] + udev_path: "pci-0001:04:00.0-scsi-0:0:9:0" + unique: "ACFm.U8llM2w_YdB" + used_by_device: "" + used_by_type: :UB_NONE + vendor: "IBM" +"/dev/tmpfs": + device: "/dev/tmpfs" + name: "tmpfs" + partitions: + - detected_fs: :tmpfs + device: "tmpfs" + fstype: "TMPFS" + ignore_fstab: true + mount: "/dev/shm" + mountby: :uuid + name: "none" + size_k: 16514816 + type: :tmpfs + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :tmpfs + - detected_fs: :tmpfs + device: "tmpfs" + fstype: "TMPFS" + ignore_fstab: true + mount: "/run" + mountby: :uuid + name: "none" + size_k: 16514816 + type: ::tmpfs + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :tmpfs + - detected_fs: :tmpfs + device: "tmpfs" + fstype: "TMPFS" + ignore_fstab: true + mount: "/sys/fs/cgroup" + mountby: :uuid + name: "none" + size_k: 16514816 + type: :tmpfs + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :tmpfs + - detected_fs: :tmpfs + device: "tmpfs" + fstype: "TMPFS" + ignore_fstab: true + mount: "/run/user/0" + mountby: :uuid + name: "none" + size_k: 3302976 + type: :tmpfs + used_by_device: "" + used_by_type: :UB_NONE + used_fs: :tmpfs + type: :CT_TMPFS + used_by_device: "" + used_by_type: :UB_NONE \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/autoyast2-3.1.140/test/include/ask_test.rb new/autoyast2-3.1.147/test/include/ask_test.rb --- old/autoyast2-3.1.140/test/include/ask_test.rb 2016-07-15 14:03:26.000000000 +0200 +++ new/autoyast2-3.1.147/test/include/ask_test.rb 2016-08-17 10:56:40.000000000 +0200 @@ -54,13 +54,47 @@ it "creates a TextEntry widget" do expect(Yast::UI).to receive(:OpenDialog) - expect(client).to receive(:TextEntry). - with(Id("0_0"), Opt(:notify), ask["question"], ask["default"]). + expect(client).to receive(:InputField). + with(Id("0_0"), Opt(:hstretch, :notify, :notifyContextMenu), ask["question"], ask["default"]). and_call_original client.askDialog end end + context "when the ask-list contains a question with timeout=0" do + let(:ask) { BASE_ASK.merge("timeout" => 0) } + + it "waits for user input infinitely" do + expect(Yast::UI).to receive(:OpenDialog) + expect(Yast::UI).to receive(:UserInput) + client.askDialog + end + end + + context "when the ask-list contains a question with timeout>0" do + timeout_in_sec = 10 + let(:ask) { BASE_ASK.merge("timeout" => timeout_in_sec) } + + context "when user does not do anything" do + it "waits for user input with timeout and then time-outs" do + expect(Yast::UI).to receive(:OpenDialog) + expect(Yast::UI).to receive(:TimeoutUserInput).exactly(timeout_in_sec).times.and_return :timeout + client.askDialog + end + end + + context "when user stops the execution manually" do + it "waits for user input with timeout and then stops and waits for user infinitely" do + expect(Yast::UI).to receive(:OpenDialog) + # user does some change in the third second + expect(Yast::UI).to receive(:TimeoutUserInput).exactly(3).times.and_return(:timeout, :timeout, :user_action) + # execution stops and wait for user to finish + expect(Yast::UI).to receive(:UserInput) + client.askDialog + end + end + end + context "when ask-list contains a question with type 'selection'" do let(:ask) { BASE_ASK.merge("selection" => items, "default" => "desktop") } let(:items) { @@ -86,10 +120,10 @@ it "creates two Password widgets" do expect(Yast::UI).to receive(:OpenDialog) expect(client).to receive(:Password). - with(Id("0_0"), Opt(:notify), ask["question"], ask["default"]). + with(Id("0_0"), Opt(:notify, :notifyContextMenu), ask["question"], ask["default"]). and_call_original expect(client).to receive(:Password). - with(Id("0_0_pass2"), Opt(:notify), "", ask["default"]). + with(Id("0_0_pass2"), Opt(:notify, :notifyContextMenu), "", ask["default"]). and_call_original client.askDialog end @@ -122,7 +156,7 @@ Item(Id(:server), "Server", false) ] expect(client).to receive(:ComboBox). - with(Id("0_0"), Opt(:notify), ask["question"], expected_options). + with(Id("0_0"), Opt(:notify, :immediate), ask["question"], expected_options). and_call_original client.askDialog end @@ -151,8 +185,8 @@ it "creates one widget for each one of them" do expect(Yast::UI).to receive(:OpenDialog) - expect(client).to receive(:TextEntry). - with(Id("0_0"), Opt(:notify), string_ask["question"], string_ask["default"]). + expect(client).to receive(:InputField). + with(Id("0_0"), Opt(:hstretch, :notify, :notifyContextMenu), string_ask["question"], string_ask["default"]). and_call_original expect(client).to receive(:CheckBox). with(Id("0_1"), Opt(:notify), boolean_ask["question"], true).
