Hello community,

here is the log from the commit of package yast2-installation for 
openSUSE:Factory checked in at 2014-03-01 14:38: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    
2014-02-23 07:16:22.000000000 +0100
+++ 
/work/SRC/openSUSE:Factory/.yast2-installation.new/yast2-installation.changes   
    2014-03-01 14:38:24.000000000 +0100
@@ -1,0 +2,46 @@
+Thu Feb 27 15:08:12 CET 2014 - [email protected]
+
+- reset proposal after rescanning storage (bnc#865579)
+- 3.1.47
+
+-------------------------------------------------------------------
+Thu Feb 27 13:55:16 UTC 2014 - [email protected]
+
+- revert back complete skip of probing due to disks with activation
+  (BNC#865579)
+- 3.1.46
+
+-------------------------------------------------------------------
+Thu Feb 27 12:54:37 UTC 2014 - [email protected]
+
+- Do not rerun system probing as it is already done (BNC#865579)
+- 3.1.45
+
+-------------------------------------------------------------------
+Wed Feb 26 09:15:50 UTC 2014 - [email protected]
+
+- implement cio ignore feature during installation for s390x
+  (FATE#315586)
+- 3.1.44
+
+-------------------------------------------------------------------
+Tue Feb 25 16:11:08 CET 2014 - [email protected]
+
+- Removed an icon from License Agreement dialog (bnc#865575)
+- 3.1.43
+
+-------------------------------------------------------------------
+Tue Feb 25 14:14:59 CET 2014 - [email protected]
+
+- Adapted ignored_features to handle possibly missing Cmdline entry
+  from Linuxrc (bnc#861465)
+- 3.1.42
+
+-------------------------------------------------------------------
+Tue Feb 25 13:27:34 CET 2014 - [email protected]
+
+- Removed hard-coded color and RichText formatting from
+  installation confirmation dialog (#bnc#865371)
+- 3.1.41
+
+-------------------------------------------------------------------

Old:
----
  yast2-installation-3.1.40.tar.bz2

New:
----
  yast2-installation-3.1.47.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yast2-installation.spec ++++++
--- /var/tmp/diff_new_pack.HnZUEp/_old  2014-03-01 14:38:25.000000000 +0100
+++ /var/tmp/diff_new_pack.HnZUEp/_new  2014-03-01 14:38:25.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-installation
-Version:        3.1.40
+Version:        3.1.47
 Release:        0
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ yast2-installation-3.1.40.tar.bz2 -> yast2-installation-3.1.47.tar.bz2 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/package/yast2-installation.changes 
new/yast2-installation-3.1.47/package/yast2-installation.changes
--- old/yast2-installation-3.1.40/package/yast2-installation.changes    
2014-02-21 15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/package/yast2-installation.changes    
2014-02-27 16:14:09.000000000 +0100
@@ -1,4 +1,50 @@
 -------------------------------------------------------------------
+Thu Feb 27 15:08:12 CET 2014 - [email protected]
+
+- reset proposal after rescanning storage (bnc#865579)
+- 3.1.47
+
+-------------------------------------------------------------------
+Thu Feb 27 13:55:16 UTC 2014 - [email protected]
+
+- revert back complete skip of probing due to disks with activation
+  (BNC#865579)
+- 3.1.46
+
+-------------------------------------------------------------------
+Thu Feb 27 12:54:37 UTC 2014 - [email protected]
+
+- Do not rerun system probing as it is already done (BNC#865579)
+- 3.1.45
+
+-------------------------------------------------------------------
+Wed Feb 26 09:15:50 UTC 2014 - [email protected]
+
+- implement cio ignore feature during installation for s390x
+  (FATE#315586)
+- 3.1.44
+
+-------------------------------------------------------------------
+Tue Feb 25 16:11:08 CET 2014 - [email protected]
+
+- Removed an icon from License Agreement dialog (bnc#865575)
+- 3.1.43
+
+-------------------------------------------------------------------
+Tue Feb 25 14:14:59 CET 2014 - [email protected]
+
+- Adapted ignored_features to handle possibly missing Cmdline entry
+  from Linuxrc (bnc#861465)
+- 3.1.42
+
+-------------------------------------------------------------------
+Tue Feb 25 13:27:34 CET 2014 - [email protected]
+
+- Removed hard-coded color and RichText formatting from
+  installation confirmation dialog (#bnc#865371)
+- 3.1.41
+
+-------------------------------------------------------------------
 Fri Feb 21 14:54:01 CET 2014 - [email protected]
 
 - Make vnc use real yast theme (bnc #855246) and make vnc screen size 
configurable.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/package/yast2-installation.spec 
new/yast2-installation-3.1.47/package/yast2-installation.spec
--- old/yast2-installation-3.1.40/package/yast2-installation.spec       
2014-02-21 15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/package/yast2-installation.spec       
2014-02-27 16:14:09.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-installation
-Version:        3.1.40
+Version:        3.1.47
 Release:        0
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-3.1.40/src/Makefile.am 
new/yast2-installation-3.1.47/src/Makefile.am
--- old/yast2-installation-3.1.40/src/Makefile.am       2014-02-21 
15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/src/Makefile.am       2014-02-27 
16:14:09.000000000 +0100
@@ -8,6 +8,8 @@
   modules/SystemFilesCopy.rb
 
 client_DATA = \
+  clients/cio_ignore_finish.rb \
+  clients/cio_ignore_proposal.rb \
   clients/clone_proposal.rb \
   clients/clone_finish.rb \
   clients/copy_files_finish.rb \
@@ -103,7 +105,8 @@
 ylibdir = "${yast2dir}/lib/installation"
 ylib_DATA = \
   lib/installation/clone_settings.rb \
-  lib/installation/minimal_installation.rb
+  lib/installation/minimal_installation.rb \
+  lib/installation/cio_ignore.rb
 
 
 EXTRA_DIST = $(module_DATA) $(client_DATA) $(ynclude_DATA) $(scrconf_DATA) 
$(schemafiles_DATA) $(desktop_DATA) $(fillup_DATA) $(ylib_DATA)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/src/clients/cio_ignore_finish.rb 
new/yast2-installation-3.1.47/src/clients/cio_ignore_finish.rb
--- old/yast2-installation-3.1.40/src/clients/cio_ignore_finish.rb      
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-3.1.47/src/clients/cio_ignore_finish.rb      
2014-02-27 16:14:09.000000000 +0100
@@ -0,0 +1,3 @@
+require "installation/cio_ignore"
+
+::Installation::CIOIgnoreFinish.new.run(*Yast::WFM.Args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/src/clients/cio_ignore_proposal.rb 
new/yast2-installation-3.1.47/src/clients/cio_ignore_proposal.rb
--- old/yast2-installation-3.1.40/src/clients/cio_ignore_proposal.rb    
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-3.1.47/src/clients/cio_ignore_proposal.rb    
2014-02-27 16:14:09.000000000 +0100
@@ -0,0 +1,3 @@
+require "installation/cio_ignore"
+
+::Installation::CIOIgnoreProposal.new.run(*Yast::WFM.Args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/src/clients/inst_complex_welcome.rb 
new/yast2-installation-3.1.47/src/clients/inst_complex_welcome.rb
--- old/yast2-installation-3.1.40/src/clients/inst_complex_welcome.rb   
2014-02-21 15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/src/clients/inst_complex_welcome.rb   
2014-02-27 16:14:09.000000000 +0100
@@ -308,11 +308,8 @@
         VSpacing(@text_mode ? 21 : 25),
         VBox(
           Left(
-            HBox(
-              Icon.Simple("yast-license"),
-              # TRANSLATORS: dialog caption
-              Heading(_("License Agreement"))
-            )
+            # TRANSLATORS: dialog caption
+            Heading(_("License Agreement"))
           ),
           VSpacing(@text_mode ? 0.1 : 0.5),
           HSpacing(82),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-3.1.40/src/clients/inst_finish.rb 
new/yast2-installation-3.1.47/src/clients/inst_finish.rb
--- old/yast2-installation-3.1.40/src/clients/inst_finish.rb    2014-02-21 
15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/src/clients/inst_finish.rb    2014-02-27 
16:14:09.000000000 +0100
@@ -150,6 +150,7 @@
             "storage",
             "iscsi-client",
             "kernel",
+            "cio_ignore",
             "x11",
             "proxy",
             "pkg",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/src/clients/inst_system_analysis.rb 
new/yast2-installation-3.1.47/src/clients/inst_system_analysis.rb
--- old/yast2-installation-3.1.40/src/clients/inst_system_analysis.rb   
2014-02-21 15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/src/clients/inst_system_analysis.rb   
2014-02-27 16:14:09.000000000 +0100
@@ -77,8 +77,6 @@
 
       @packager_initialized = false
 
-      # <-- Function definitions
-
       Wizard.SetContents(_("Analyzing the Computer"), Empty(), "", false, 
false)
       Wizard.SetTitleIcon("yast-controller")
 
@@ -88,171 +86,73 @@
       # constructors might depend on it.
       # In autoinst mode, this has been called already.
 
-      @actions_todo = []
-      @actions_doing = []
-      @actions_functions = []
+      actions_todo = []
+      actions_doing = []
+      actions_functions = []
 
       Builtins.y2milestone("Probing done: %1", Installation.probing_done)
+      # skip part of probes as it doesn't change, but some parts (mostly disks
+      # that can be activated) need rerun see BNC#865579
       if !Installation.probing_done
+        # TRANSLATORS: progress steps in system probing
         if !(Arch.s390 || Arch.board_iseries)
-          # TRANSLATORS: progress step
-          @actions_todo = Builtins.add(@actions_todo, _("Probe USB devices"))
-          # TRANSLATORS: progress step
-          @actions_doing = Builtins.add(
-            @actions_doing,
-            _("Probing USB devices...")
-          )
-          @actions_functions = Builtins.add(
-            @actions_functions,
-            fun_ref(method(:ActionUSB), "boolean ()")
-          )
-
-          # TRANSLATORS: progress step
-          @actions_todo = Builtins.add(
-            @actions_todo,
-            _("Probe FireWire devices")
-          )
-          # TRANSLATORS: progress step
-          @actions_doing = Builtins.add(
-            @actions_doing,
-            _("Probing FireWire devices...")
-          )
-          @actions_functions = Builtins.add(
-            @actions_functions,
-            fun_ref(method(:ActionFireWire), "boolean ()")
-          )
-
-          # TRANSLATORS: progress step
-          @actions_todo = Builtins.add(
-            @actions_todo,
-            _("Probe floppy disk devices")
-          )
-          # TRANSLATORS: progress step
-          @actions_doing = Builtins.add(
-            @actions_doing,
-            _("Probing floppy disk devices...")
-          )
-          @actions_functions = Builtins.add(
-            @actions_functions,
-            fun_ref(method(:ActionFloppyDisks), "boolean ()")
-          )
+          actions_todo      << _("Probe USB devices")
+          actions_doing     << _("Probing USB devices...")
+          actions_functions << fun_ref(method(:ActionUSB), "boolean ()")
+
+          actions_todo      << _("Probe FireWire devices")
+          actions_doing     << _("Probing FireWire devices...")
+          actions_functions << fun_ref(method(:ActionFireWire), "boolean ()")
+
+          actions_todo      << _("Probe floppy disk devices")
+          actions_doing     << _("Probing floppy disk devices...")
+          actions_functions << fun_ref(method(:ActionFloppyDisks), "boolean 
()")
         end
 
-        # TRANSLATORS: progress step
-        @actions_todo = Builtins.add(
-          @actions_todo,
-          _("Probe hard disk controllers")
-        )
-        # TRANSLATORS: progress step
-        @actions_doing = Builtins.add(
-          @actions_doing,
-          _("Probing hard disk controllers...")
-        )
-        @actions_functions = Builtins.add(
-          @actions_functions,
-          fun_ref(method(:ActionHHDControllers), "boolean ()")
-        )
-
-        # TRANSLATORS: progress step
-        @actions_todo = Builtins.add(
-          @actions_todo,
-          _("Load kernel modules for hard disk controllers")
-        )
-        # TRANSLATORS: progress step
-        @actions_doing = Builtins.add(
-          @actions_doing,
-          _("Loading kernel modules for hard disk controllers...")
-        )
-        @actions_functions = Builtins.add(
-          @actions_functions,
-          fun_ref(method(:ActionLoadModules), "boolean ()")
-        )
-
-        # TRANSLATORS: progress step
-        @actions_todo = Builtins.add(@actions_todo, _("Probe hard disks"))
-        # TRANSLATORS: progress step
-        @actions_doing = Builtins.add(
-          @actions_doing,
-          _("Probing hard disks...")
-        )
-        @actions_functions = Builtins.add(
-          @actions_functions,
-          fun_ref(method(:ActionHDDProbe), "boolean ()")
-        )
+        actions_todo      << _("Probe hard disk controllers")
+        actions_doing     << _("Probing hard disk controllers...")
+        actions_functions << fun_ref(method(:ActionHHDControllers), "boolean 
()")
+
+        actions_todo      << _("Load kernel modules for hard disk controllers")
+        actions_doing     << _("Loading kernel modules for hard disk 
controllers...")
+        actions_functions << fun_ref(method(:ActionLoadModules), "boolean ()")
+
+        actions_todo      << _("Probe hard disks")
+        actions_doing     << _("Probing hard disks...")
+        actions_functions << fun_ref(method(:ActionHDDProbe), "boolean ()")
 
         WFM.CallFunction("inst_features", [])
       end
 
-      # TRANSLATORS: progress step
-      @actions_todo = Builtins.add(
-        @actions_todo,
-        _("Search for Linux partitions")
-      )
-      # TRANSLATORS: progress step
-      @actions_doing = Builtins.add(
-        @actions_doing,
-        _("Searching for Linux partitions...")
-      )
-      @actions_functions = Builtins.add(
-        @actions_functions,
-        fun_ref(method(:SearchForLinuxPartitions), "boolean ()")
-      )
+      actions_todo      << _("Search for Linux partitions")
+      actions_doing     << _("Searching for Linux partitions...")
+      actions_functions << fun_ref(method(:SearchForLinuxPartitions), "boolean 
()")
 
-      # TRANSLATORS: progress step
-      @actions_todo = Builtins.add(@actions_todo, _("Search for system files"))
-      # TRANSLATORS: progress step
-      @actions_doing = Builtins.add(
-        @actions_doing,
-        _("Searching for system files...")
-      )
       # FATE #302980: Simplified user config during installation
-      @actions_functions = Builtins.add(
-        @actions_functions,
-        fun_ref(method(:FilesFromOlderSystems), "boolean ()")
-      )
-
-      # TRANSLATORS: progress step
-      @actions_todo = Builtins.add(
-        @actions_todo,
-        _("Evaluate update possibility")
-      )
-      # TRANSLATORS: progress step
-      @actions_doing = Builtins.add(
-        @actions_doing,
-        _("Evaluating update possibility...")
-      )
-      @actions_functions = Builtins.add(
-        @actions_functions,
-        fun_ref(method(:EvaluateUpdatePossibilities), "boolean ()")
-      )
-
-      # TRANSLATORS: progress step
-      @actions_todo = Builtins.add(
-        @actions_todo,
-        _("Initialize software manager")
-      )
-      # TRANSLATORS: progress step
-      @actions_doing = Builtins.add(
-        @actions_doing,
-        _("Initializing software manager...")
-      )
-      @actions_functions = Builtins.add(
-        @actions_functions,
-        fun_ref(method(:InitInstallationRepositories), "boolean ()")
-      )
+      actions_todo      << _("Search for system files")
+      actions_doing     << _("Searching for system files...")
+      actions_functions << fun_ref(method(:FilesFromOlderSystems), "boolean 
()")
+
+      actions_todo      << _("Evaluate update possibility")
+      actions_doing     << _("Evaluating update possibility...")
+      actions_functions << fun_ref(method(:EvaluateUpdatePossibilities), 
"boolean ()")
+
+      actions_todo      << _("Initialize software manager")
+      actions_doing     << _("Initializing software manager...")
+      actions_functions << fun_ref(method(:InitInstallationRepositories), 
"boolean ()")
 
       Progress.New(
         # TRANSLATORS: dialog caption
         _("System Probing"),
         " ",
-        Builtins.size(@actions_todo),
-        @actions_todo,
-        @actions_doing,
+        actions_todo.size,
+        actions_todo,
+        actions_doing,
         # TRANSLATORS: dialog help
         _("YaST is probing computer hardware and installed systems now.")
       )
 
-      Builtins.foreach(@actions_functions) do |run_function|
+      actions_functions.each do |run_function|
         Progress.NextStage
         # Bugzilla #298049
         # Allow to abort the probing
@@ -265,13 +165,8 @@
             next :abort
           end
         end
-        Builtins.y2milestone("Running function: %1", run_function)
-        run_this = Convert.convert(
-          run_function,
-          :from => "any",
-          :to   => "boolean ()"
-        )
-        ret = run_this.call
+
+        ret = run_function.call
         Builtins.y2milestone("Function %1 returned %2", run_function, ret)
       end
       Installation.probing_done = true
@@ -280,9 +175,8 @@
       return :abort if ProductProfile.CheckCompliance(nil) == false
 
       Progress.Finish
-      Builtins.sleep(500)
 
-      return :abort if !@packager_initialized
+      return :abort unless @packager_initialized
 
       Builtins.y2milestone(
         "Have Linux: %1, Offer Update: %2",
@@ -290,9 +184,8 @@
         InstData.offer_update
       )
 
-      :next 
+      :next
 
-      # EOF
     end
 
     # Function definitions -->
@@ -425,18 +318,18 @@
       true
     end
 
-    def SearchForLinuxPartitions
-      Storage.ReReadTargetMap
-      if Storage.HaveLinuxPartitions
-        InstData.have_linux = true
-      else
-        InstData.have_linux = false
-      end
 
+    def SearchForLinuxPartitions
+      # ReReadTargetMap is needed to fix bug #806454
+      Storage.ReReadTargetMap()
+      # SetPartProposalFirst is needed to fix bug #865579
+      Storage.SetPartProposalFirst(true)
+      InstData.have_linux = Storage.HaveLinuxPartitions()
       true
     end
 
-    def InitInstallationRepositoriesReal
+
+    def InitInstallationRepositories
       # disable callbacks
       PackageCallbacks.RegisterEmptyProgressCallbacks
 
@@ -469,18 +362,6 @@
 
       ret
     end
-
-    def InitInstallationRepositories
-      #boolean progress_orig = Progress::set (false);
-      #y2milestone ("Pregress was: %1", progress_orig);
-
-      ret = InitInstallationRepositoriesReal()
-
-      #y2milestone ("Adjusting progress: %1", progress_orig);
-      #Progress::set (progress_orig);
-
-      ret
-    end
 
     def FilesFromOlderSystems
       # FATE #300421: Import ssh keys from previous installations
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/src/include/installation/misc.rb 
new/yast2-installation-3.1.47/src/include/installation/misc.rb
--- old/yast2-installation-3.1.40/src/include/installation/misc.rb      
2014-02-21 15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/src/include/installation/misc.rb      
2014-02-27 16:14:09.000000000 +0100
@@ -239,7 +239,7 @@
         confirm_button_label = Label.InstallButton
       else
         # Heading for confirmation popup before the update really starts
-        heading = "<h3>" + _("Confirm Update") + "</h3>"
+        heading = HTML.Heading(_("Confirm Update"))
 
         body =
           # Text for confirmation popup before the update really starts 1/3
@@ -258,18 +258,7 @@
         confirm_button_label = _("Start &Update")
       end
 
-      heading_bg_color = "#A9CEDD"
-
       display_info = UI.GetDisplayInfo
-      text = Ops.get_boolean(display_info, "RichTextSupportsTable", false) ?
-        Builtins.sformat(
-          "<table bgcolor=\"%1\"><tr><td>%2</td></tr></table>%3",
-          heading_bg_color,
-          heading,
-          body
-        ) :
-        Ops.add(heading, body)
-
       size_x = Builtins.tointeger(Ops.get_integer(display_info, "Width", 800))
       size_y = Builtins.tointeger(Ops.get_integer(display_info, "Height", 600))
 
@@ -290,7 +279,7 @@
           HBox(
             HSpacing(0.7),
             VSpacing(size_y), # force height
-            RichText(text),
+            RichText(heading + body),
             HSpacing(0.7)
           ),
           ButtonBox(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/src/lib/installation/cio_ignore.rb 
new/yast2-installation-3.1.47/src/lib/installation/cio_ignore.rb
--- old/yast2-installation-3.1.40/src/lib/installation/cio_ignore.rb    
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-installation-3.1.47/src/lib/installation/cio_ignore.rb    
2014-02-27 16:14:09.000000000 +0100
@@ -0,0 +1,158 @@
+require "yast"
+
+module Installation
+  class CIOIgnore
+    include Singleton
+    attr_accessor :enabled
+
+    def initialize
+      reset
+    end
+
+    def reset
+      #default value requested in FATE#315586
+      @enabled = true
+    end
+  end
+
+  class CIOIgnoreProposal
+    include Yast::Logger
+    include Yast::I18n
+
+    CIO_ENABLE_LINK = "cio_enable"
+    CIO_DISABLE_LINK = "cio_disable"
+    CIO_ACTION_ID = "cio"
+
+    def initialize
+      textdomain "installation"
+    end
+
+    def run(*args)
+      func = args.first
+      param = args[1] || {}
+
+      log.debug "cio ignore proposal client called with #{func} and #{param}"
+
+      case func
+      when "MakeProposal"
+        proposal_entry
+      when "Description"
+        {
+          # this is a heading
+          "rich_text_title" => _("Blacklist Devices"),
+          # this is a menu entry
+          "menu_title"      => _("B&lacklist Devices"),
+          "id"              => CIO_ACTION_ID
+        }
+      when "AskUser"
+        edit param["chosen_id"]
+      else
+        raise "Uknown action passed as first parameter"
+      end
+    end
+
+  private
+
+    def proposal_entry
+      Yast.import "HTML"
+      enabled = CIOIgnore.instance.enabled
+
+      text = if enabled
+        # TRANSLATORS: Installation overview
+        # IMPORTANT: Please, do not change the HTML link <a 
href="...">...</a>, only visible text
+        (_(
+            "Blacklist devices enabled (<a href=\"%s\">disable</a>)."
+          ) % CIO_DISABLE_LINK)
+      else
+        # TRANSLATORS: Installation overview
+        # IMPORTANT: Please, do not change the HTML link <a 
href="...">...</a>, only visible text
+        (_(
+            "Blacklist devices disabled (<a href=\"%1\">enable</a>)."
+          ) % CIO_ENABLE_LINK)
+      end
+
+      {
+        "preformatted_proposal" => Yast::HTML.List([text]),
+        "links"                 => [CIO_ENABLE_LINK, CIO_DISABLE_LINK],
+        # TRANSLATORS: help text
+        "help"                  => _(
+          "<p>Use <b>Blacklist devices</b> if you want to create blacklist 
channels to such devices which will reduce kernel memory footprint.</p>"
+        )
+      }
+    end
+
+    def edit edit_id
+        raise "Internal error: no id passed to proposal edit" unless edit_id
+
+        log.info "CIO proposal change requested, id #{edit_id}"
+
+        cio_ignore = CIOIgnore.instance
+
+        cio_ignore.enabled = case edit_id
+          when CIO_DISABLE_LINK then false
+          when CIO_ENABLE_LINK  then true
+          when CIO_ACTION_ID    then !cio_ignore.enabled
+          else
+            raise "INTERNAL ERROR: Unexpected value #{edit_id}"
+          end
+
+        { "workflow_sequence" => :next }
+    end
+  end
+
+
+  class CIOIgnoreFinish
+    include Yast::Logger
+    include Yast::I18n
+
+    USABLE_WORKFLOWS = [
+      :installation,
+      :live_installation,
+      :autoinst
+    ]
+
+    YAST_BASH_PATH = Yast::Path.new ".target.bash"
+
+
+    def initialize
+      textdomain "installation"
+    end
+
+    def run(*args)
+      func = args.first
+      param = args[1] || {}
+
+      log.debug "cio ignore finish client called with #{func} and #{param}"
+
+      case func
+      when "Info"
+        Yast.import "Arch"
+        usable = Yast::Arch.s390()
+
+        {
+          "steps" => 1,
+          # progress step title
+          "title" => _(
+            "Blacklisting Devices..."
+          ),
+          "when"  => usable ? USABLE_WORKFLOWS : []
+        }
+
+      when "Write"
+        return nil unless CIOIgnore.instance.enabled
+
+        res = Yast::SCR.Execute(YAST_BASH_PATH, "cio_ignore --unused --purge")
+
+        log.info "result of cio_ignore call: #{res.inspect}"
+
+        if res["exit"] != 0
+          raise "cio_ignore command failed with stderr: #{res["stderr"]}"
+        end
+
+        nil
+      else
+        raise "Uknown action passed as first parameter"
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/src/modules/InstFunctions.rb 
new/yast2-installation-3.1.47/src/modules/InstFunctions.rb
--- old/yast2-installation-3.1.40/src/modules/InstFunctions.rb  2014-02-21 
15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/src/modules/InstFunctions.rb  2014-02-27 
16:14:09.000000000 +0100
@@ -60,8 +60,8 @@
         polish(Linuxrc.InstallInf(key))
       end
 
-      # Features mentioned in 'Cmdline' entry
-      cmdline = polish(Linuxrc.InstallInf("Cmdline")).split
+      # Features mentioned in 'Cmdline' entry, it might not be defined 
(bnc#861465)
+      cmdline = polish(Linuxrc.InstallInf("Cmdline") || "").split
       cmdline_features = cmdline.select do |cmd|
         cmd =~ /^ignored?features?=/i
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-3.1.40/test/Makefile.am 
new/yast2-installation-3.1.47/test/Makefile.am
--- old/yast2-installation-3.1.40/test/Makefile.am      2014-02-21 
15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/test/Makefile.am      2014-02-27 
16:14:09.000000000 +0100
@@ -1,5 +1,6 @@
 TESTS = \
-  inst_functions.rb
+  inst_functions_test.rb \
+  cio_ignore_test.rb
 
 TEST_EXTENSIONS = .rb
 RB_LOG_COMPILER = rspec
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-3.1.40/test/cio_ignore_test.rb 
new/yast2-installation-3.1.47/test/cio_ignore_test.rb
--- old/yast2-installation-3.1.40/test/cio_ignore_test.rb       1970-01-01 
01:00:00.000000000 +0100
+++ new/yast2-installation-3.1.47/test/cio_ignore_test.rb       2014-02-27 
16:14:09.000000000 +0100
@@ -0,0 +1,148 @@
+#! /usr/bin/env rspec
+
+require_relative "./test_helper"
+
+require "installation/cio_ignore"
+
+describe ::Installation::CIOIgnoreProposal do
+
+  subject { ::Installation::CIOIgnoreProposal.new }
+
+  before(:each) do
+    ::Installation::CIOIgnore.instance.reset
+  end
+
+  describe "#run" do
+    describe "first parameter \"MakeProposal\"" do
+      it "returns proposal entry hash containing \"links\", \"help\" and 
\"preformatted_proposal\"" do
+        result = subject.run("MakeProposal")
+
+        expect(result).to have_key("links")
+        expect(result).to have_key("help")
+        expect(result).to have_key("preformatted_proposal")
+      end
+    end
+
+    describe "first parameter \"Description\"" do
+      it "returns proposal metadata hash containing \"rich_text_title\", 
\"id\" and \"menu_title\"" do
+        result = subject.run("Description")
+
+        expect(result).to have_key("rich_text_title")
+        expect(result).to have_key("menu_title")
+        expect(result).to have_key("id")
+      end
+    end
+
+    describe "first parameter \"AskUser\"" do
+      it "changes proposal if passed with chosen_id in second param hash" do
+        params = [
+          "AskUser",
+          "chosen_id" => ::Installation::CIOIgnoreProposal::CIO_DISABLE_LINK
+        ]
+        result = subject.run(*params)
+
+        expect(result["workflow_sequence"]).to eq :next
+        expect(::Installation::CIOIgnore.instance.enabled).to be false
+      end
+
+      it "raises RuntimeError if passed without chosen_id in second param 
hash" do
+        expect{subject.run("AskUser")}.to(
+          raise_error(RuntimeError)
+        )
+      end
+
+      it "raises RuntimeError if \"AskUser\" passed with non-existing 
chosen_id in second param hash" do
+        params = [
+          "AskUser",
+          "chosen_id" => "non_existing"
+        ]
+
+        expect{subject.run(*params)}.to raise_error(RuntimeError)
+      end
+    end
+
+    it "raises RuntimeError if unknown action passed as first parameter" do
+      expect{subject.run("non_existing_action")}.to(
+        raise_error(RuntimeError)
+      )
+    end
+  end
+end
+
+describe ::Installation::CIOIgnoreFinish do
+  subject { ::Installation::CIOIgnoreFinish.new }
+
+  describe "#run" do
+    describe "first paramater \"Info\"" do
+      it "returns info entry hash with empty \"when\" key for non s390x 
architectures" do
+        arch_mock = double("Yast::Arch", :s390 => false)
+        stub_const("Yast::Arch", arch_mock)
+
+        result = subject.run("Info")
+
+        expect(result["when"]).to be_empty
+      end
+
+      it "returns info entry hash with scenarios in \"when\" key for s390x 
architectures" do
+        arch_mock = double("Yast::Arch", :s390 => true)
+        stub_const("Yast::Arch", arch_mock)
+
+        result = subject.run("Info")
+
+        expect(result["when"]).to_not be_empty
+      end
+
+    end
+
+    describe "first parameter \"Write\"" do
+      describe "Device blacklisting is disabled" do
+        it "do nothing" do
+          ::Installation::CIOIgnore.instance.enabled = false
+
+          expect(Yast::SCR).to_not receive(:Execute)
+
+          subject.run("Write")
+        end
+      end
+
+      describe "Device blacklisting is enabled" do
+
+        it "call `cio_ignore --unused --purge`" do
+          ::Installation::CIOIgnore.instance.enabled = true
+
+          expect(Yast::SCR).to receive(:Execute).
+            with(
+              ::Installation::CIOIgnoreFinish::YAST_BASH_PATH,
+              "cio_ignore --unused --purge"
+            ).
+            once.
+            and_return({"exit" => 0, "stdout" => "", "stderr" => ""})
+
+          subject.run("Write")
+        end
+
+        it "raises RuntimeError if cio_ignore call failed" do
+          ::Installation::CIOIgnore.instance.enabled = true
+          stderr = "HORRIBLE ERROR!!!"
+
+          expect(Yast::SCR).to receive(:Execute).
+            with(
+              ::Installation::CIOIgnoreFinish::YAST_BASH_PATH,
+              "cio_ignore --unused --purge"
+            ).
+            once.
+            and_return({"exit" => 1, "stdout" => "", "stderr" => stderr})
+
+          expect{subject.run("Write")}.to raise_error(RuntimeError, /stderr/)
+        end
+
+      end
+    end
+
+    it "raises RuntimeError if unknown action passed as first parameter" do
+      expect{subject.run("non_existing_action")}.to(
+        raise_error(RuntimeError)
+      )
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-3.1.40/test/inst_functions.rb 
new/yast2-installation-3.1.47/test/inst_functions.rb
--- old/yast2-installation-3.1.40/test/inst_functions.rb        2014-02-21 
15:15:55.000000000 +0100
+++ new/yast2-installation-3.1.47/test/inst_functions.rb        1970-01-01 
01:00:00.000000000 +0100
@@ -1,177 +0,0 @@
-#! /usr/bin/env rspec
-
-ENV["Y2DIR"] = File.expand_path("../../src", __FILE__)
-
-require "yast"
-
-Yast.import "InstFunctions"
-
-# For mocking
-Yast.import "Linuxrc"
-
-describe "when getting list of ignored features from Linuxrc" do
-  before(:each) do
-    Yast::InstFunctions.reset_ignored_features
-  end
-
-  it "returns empty list if no features were ignored on commandline" do
-    linuxrc_commandline = "othercommand=xyz no_ignore_features=1 
something-else=555"
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.ignored_features.sort).to be_empty
-  end
-
-  it "returns empty list if features ignored on commandline were empty" do
-    linuxrc_commandline = "ignore_features="
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.ignored_features.sort).to be_empty
-  end
-
-  it "returns list of features set on commandline by two entries" do
-    linuxrc_commandline = "ignore_features=aa,b_b,c-c ignoredfeatures=a-a,dd 
othercommand=xyz"
-    ignored_features    = ["aa", "bb", "cc", "dd"].sort
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
-  end
-
-  it "returns list of features set on commandline by one entry" do
-    linuxrc_commandline = "ignore_features=x-x,yy"
-    ignored_features    = ["xx", "yy"].sort
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
-  end
-
-  it "returns list of features set on commandline by several entries, each 
feature in separate entry" do
-    linuxrc_commandline = "trash=install ignore_feature=f.e.a.ture1 
ig.n.o.red_features=feature2 ignore_features=feature3"
-    ignored_features    = ["feature1", "feature2", "feature3"].sort
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
-  end
-
-  it "returns one feature set on commandline by one entry" do
-    linuxrc_commandline = "i-g-n-o-r-e_feature=fff"
-    ignored_features    = ["fff"]
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
-  end
-
-  it "returns one feature set on commandline by one entry using up/down case" 
do
-    linuxrc_commandline = "Ignore_FeaTUres=ffF"
-    ignored_features    = ["fff"]
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
-  end
-
-  # PTOptions makes a command hidden from 'Cmdline' and creates
-  # a new install.inf entry using the exact name as it appears in PTOptions
-  # @see http://en.opensuse.org/SDB:Linuxrc#p_ptoptions
-  it "returns features set on commandline together with ptoptions" do
-    install_inf = {
-      'ignored_features' => 'f1,f2,f3',
-      'IgnoReDfEAtuRes' => 'f2,f4',
-      'i.g.n.o.r.e.d.features' => 'f1,f5',
-      'IGNORE-FEA-T-U-RE' => 'f6,f7,f7,f7',
-      'another_feature' => 'another_value',
-      'Cmdline' => 'splash=silent vga=0x314',
-      'Keyboard' => '1',
-    }
-    Yast::Linuxrc.stub(:keys).and_return(install_inf.keys)
-    install_inf.keys.each do |key|
-      Yast::Linuxrc.stub(:InstallInf).with(key).and_return(install_inf[key])
-    end
-
-    expect(Yast::InstFunctions.ignored_features.sort).to 
eq(['f1','f2','f3','f4','f5','f6','f7'])
-  end
-end
-
-describe "#feature_ignored?" do
-  before(:each) do
-    Yast::InstFunctions.reset_ignored_features
-  end
-
-  it "should be true if feature is exactly set on commandline" do
-    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.feature_ignored?("feature2")).to be_true
-  end
-
-  it "should be true if feature is exactly on commandline using up/down case" 
do
-    linuxrc_commandline = "trash=install ignore_features=fEAture1 
igno-RED_features=f-eatuRE_2 ignore_features=feature3"
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.feature_ignored?("f-e-a-t-u-r-e-2")).to be_true
-  end
-
-  it "should be true if feature is set on commandline with dashes and 
underscores" do
-    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.feature_ignored?("f-e-a-t-u-r-e_2")).to be_true
-  end
-
-  it "should be false if feature is not set on commandline" do
-    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.feature_ignored?("no-such-feature")).to be_false
-  end
-
-  it "should be false if feature to check is empty" do
-    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.feature_ignored?("")).to be_false
-  end
-
-  it "should be false if feature to check is undefined" do
-    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
-
-    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
-    expect(Yast::InstFunctions.feature_ignored?(nil)).to be_false
-  end
-
-  it "should be true if feature is mentioned as a separate install.inf entry 
or in Cmdline" do
-    install_inf = {
-      'ignored_features' => 'f1,f2,f3',
-      'IgnoReDfEAtuRes' => 'f2,f4',
-      'i.g.n.o.r.e.d.features' => 'f1,f5',
-      'IGNORED-FEA-T-U-RES' => 'f6,f7,f7,f7',
-      'another_feature' => 'another_value',
-      'Cmdline' => 'splash=silent vga=0x314 ignored_feature=f8',
-      'Keyboard' => '1',
-    }
-    Yast::Linuxrc.stub(:keys).and_return(install_inf.keys)
-    install_inf.keys.each do |key|
-      Yast::Linuxrc.stub(:InstallInf).with(key).and_return(install_inf[key])
-    end
-
-    ['f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8'].each do |key|
-      expect(Yast::InstFunctions.feature_ignored?(key)).to be_true, "Key 
#{key} is not ignored"
-    end
-  end
-
-  it "should be false if feature is not mentioned as a separate install.inf 
entry or in Cmdline" do
-    install_inf = {
-      'ignored_features' => 'f1,f2,f3',
-      'IgnoReDfEAtuRes' => 'f2,f4',
-      'i.g.n.o.r.e.d.features' => 'f1,f5',
-      'IGNORE-FEA-T-U-RE' => 'f6,f7,f7,f7',
-      'another_feature' => 'another_value',
-      'Cmdline' => 'splash=silent vga=0x314 ignored_feature=f8',
-      'Keyboard' => '1',
-    }
-    Yast::Linuxrc.stub(:keys).and_return(install_inf.keys)
-    install_inf.keys.each do |key|
-      Yast::Linuxrc.stub(:InstallInf).with(key).and_return(install_inf[key])
-    end
-
-    expect(Yast::InstFunctions.feature_ignored?('f9')).to be_false
-  end
-end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-installation-3.1.40/test/inst_functions_test.rb 
new/yast2-installation-3.1.47/test/inst_functions_test.rb
--- old/yast2-installation-3.1.40/test/inst_functions_test.rb   1970-01-01 
01:00:00.000000000 +0100
+++ new/yast2-installation-3.1.47/test/inst_functions_test.rb   2014-02-27 
16:14:09.000000000 +0100
@@ -0,0 +1,184 @@
+#! /usr/bin/env rspec
+
+require_relative "./test_helper"
+
+Yast.import "InstFunctions"
+
+# For mocking
+Yast.import "Linuxrc"
+
+def stub_install_inf(install_inf)
+  Yast::Linuxrc.stub(:keys).and_return(install_inf.keys)
+
+  install_inf.keys.each do |key|
+    Yast::Linuxrc.stub(:InstallInf).with(key).and_return(install_inf[key])
+  end
+end
+
+describe "when getting list of ignored features from Linuxrc" do
+  before(:each) do
+    Yast::InstFunctions.reset_ignored_features
+  end
+
+  it "returns empty list if no features were ignored on commandline" do
+    linuxrc_commandline = "othercommand=xyz no_ignore_features=1 
something-else=555"
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.ignored_features.sort).to be_empty
+  end
+
+  it "returns empty list if features ignored on commandline were empty" do
+    linuxrc_commandline = "ignore_features="
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.ignored_features.sort).to be_empty
+  end
+
+  it "returns list of features set on commandline by two entries" do
+    linuxrc_commandline = "ignore_features=aa,b_b,c-c ignoredfeatures=a-a,dd 
othercommand=xyz"
+    ignored_features    = ["aa", "bb", "cc", "dd"].sort
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
+  end
+
+  it "returns list of features set on commandline by one entry" do
+    linuxrc_commandline = "ignore_features=x-x,yy"
+    ignored_features    = ["xx", "yy"].sort
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
+  end
+
+  it "returns list of features set on commandline by several entries, each 
feature in separate entry" do
+    linuxrc_commandline = "trash=install ignore_feature=f.e.a.ture1 
ig.n.o.red_features=feature2 ignore_features=feature3"
+    ignored_features    = ["feature1", "feature2", "feature3"].sort
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
+  end
+
+  it "returns one feature set on commandline by one entry" do
+    linuxrc_commandline = "i-g-n-o-r-e_feature=fff"
+    ignored_features    = ["fff"]
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
+  end
+
+  it "returns one feature set on commandline by one entry using up/down case" 
do
+    linuxrc_commandline = "Ignore_FeaTUres=ffF"
+    ignored_features    = ["fff"]
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.ignored_features.sort).to eq ignored_features
+  end
+
+  # PTOptions makes a command hidden from 'Cmdline' and creates
+  # a new install.inf entry using the exact name as it appears in PTOptions
+  # @see http://en.opensuse.org/SDB:Linuxrc#p_ptoptions
+  it "returns features set on commandline together with ptoptions" do
+    install_inf = {
+      'ignored_features' => 'f1,f2,f3',
+      'IgnoReDfEAtuRes' => 'f2,f4',
+      'i.g.n.o.r.e.d.features' => 'f1,f5',
+      'IGNORE-FEA-T-U-RE' => 'f6,f7,f7,f7',
+      'another_feature' => 'another_value',
+      'Cmdline' => 'splash=silent vga=0x314',
+      'Keyboard' => '1',
+    }
+    stub_install_inf(install_inf)
+
+    expect(Yast::InstFunctions.ignored_features.sort).to 
eq(['f1','f2','f3','f4','f5','f6','f7'])
+  end
+
+  it "handles missing Cmdline in Linuxrc" do
+    install_inf = {
+      # Cmdline is not defined, bnc#861465
+      'Cmdline' => nil,
+    }
+    stub_install_inf(install_inf)
+
+    expect(Yast::InstFunctions.ignored_features.sort).to be_empty
+  end
+end
+
+describe "#feature_ignored?" do
+  before(:each) do
+    Yast::InstFunctions.reset_ignored_features
+  end
+
+  it "should be true if feature is exactly set on commandline" do
+    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.feature_ignored?("feature2")).to be_true
+  end
+
+  it "should be true if feature is exactly on commandline using up/down case" 
do
+    linuxrc_commandline = "trash=install ignore_features=fEAture1 
igno-RED_features=f-eatuRE_2 ignore_features=feature3"
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.feature_ignored?("f-e-a-t-u-r-e-2")).to be_true
+  end
+
+  it "should be true if feature is set on commandline with dashes and 
underscores" do
+    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.feature_ignored?("f-e-a-t-u-r-e_2")).to be_true
+  end
+
+  it "should be false if feature is not set on commandline" do
+    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.feature_ignored?("no-such-feature")).to be_false
+  end
+
+  it "should be false if feature to check is empty" do
+    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.feature_ignored?("")).to be_false
+  end
+
+  it "should be false if feature to check is undefined" do
+    linuxrc_commandline = "trash=install ignore_features=feature1 
ignored_features=feature2 ignore_features=feature3"
+
+    Yast::Linuxrc.stub(:InstallInf).and_return(linuxrc_commandline)
+    expect(Yast::InstFunctions.feature_ignored?(nil)).to be_false
+  end
+
+  it "should be true if feature is mentioned as a separate install.inf entry 
or in Cmdline" do
+    install_inf = {
+      'ignored_features' => 'f1,f2,f3',
+      'IgnoReDfEAtuRes' => 'f2,f4',
+      'i.g.n.o.r.e.d.features' => 'f1,f5',
+      'IGNORED-FEA-T-U-RES' => 'f6,f7,f7,f7',
+      'another_feature' => 'another_value',
+      'Cmdline' => 'splash=silent vga=0x314 ignored_feature=f8',
+      'Keyboard' => '1',
+    }
+    stub_install_inf(install_inf)
+
+    ['f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8'].each do |key|
+      expect(Yast::InstFunctions.feature_ignored?(key)).to be_true, "Key 
#{key} is not ignored"
+    end
+  end
+
+  it "should be false if feature is not mentioned as a separate install.inf 
entry or in Cmdline" do
+    install_inf = {
+      'ignored_features' => 'f1,f2,f3',
+      'IgnoReDfEAtuRes' => 'f2,f4',
+      'i.g.n.o.r.e.d.features' => 'f1,f5',
+      'IGNORE-FEA-T-U-RE' => 'f6,f7,f7,f7',
+      'another_feature' => 'another_value',
+      'Cmdline' => 'splash=silent vga=0x314 ignored_feature=f8',
+      'Keyboard' => '1',
+    }
+    stub_install_inf(install_inf)
+
+    expect(Yast::InstFunctions.feature_ignored?('f9')).to be_false
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-installation-3.1.40/test/test_helper.rb 
new/yast2-installation-3.1.47/test/test_helper.rb
--- old/yast2-installation-3.1.40/test/test_helper.rb   1970-01-01 
01:00:00.000000000 +0100
+++ new/yast2-installation-3.1.47/test/test_helper.rb   2014-02-27 
16:14:09.000000000 +0100
@@ -0,0 +1,8 @@
+ENV["Y2DIR"] = File.expand_path("../../src", __FILE__)
+
+if ENV["COVERAGE"]
+  require "simplecov"
+  SimpleCov.start
+end
+
+require "yast"

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to