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