Hello community,

here is the log from the commit of package yast2 for openSUSE:Factory checked 
in at 2017-03-29 13:23:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2 (Old)
 and      /work/SRC/openSUSE:Factory/.yast2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2"

Wed Mar 29 13:23:10 2017 rev:399 rq:482978 version:3.2.23

Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2/yast2.changes      2017-03-21 
22:47:38.594948976 +0100
+++ /work/SRC/openSUSE:Factory/.yast2.new/yast2.changes 2017-03-29 
13:23:11.740126687 +0200
@@ -1,0 +2,31 @@
+Tue Mar 28 07:25:39 WEST 2017 - knut.anders...@suse.com
+
+- SlideShow: Escape plain text release notes being shown properly
+  in RichText (bsc#1028721).
+- 3.2.23
+
+-------------------------------------------------------------------
+Fri Mar 24 09:37:44 UTC 2017 - lsle...@suse.cz
+
+- Download the addon installation.xml file from a package
+  referenced by the "installerextension" provides dependency
+  (FATE#320772)
+- 3.2.22
+
+-------------------------------------------------------------------
+
+Wed Mar 22 16:53:07 UTC 2017 - jreidin...@suse.com
+
+- Use for Yast::TargetFile and Yast::Execute real path where scr
+  operates. It allows easier switching scr in unit tests.
+  (needed for testing fix for bsc#1023204)
+- 3.2.21
+
+-------------------------------------------------------------------
+Wed Mar 22 15:37:51 UTC 2017 - an...@suse.com
+
+- Added options to CWM::RadioButtons to set some extra spaces
+  (related to poo#14936 and bsc#1025415).
+- 3.2.20
+
+-------------------------------------------------------------------

Old:
----
  yast2-3.2.19.tar.bz2

New:
----
  yast2-3.2.23.tar.bz2

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

Other differences:
------------------
++++++ yast2.spec ++++++
--- /var/tmp/diff_new_pack.eRZxNh/_old  2017-03-29 13:23:12.548012432 +0200
+++ /var/tmp/diff_new_pack.eRZxNh/_new  2017-03-29 13:23:12.552011867 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2
-Version:        3.2.19
+Version:        3.2.23
 Release:        0
 Summary:        YaST2 - Main Package
 License:        GPL-2.0
@@ -43,8 +43,8 @@
 BuildRequires:  yast2-core >= 2.18.12
 BuildRequires:  yast2-devtools >= 3.1.10
 BuildRequires:  yast2-pkg-bindings >= 2.20.3
-# To have Yast::CoreExt::AnsiString
-BuildRequires:  yast2-ruby-bindings >= 3.1.36
+# To have Yast::WFM.scr_root
+BuildRequires:  yast2-ruby-bindings >= 3.2.8
 BuildRequires:  yast2-testsuite
 BuildRequires:  yast2-ycp-ui-bindings >= 3.1.8
 # for the PackageExtractor tests, just make sure they are present,
@@ -76,7 +76,7 @@
 Requires:       yast2-perl-bindings
 # changed StartPackage callback signature
 Requires:       yast2-pkg-bindings >= 2.20.3
-Requires:       yast2-ruby-bindings >= 3.1.33
+Requires:       yast2-ruby-bindings >= 3.2.8
 Requires:       yast2-xml
 # new UI::SetApplicationIcon
 Requires:       yast2-ycp-ui-bindings >= 3.1.8

++++++ yast2-3.2.19.tar.bz2 -> yast2-3.2.23.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-3.2.19/library/control/src/modules/WorkflowManager.rb 
new/yast2-3.2.23/library/control/src/modules/WorkflowManager.rb
--- old/yast2-3.2.19/library/control/src/modules/WorkflowManager.rb     
2017-03-20 15:26:45.025124529 +0100
+++ new/yast2-3.2.23/library/control/src/modules/WorkflowManager.rb     
2017-03-28 10:04:21.924733274 +0200
@@ -21,7 +21,7 @@
 # you may find current contact information at www.novell.com
 #
 # ***************************************************************************
-# File:        modules/WorkflowManager.ycp
+# File:        modules/WorkflowManager.rb
 # Package:     yast2
 # Summary:     Provides API for configuring workflows
 # Authors:     Lukas Ocilka <loci...@suse.cz>
@@ -34,9 +34,11 @@
 #
 # Module unifies Add-Ons and Patterns modifying the workflow.
 #
-# $Id: $
 require "yast"
 
+require "packages/package_downloader"
+require "packages/package_extractor"
+
 module Yast
   class WorkflowManagerClass < Module
     include Yast::Logger
@@ -393,6 +395,60 @@
       file_location
     end
 
+    # Download and extract the control file (installation.xml) from the add-on
+    # repository.
+    #
+    # @param src_id [Fixnum] repository ID
+    # @return [String, nil] path to downloaded installation.xml file or nil
+    #   or nil when no workflow is defined or the workflow package is missing
+    def addon_control_file(src_id)
+      product = find_product(src_id)
+      return nil unless product && product["product_package"]
+
+      # the dependencies are bound to the product's -release package
+      release_package = Pkg.ResolvableDependencies(product["product_package"], 
:package, "").first
+
+      # find the package name with installer update in its Provide dependencies
+      control_file_package = find_control_package(release_package)
+      return nil unless control_file_package
+
+      # get the repository ID of the package
+      src = package_repository(control_file_package)
+      return nil unless src
+
+      # ensure the previous content is removed, the src_id should avoid
+      # collisions but rather be safe...
+      dir = addon_control_dir(src_id, cleanup: true)
+      fetch_package(src, control_file_package, dir)
+
+      path = File.join(dir, "installation.xml")
+      return nil unless File.exist?(path)
+
+      log.info("installation.xml path: #{path}")
+      path
+    rescue Packages::PackageDownloader::FetchError
+      # TRANSLATORS: an error message
+      Report.Error(_("Downloading the installer extension package failed."))
+      nil
+    rescue Packages::PackageExtractor::ExtractionFailed
+      # TRANSLATORS: an error message
+      Report.Error(_("Extracting the installer extension failed."))
+      nil
+    end
+
+    # Create a temporary directory for storing the installer extension package 
content.
+    # The directory is automatically removed at exit.
+    # @param src_id [Fixnum] repository ID
+    # @param cleanup [Boolean] remove the content if the directory already 
exists
+    # @return [String] directory path
+    def addon_control_dir(src_id, cleanup: false)
+      # Directory.tmpdir is automatically removed at exit
+      dir = File.join(Directory.tmpdir, "installer-extension-#{src_id}")
+      ::FileUtils.remove_entry(dir) if cleanup && Dir.exist?(dir)
+      ::FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
+      dir
+    end
+
     # Returns requested control filename. Parameter 'name' is ignored
     # for Add-Ons.
     #
@@ -411,7 +467,7 @@
           # Trying to get the file from source
         else
           Builtins.y2milestone("File %1 not cached", disk_filename)
-          # using a file from source
+          # using a file from source, works only for SUSE tags repositories
           use_filename = Pkg.SourceProvideDigestedFile(
             src_id,
             1,
@@ -419,6 +475,10 @@
             true
           )
 
+          # The most generic way it to use the package referenced by the 
"installerextension()"
+          # provides, this works with all repository types, including the 
RPM-MD repositories.
+          use_filename ||= addon_control_file(src_id)
+
           # File exists?
           return use_filename.nil? ? nil : StoreWorkflowFile(use_filename, 
disk_filename)
         end
@@ -1427,6 +1487,93 @@
     publish function: :SetAllUsedControlFiles, type: "void (list <string>)"
     publish function: :HaveAdditionalWorkflows, type: "boolean ()"
     publish function: :DumpCurrentSettings, type: "map <string, any> ()"
+
+  private
+
+    # Find the product from a repository.
+    # @param repo_id [Fixnum] repository ID
+    # @return [Hash,nil] pkg-bindings product hash or nil if not found
+    def find_product(repo_id)
+      # identify the product
+      products = Pkg.ResolvableDependencies("", :product, "")
+      return nil unless products
+
+      products.select! { |p| p["source"] == repo_id }
+
+      if products.size > 1
+        log.warn("More than one product found in the repository: #{products}")
+        log.warn("Using the first one: #{products.first}")
+      end
+
+      products.first
+    end
+
+    # Find the extension package name for the specified release package.
+    # The extension package is defined by the "installerextension()"
+    # RPM "Provides" dependency.
+    # @return [String,nil] a package name or nil if not found
+    def find_control_package(release_package)
+      return nil unless release_package && release_package["deps"]
+
+      release_package["deps"].each do |dep|
+        provide = dep["provides"]
+        next unless provide
+
+        control_file_package = provide[/\Ainstallerextension\((.+)\)\z/, 1]
+        next unless control_file_package
+
+        log.info("Found referenced package with control file: 
#{control_file_package}")
+        return control_file_package.strip
+      end
+
+      nil
+    end
+
+    # Find the repository ID for the package.
+    # @param package_name [String] name of the package
+    # @return [Fixnum,nil] repository ID or nil if not found
+    def package_repository(package_name)
+      # Identify the installation repository with the package
+      pkgs = Pkg.ResolvableProperties(package_name, :package, "")
+
+      if pkgs.empty?
+        log.warn("The installer extension package #{package_name} was not 
found")
+        return nil
+      elsif pkgs.size > 1
+        log.warn("More than one control package found: #{pkgs}")
+        log.warn("Using the first one: #{pkgs.first}")
+      end
+
+      pkgs.first["source"]
+    end
+
+    # Download and extract a package from a repository.
+    # @param repo_id [Fixnum] repository ID
+    # @param package [String] name of the package
+    # @raise [Packages::PackageDownloader::FetchError] if package download 
failed
+    # @raise [Packages::PackageExtractor::ExtractionFailed] if package 
extraction failed
+    def fetch_package(repo_id, package, dir)
+      downloader = Packages::PackageDownloader.new(repo_id, package)
+
+      Tempfile.open("downloaded-package-") do |tmp|
+        downloader.download(tmp.path)
+        extract(tmp, dir)
+        # the RPM package file is not needed after extracting it's content,
+        # remove it explicitly now, do not wait for the garbage collector
+        # (in inst-syst it is stored in a RAM disk and eats the RAM memory)
+        tmp.unlink
+      end
+    end
+
+    # Extract an RPM package into the given directory.
+    # @param package_file [String] the RPM package path
+    # @param dir [String] a directory where the package will be extracted to
+    # @raise [Packages::PackageExtractor::ExtractionFailed] if package 
extraction failed
+    def extract(package_file, dir)
+      log.info("Extracting file #{package_file}")
+      extractor = Packages::PackageExtractor.new(package_file)
+      extractor.extract(dir)
+    end
   end
 
   WorkflowManager = WorkflowManagerClass.new
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-3.2.19/library/control/test/workflow_manager_test.rb 
new/yast2-3.2.23/library/control/test/workflow_manager_test.rb
--- old/yast2-3.2.19/library/control/test/workflow_manager_test.rb      
2017-03-20 15:26:45.025124529 +0100
+++ new/yast2-3.2.23/library/control/test/workflow_manager_test.rb      
2017-03-28 10:04:21.924733274 +0200
@@ -266,4 +266,154 @@
       expect(subject.DumpCurrentSettings["unmerged_changes"]).to eq(false)
     end
   end
+
+  describe "#addon_control_file" do
+    # setup fake products and their packages
+    let(:repo_id) { 42 }
+    let(:product_package) { "foo-release" }
+    let(:product) { { "name" => "foo", "source" => repo_id, "product_package" 
=> product_package } }
+    let(:ext_package) { "foo-installation" }
+    let(:extension) { { "name" => ext_package, "source" => repo_id } }
+    let(:release) do
+      { "name" => product_package, "source" => repo_id,
+      "deps" => ["provides" => "installerextension(#{ext_package})"] }
+    end
+
+    before do
+      # generic mocks, can be are overriden in the tests
+      allow(Yast::Pkg).to receive(:ResolvableDependencies).with("", :product, 
"").and_return([product])
+      allow(Yast::Pkg).to 
receive(:ResolvableDependencies).with(product_package, :package, 
"").and_return([release])
+      allow(Yast::Pkg).to receive(:ResolvableProperties).with(ext_package, 
:package, "").and_return([extension])
+      allow_any_instance_of(Packages::PackageDownloader).to receive(:download)
+      allow_any_instance_of(Packages::PackageExtractor).to receive(:extract)
+      # allow using it at other places
+      allow(File).to receive(:exist?).and_call_original
+    end
+
+    it "returns nil if the repository does not provide any product" do
+      expect(Yast::Pkg).to receive(:ResolvableDependencies).with("", :product, 
"").and_return([])
+      expect(subject.addon_control_file(repo_id)).to be nil
+    end
+
+    it "returns nil if the product does not refer to a release package" do
+      product = { "name" => "foo", "source" => repo_id }
+      expect(Yast::Pkg).to receive(:ResolvableDependencies).with("", :product, 
"").and_return([product])
+      expect(subject.addon_control_file(repo_id)).to be nil
+    end
+
+    it "returns nil if the product belongs to a different repository" do
+      product = { "name" => "foo", "source" => repo_id + 1 }
+      expect(Yast::Pkg).to receive(:ResolvableDependencies).with("", :product, 
"").and_return([product])
+      expect(subject.addon_control_file(repo_id)).to be nil
+    end
+
+    it "returns nil if the release package cannot be found" do
+      expect(Yast::Pkg).to 
receive(:ResolvableDependencies).with(product_package, :package, 
"").and_return([])
+      expect(subject.addon_control_file(repo_id)).to be nil
+    end
+
+    it "returns nil if the release package does not have any dependencies" do
+      release = { "name" => "foo", "source" => repo_id }
+      expect(Yast::Pkg).to 
receive(:ResolvableDependencies).with(product_package, :package, 
"").and_return([release])
+      expect(subject.addon_control_file(repo_id)).to be nil
+    end
+
+    it "returns nil if the release package does not have any 
installerextension() provides" do
+      release = { "name" => "foo", "source" => repo_id, "deps" => ["provides" 
=> "foo"] }
+      expect(Yast::Pkg).to 
receive(:ResolvableDependencies).with(product_package, :package, 
"").and_return([release])
+      expect(subject.addon_control_file(repo_id)).to be nil
+    end
+
+    it "returns nil if the installer extension package is not found" do
+      expect(Yast::Pkg).to receive(:ResolvableProperties).with(ext_package, 
:package, "").and_return([])
+      expect(subject.addon_control_file(repo_id)).to be nil
+    end
+
+    context "downloading the installer extension package fails" do
+      before do
+        expect_any_instance_of(Packages::PackageDownloader).to 
receive(:download).and_raise(Packages::PackageDownloader::FetchError)
+        allow(Yast::Report).to receive(:Error)
+      end
+
+      it "reports an error" do
+        expect(Yast::Report).to receive(:Error)
+        subject.addon_control_file(repo_id)
+      end
+
+      it "returns nil" do
+        expect(subject.addon_control_file(repo_id)).to be nil
+      end
+    end
+
+    context "extracting the installer extension package fails" do
+      before do
+        expect_any_instance_of(Packages::PackageExtractor).to 
receive(:extract).and_raise(Packages::PackageExtractor::ExtractionFailed)
+        allow(Yast::Report).to receive(:Error)
+      end
+
+      it "reports an error" do
+        expect(Yast::Report).to receive(:Error)
+        subject.addon_control_file(repo_id)
+      end
+
+      it "returns nil" do
+        expect(subject.addon_control_file(repo_id)).to be nil
+      end
+    end
+
+    it "downloads and extracts the extension package" do
+      expect_any_instance_of(Packages::PackageDownloader).to receive(:download)
+      expect_any_instance_of(Packages::PackageExtractor).to receive(:extract)
+      allow(File).to receive(:exist?)
+      subject.addon_control_file(repo_id)
+    end
+
+    it "returns nil if the extracted package does not contain 
installation.xml" do
+      expect(File).to 
receive(:exist?).with(/installation\.xml\z/).and_return(false)
+      expect(subject.addon_control_file(repo_id)).to be nil
+    end
+
+    it "returns the installation.xml path if the extracted package contains 
it" do
+      expect(File).to 
receive(:exist?).with(/installation.xml\z/).and_return(true)
+      # the returned path contains "/installation.xml" at the end
+      expect(subject.addon_control_file(repo_id)).to 
end_with("/installation.xml")
+    end
+  end
+
+  describe "#addon_control_dir" do
+    let(:src_id) { 3 }
+
+    after do
+      # remove the created directory after each run to ensure the same initial 
state
+      FileUtils.remove_entry(subject.addon_control_dir(src_id))
+    end
+
+    it "returns a directory path" do
+      expect(File.directory?(subject.addon_control_dir(src_id))).to be true
+    end
+
+    context "a file already exists in the target directory" do
+      let(:path) { subject.addon_control_dir(src_id) + "/test" }
+
+      before do
+        # write some dummy file first
+        File.write(path, "")
+      end
+
+      it "removes the existing content if cleanup is requested" do
+        expect { subject.addon_control_dir(src_id, cleanup: true) }.to change 
{ File.exist?(path) }.from(true).to(false)
+      end
+
+      it "keeps the existing content if cleanup is not requested" do
+        expect { subject.addon_control_dir(src_id) }.to_not change { 
File.exist?(path) }
+      end
+    end
+
+    it "does not create the directory if it already exists" do
+      dir = subject.addon_control_dir(src_id)
+      expect(File.directory?(subject.addon_control_dir(src_id))).to be true
+      expect(FileUtils).to_not receive(:mkdir_p).with(dir)
+      subject.addon_control_dir(src_id)
+    end
+  end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-3.2.19/library/cwm/src/lib/cwm/widget.rb 
new/yast2-3.2.23/library/cwm/src/lib/cwm/widget.rb
--- old/yast2-3.2.19/library/cwm/src/lib/cwm/widget.rb  2017-03-20 
15:26:45.033124529 +0100
+++ new/yast2-3.2.23/library/cwm/src/lib/cwm/widget.rb  2017-03-28 
10:04:22.012733274 +0200
@@ -602,6 +602,12 @@
     include ItemsSelection
     abstract_method :label
 
+    # @!method vspacing
+    #   @return [Fixnum] space between the options
+
+    # @!method hspacing
+    #   @return [Fixnum] margin at both sides of the options list
+
     def value
       Yast::UI.QueryWidget(Id(widget_id), :CurrentButton)
     end
@@ -609,6 +615,27 @@
     def value=(val)
       Yast::UI.ChangeWidget(Id(widget_id), :CurrentButton, val)
     end
+
+    # See AbstractWidget#cwm_definition
+    # In addition to the base definition, this honors possible
+    # `vspacing` and `hspacing` methods
+    #
+    # @example defining additional space between the options
+    #   def vspacing
+    #     1
+    #   end
+    #
+    # @example defining some margin at both sides of the list of options
+    #   def hspacing
+    #     3
+    #   end
+    def cwm_definition
+      additional = {}
+      additional["vspacing"] = vspacing if respond_to?(:vspacing)
+      additional["hspacing"] = hspacing if respond_to?(:hspacing)
+
+      super.merge(additional)
+    end
   end
 
   # Widget representing button.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-3.2.19/library/cwm/test/widgets_test.rb 
new/yast2-3.2.23/library/cwm/test/widgets_test.rb
--- old/yast2-3.2.19/library/cwm/test/widgets_test.rb   2017-03-20 
15:26:45.033124529 +0100
+++ new/yast2-3.2.23/library/cwm/test/widgets_test.rb   2017-03-28 
10:04:22.016733274 +0200
@@ -214,6 +214,61 @@
   end
 end
 
+describe CWM::RadioButtons do
+
+  class TestRadioButtons < CWM::RadioButtons
+    def label
+      "Choose a number"
+    end
+
+    def items
+      [[:one, "One"], [:two, "Two"], [:three, "Three"]]
+    end
+  end
+
+  class TestSpacedRadioButtons < TestRadioButtons
+    def vspacing
+      2
+    end
+
+    def hspacing
+      3
+    end
+  end
+
+  describe "#cwm_definition" do
+    context "if #vspacing and #hspacing are not defined" do
+      subject { TestRadioButtons.new }
+
+      it "does not include the vspacing key" do
+        expect(subject.cwm_definition.keys).to_not include("vspacing")
+      end
+
+      it "does not include the hspacing key" do
+        expect(subject.cwm_definition.keys).to_not include("hspacing")
+      end
+    end
+
+    context "if #vspacing is defined" do
+      subject { TestSpacedRadioButtons.new }
+
+      it "sets vspacing based on the method result" do
+        expect(subject.cwm_definition.keys).to include("vspacing")
+        expect(subject.cwm_definition["vspacing"]).to eq 2
+      end
+    end
+
+    context "if #hspacing is defined" do
+      subject { TestSpacedRadioButtons.new }
+
+      it "sets hspacing based on the method result" do
+        expect(subject.cwm_definition.keys).to include("hspacing")
+        expect(subject.cwm_definition["hspacing"]).to eq 3
+      end
+    end
+  end
+end
+
 describe CWM::ReplacePoint do
 
   class ReplacePointTestWidget < CWM::InputField
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-3.2.19/library/packages/src/modules/SlideShow.rb 
new/yast2-3.2.23/library/packages/src/modules/SlideShow.rb
--- old/yast2-3.2.19/library/packages/src/modules/SlideShow.rb  2017-03-20 
15:26:45.073124529 +0100
+++ new/yast2-3.2.23/library/packages/src/modules/SlideShow.rb  2017-03-28 
10:04:22.196733274 +0200
@@ -568,7 +568,15 @@
     # @return  A term describing the widgets
     #
     def RelNotesPageWidgets(id)
-      widgets = AddProgressWidgets(:relNotesPage, RichText(@_rn_tabs[id]))
+      # Release notes in plain text need to be escaped to be shown properly 
(bsc#1028721)
+      rel_notes =
+        if @_rn_tabs[id] =~ /<\/.*>/
+          @_rn_tabs[id]
+        else
+          "<pre>#{String.EscapeTags(@_rn_tabs[id])}</pre>"
+        end
+
+      widgets = AddProgressWidgets(:relNotesPage, RichText(rel_notes))
       Builtins.y2debug("widget term: \n%1", widgets)
       deep_copy(widgets)
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-3.2.19/library/system/src/lib/yast2/execute.rb 
new/yast2-3.2.23/library/system/src/lib/yast2/execute.rb
--- old/yast2-3.2.19/library/system/src/lib/yast2/execute.rb    2017-03-20 
15:26:45.085124529 +0100
+++ new/yast2-3.2.23/library/system/src/lib/yast2/execute.rb    2017-03-28 
10:04:22.216733274 +0200
@@ -23,8 +23,6 @@
 require "yast"
 require "cheetah"
 
-Yast.import "Installation"
-
 module Yast
   # Module for executing scripts/programs in safe way. Uses cheetah as backend,
   # but adds support for chrooting in installation.
@@ -39,8 +37,7 @@
     # @see http://www.rubydoc.info/github/openSUSE/cheetah/Cheetah.run 
parameter docs
     # @raise Cheetah::ExecutionFailed
     def self.on_target(*args)
-      root = "/"
-      root = Yast::Installation.destdir if Yast::WFM.scr_chrooted?
+      root = Yast::WFM.scr_root
 
       if args.last.is_a? ::Hash
         args.last[:chroot] = root
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-3.2.19/library/system/src/lib/yast2/target_file.rb 
new/yast2-3.2.23/library/system/src/lib/yast2/target_file.rb
--- old/yast2-3.2.19/library/system/src/lib/yast2/target_file.rb        
2017-03-20 15:26:45.089124529 +0100
+++ new/yast2-3.2.23/library/system/src/lib/yast2/target_file.rb        
2017-03-28 10:04:22.216733274 +0200
@@ -24,8 +24,6 @@
 
 require "cfa/base_model"
 
-Yast.import "Installation"
-
 module Yast
   # A file handler suitable for CFA::BaseModel (from config_files_api.gem)
   # that respects Yast::Installation.destdir. When this class is `require`d,
@@ -42,8 +40,7 @@
     end
 
     def self.final_path(path)
-      root = "/"
-      root = Yast::Installation.destdir if Yast::WFM.scr_chrooted?
+      root = Yast::WFM.scr_root
 
       ::File.join(root, path)
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-3.2.19/library/system/test/execute_test.rb 
new/yast2-3.2.23/library/system/test/execute_test.rb
--- old/yast2-3.2.19/library/system/test/execute_test.rb        2017-03-20 
15:26:45.089124529 +0100
+++ new/yast2-3.2.23/library/system/test/execute_test.rb        2017-03-28 
10:04:22.236733274 +0200
@@ -29,8 +29,7 @@
 
   describe ".on_target" do
     it "adds to passed arguments chroot option if scr chrooted" do
-      Yast::Installation.destdir = "/mnt"
-      allow(Yast::WFM).to receive(:scr_chrooted?).and_return(true)
+      allow(Yast::WFM).to receive(:scr_root).and_return("/mnt")
       expect(Cheetah).to receive(:run).with("ls", "-a", chroot: "/mnt")
 
       Yast::Execute.on_target("ls", "-a")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-3.2.19/package/yast2.changes 
new/yast2-3.2.23/package/yast2.changes
--- old/yast2-3.2.19/package/yast2.changes      2017-03-20 15:26:45.121124529 
+0100
+++ new/yast2-3.2.23/package/yast2.changes      2017-03-28 10:04:22.320733274 
+0200
@@ -1,4 +1,35 @@
 -------------------------------------------------------------------
+Tue Mar 28 07:25:39 WEST 2017 - knut.anders...@suse.com
+
+- SlideShow: Escape plain text release notes being shown properly
+  in RichText (bsc#1028721).
+- 3.2.23
+
+-------------------------------------------------------------------
+Fri Mar 24 09:37:44 UTC 2017 - lsle...@suse.cz
+
+- Download the addon installation.xml file from a package
+  referenced by the "installerextension" provides dependency
+  (FATE#320772)
+- 3.2.22
+
+-------------------------------------------------------------------
+
+Wed Mar 22 16:53:07 UTC 2017 - jreidin...@suse.com
+
+- Use for Yast::TargetFile and Yast::Execute real path where scr
+  operates. It allows easier switching scr in unit tests.
+  (needed for testing fix for bsc#1023204)
+- 3.2.21
+
+-------------------------------------------------------------------
+Wed Mar 22 15:37:51 UTC 2017 - an...@suse.com
+
+- Added options to CWM::RadioButtons to set some extra spaces
+  (related to poo#14936 and bsc#1025415).
+- 3.2.20
+
+-------------------------------------------------------------------
 Mon Mar 20 10:11:52 UTC 2017 - lsle...@suse.cz
 
 - Added PackageDownloader and PackageExtractor classes for sharing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-3.2.19/package/yast2.spec 
new/yast2-3.2.23/package/yast2.spec
--- old/yast2-3.2.19/package/yast2.spec 2017-03-20 15:26:45.121124529 +0100
+++ new/yast2-3.2.23/package/yast2.spec 2017-03-28 10:04:22.320733274 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2
-Version:        3.2.19
+Version:        3.2.23
 Release:        0
 Summary:        YaST2 - Main Package
 License:        GPL-2.0
@@ -43,8 +43,8 @@
 BuildRequires:  yast2-core >= 2.18.12
 BuildRequires:  yast2-devtools >= 3.1.10
 BuildRequires:  yast2-pkg-bindings >= 2.20.3
-# To have Yast::CoreExt::AnsiString
-BuildRequires:  yast2-ruby-bindings >= 3.1.36
+# To have Yast::WFM.scr_root
+BuildRequires:  yast2-ruby-bindings >= 3.2.8
 BuildRequires:  yast2-testsuite
 BuildRequires:  yast2-ycp-ui-bindings >= 3.1.8
 # for the PackageExtractor tests, just make sure they are present,
@@ -76,7 +76,7 @@
 Requires:       yast2-perl-bindings
 # changed StartPackage callback signature
 Requires:       yast2-pkg-bindings >= 2.20.3
-Requires:       yast2-ruby-bindings >= 3.1.33
+Requires:       yast2-ruby-bindings >= 3.2.8
 Requires:       yast2-xml
 # new UI::SetApplicationIcon
 Requires:       yast2-ycp-ui-bindings >= 3.1.8


Reply via email to