Hello community, here is the log from the commit of package yast2 for openSUSE:Factory checked in at 2016-02-25 21:51:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2 (Old) and /work/SRC/openSUSE:Factory/.yast2.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2" Changes: -------- --- /work/SRC/openSUSE:Factory/yast2/yast2.changes 2016-02-09 13:31:20.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.yast2.new/yast2.changes 2016-02-25 21:51:56.000000000 +0100 @@ -1,0 +2,19 @@ +Mon Feb 22 05:39:05 UTC 2016 - [email protected] + +- Add support for showing update messages from libzypp + (related to bsc#943805) +- 3.1.175 + +------------------------------------------------------------------- +Thu Feb 5 12:35:38 UTC 2016 - [email protected] + +- SuSEFirewall module reads system configuration during + autoinstallation. It behaves in the same way as + regular installation or normal operation (bsc#963585) +- AutoYaST settings for SuSEFirewall will be merged + with the existing configuration (instead of being fully + overwritten). +- Add a read_and_import method to SuSEFirewall module. +- 3.1.174 + +------------------------------------------------------------------- Old: ---- yast2-3.1.173.tar.bz2 New: ---- yast2-3.1.175.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2.spec ++++++ --- /var/tmp/diff_new_pack.mWAtqI/_old 2016-02-25 21:51:57.000000000 +0100 +++ /var/tmp/diff_new_pack.mWAtqI/_new 2016-02-25 21:51:57.000000000 +0100 @@ -17,7 +17,7 @@ Name: yast2 -Version: 3.1.173 +Version: 3.1.175 Release: 0 Url: https://github.com/yast/yast-yast2 ++++++ yast2-3.1.173.tar.bz2 -> yast2-3.1.175.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/.travis.yml new/yast2-3.1.175/.travis.yml --- old/yast2-3.1.173/.travis.yml 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/.travis.yml 2016-02-24 09:47:58.000000000 +0100 @@ -5,7 +5,7 @@ # disable rvm, use system Ruby - rvm reset - wget https://raw.githubusercontent.com/yast/yast-devtools/master/travis-tools/travis_setup.sh - - sh ./travis_setup.sh -p "rake yast2-core yast2-devtools yast2-testsuite yast2-ruby-bindings yast2-pkg-bindings ruby2.1-dev libaugeas-dev pkg-config" -g "rspec:3.3.0 yast-rake gettext simplecov coveralls rubocop:0.29.1 cheetah abstract_method cfa" + - sh ./travis_setup.sh -p "rake yast2-core yast2-devtools yast2-testsuite yast2-ruby-bindings yast2-pkg-bindings ruby2.1-dev libaugeas-dev pkg-config" -g "rspec:3.3.0 yast-rake gettext simplecov coveralls:0.8.10 rubocop:0.29.1 cheetah abstract_method cfa" script: - rake check:pot - rubocop diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/general/src/modules/Popup.rb new/yast2-3.1.175/library/general/src/modules/Popup.rb --- old/yast2-3.1.173/library/general/src/modules/Popup.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/general/src/modules/Popup.rb 2016-02-24 09:47:58.000000000 +0100 @@ -80,14 +80,7 @@ HSpacing(width), HBox( VSpacing(height), - # display the message in the widget "as is": - # escape all tags, replace new lines by <br> tag - RichText( - Builtins.mergestring( - Builtins.splitstring(String.EscapeTags(message), "\n"), - "<br>" - ) - ) + RichText(message) ) ) ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/general/test/Makefile.am new/yast2-3.1.175/library/general/test/Makefile.am --- old/yast2-3.1.173/library/general/test/Makefile.am 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/general/test/Makefile.am 2016-02-24 09:47:58.000000000 +0100 @@ -11,6 +11,7 @@ popup_test.rb \ proposal_client_test.rb \ service_status_test.rb \ + report_test.rb \ agents_test/proc_meminfo_agent_test.rb TEST_EXTENSIONS = .rb diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/general/test/popup_test.rb new/yast2-3.1.175/library/general/test/popup_test.rb --- old/yast2-3.1.173/library/general/test/popup_test.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/general/test/popup_test.rb 2016-02-24 09:47:58.000000000 +0100 @@ -36,4 +36,263 @@ expect { subject.Feedback("Label", "Message") }.to raise_error end end + + describe ".Message" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.Message("<h1>Title</h1>") + end + end + + describe ".Warning" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.Warning("<h1>Title</h1>") + end + end + + describe ".Error" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.Error("<h1>Title</h1>") + end + end + + # + # LongMessage + # + describe ".LongMessage" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.LongMessage("<h1>Title</h1>") + end + end + + describe ".LongMessageGeometry" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.LongMessage("<h1>Title</h1>") + end + + it "sets dialog width and height" do + allow(subject).to receive(:HSpacing) + allow(subject).to receive(:VSpacing) + expect(subject).to receive(:HSpacing).with(30) + expect(subject).to receive(:VSpacing).with(40) + subject.LongMessageGeometry("Title", 30, 40) + end + end + + describe ".TimedLongMessage" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.TimedLongMessage("<h1>Title</h1>", 1) + end + end + + describe ".TimedLongMessageGeometry" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.TimedLongMessageGeometry("<h1>Title</h1>", 1, 30, 40) + end + + it "sets dialog width and height" do + allow(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:HSpacing) + allow(subject).to receive(:VSpacing) + expect(subject).to receive(:HSpacing).with(30) + expect(subject).to receive(:VSpacing).with(40) + subject.TimedLongMessageGeometry("Title", 1, 30, 40) + end + end + + # + # LongWarning + # + describe ".LongWarning" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.LongWarning("<h1>Title</h1>") + end + end + + describe ".LongWarningGeometry" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.LongWarningGeometry("<h1>Title</h1>", 30, 40) + end + + it "sets dialog width and height" do + allow(subject).to receive(:HSpacing) + allow(subject).to receive(:VSpacing) + expect(subject).to receive(:HSpacing).with(30) + expect(subject).to receive(:VSpacing).with(40) + subject.LongWarningGeometry("Title", 30, 40) + end + end + + describe ".TimedLongWarning" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.TimedLongWarning("<h1>Title</h1>", 1) + end + end + + describe ".TimedLongWarningGeometry" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.TimedLongWarningGeometry("<h1>Title</h1>", 1, 30, 40) + end + + it "sets dialog width and height" do + allow(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:HSpacing) + allow(subject).to receive(:VSpacing) + expect(subject).to receive(:HSpacing).with(30) + expect(subject).to receive(:VSpacing).with(40) + subject.TimedLongWarningGeometry("Title", 1, 30, 40) + end + end + + # + # LongError + # + describe ".LongError" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.LongError("<h1>Title</h1>") + end + end + + describe ".LongErrorGeometry" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.LongErrorGeometry("<h1>Title</h1>", 30, 40) + end + + it "sets dialog width and height" do + allow(subject).to receive(:HSpacing) + allow(subject).to receive(:VSpacing) + expect(subject).to receive(:HSpacing).with(30) + expect(subject).to receive(:VSpacing).with(40) + subject.LongErrorGeometry("Title", 30, 40) + end + end + + describe ".TimedLongError" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.TimedLongError("<h1>Title</h1>", 1) + end + end + + describe ".TimedLongErrorGeometry" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.TimedLongErrorGeometry("<h1>Title</h1>", 1, 30, 40) + end + + it "sets dialog width and height" do + allow(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:HSpacing) + allow(subject).to receive(:VSpacing) + expect(subject).to receive(:HSpacing).with(30) + expect(subject).to receive(:VSpacing).with(40) + subject.TimedLongErrorGeometry("Title", 1, 30, 40) + end + end + + # + # TimedLongNotify + # + describe ".LongNotify" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.LongNotify("<h1>Title</h1>") + end + end + + describe ".LongNotifyGeometry" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.LongNotifyGeometry("<h1>Title</h1>", 30, 40) + end + + it "sets dialog width and height" do + allow(subject).to receive(:HSpacing) + allow(subject).to receive(:VSpacing) + expect(subject).to receive(:HSpacing).with(30) + expect(subject).to receive(:VSpacing).with(40) + subject.LongNotifyGeometry("Title", 30, 40) + end + end + + describe ".TimedLongNotify" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.TimedLongNotify("<h1>Title</h1>", 1) + end + end + + describe ".TimedLongNotifyGeometry" do + before { allow(ui).to receive(:OpenDialog) } + + it "shows a popup without escaping tags" do + expect(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:RichText).with("<h1>Title</h1>") + subject.TimedLongNotifyGeometry("<h1>Title</h1>", 1, 30, 40) + end + + it "sets dialog width and height" do + allow(ui).to receive(:TimeoutUserInput) + allow(subject).to receive(:HSpacing) + allow(subject).to receive(:VSpacing) + expect(subject).to receive(:HSpacing).with(30) + expect(subject).to receive(:VSpacing).with(40) + subject.TimedLongNotifyGeometry("Title", 1, 30, 40) + end + end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/general/test/report_test.rb new/yast2-3.1.175/library/general/test/report_test.rb --- old/yast2-3.1.173/library/general/test/report_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.175/library/general/test/report_test.rb 2016-02-24 09:47:58.000000000 +0100 @@ -0,0 +1,124 @@ +#! /usr/bin/env rspec + +require_relative "test_helper" + +Yast.import "Report" + +describe Yast::Report do + before { subject.ClearAll } + + # + # Shared examples + # + shared_examples "logging" do |meth, level| + context "when logging is enabled" do + it "logs the message" do + allow(Yast::Popup).to receive(meth) + expect(Yast::Builtins).to receive("y2#{level}") + .with(1, "%1", "Message") + subject.send(meth, "Message") + end + end + + context "when logging is disabled" do + let(:log) { false } + + it "does not log the message" do + allow(Yast::Popup).to receive(meth) + expect(Yast::Builtins).to_not receive("y2#{level}") + subject.send(meth, "Message") + end + end + end + + shared_examples "display" do |meth| + context "when display of messages is disabled" do + let(:show) { false } + + it "does not show a popup" do + expect(Yast::Popup).to_not receive(meth) + subject.send(meth, "Message") + end + end + + context "when display of messages is enabled" do + it "shows a popup" do + expect(Yast::Popup).to receive(meth) + .with("Message") + subject.send(meth, "Message") + end + end + + shared_examples "timeouts" do + context "when timeouts are enabled" do + let(:timeout) { 1 } + + it "shows a timed popup" do + expect(Yast::Popup).to receive("Timed#{meth}") + .with("Message", 1) + subject.send(meth, "Message") + end + end + end + end + + describe ".LongMessage" do + let(:show) { true } + let(:timeout) { 0 } + let(:log) { true } + + before do + subject.DisplayMessages(show, timeout) + subject.LogMessages(log) + end + + include_examples "logging", :LongMessage, "milestone" + include_examples "display", :LongMessage + include_examples "timeouts", :LongMessage + + it "stores the message" do + subject.LongMessage("Message") + expect(subject.GetMessages(0, 1, 0, 0)).to match(/Message/) + end + end + + describe ".LongWarning" do + let(:show) { true } + let(:timeout) { 0 } + let(:log) { true } + + before do + subject.DisplayWarnings(show, timeout) + subject.LogWarnings(log) + end + + include_examples "logging", :LongWarning, "warning" + include_examples "display", :LongWarning + include_examples "timeouts", :LongWarning + + it "stores the message" do + subject.LongWarning("Message") + expect(subject.GetMessages(0, 1, 0, 0)).to match(/Message/) + end + end + + describe ".LongError" do + let(:show) { true } + let(:timeout) { 0 } + let(:log) { true } + + before do + subject.DisplayErrors(show, timeout) + subject.LogErrors(log) + end + + include_examples "logging", :LongError, "error" + include_examples "display", :LongError + include_examples "timeouts", :LongError + + it "stores the message" do + subject.LongError("Message") + expect(subject.GetMessages(0, 1, 0, 0)).to match(/Message/) + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/network/src/modules/SuSEFirewall.rb new/yast2-3.1.175/library/network/src/modules/SuSEFirewall.rb --- old/yast2-3.1.173/library/network/src/modules/SuSEFirewall.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/network/src/modules/SuSEFirewall.rb 2016-02-24 09:47:58.000000000 +0100 @@ -1454,7 +1454,8 @@ # # @param map <string, any> with configuration def Import(import_settings) - @SETTINGS = deep_copy(import_settings) + Read() + @SETTINGS.merge!(import_settings || {}) @configuration_has_been_read = true SetModified() @@ -2510,14 +2511,7 @@ Progress.NextStage if have_progress - # get default configuration for autoinstallation - # if (Mode::installation() || Mode::autoinst()) { - if Mode.autoinst - ReadDefaultConfiguration() - # read current configuration for another cases - else - ReadCurrentConfiguration() - end + ReadCurrentConfiguration() Progress.NextStage if have_progress @@ -3832,6 +3826,7 @@ publish function: :IsStarted, type: "boolean ()" publish function: :Export, type: "map <string, any> ()" publish function: :Import, type: "void (map <string, any>)" + publish function: :read_and_import, type: "void (map <string, any>)" publish function: :IsInterfaceInZone, type: "boolean (string, string)" publish function: :GetZoneOfInterface, type: "string (string)" publish function: :GetZonesOfInterfaces, type: "list <string> (list <string>)" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/network/test/susefirewall_test.rb new/yast2-3.1.175/library/network/test/susefirewall_test.rb --- old/yast2-3.1.173/library/network/test/susefirewall_test.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/network/test/susefirewall_test.rb 2016-02-24 09:47:58.000000000 +0100 @@ -105,4 +105,101 @@ end end end + + describe "#Read" do + before do + subject.main # Resets module configuration + + allow(Yast::FileUtils).to receive(:Exists) + .with(Yast::SuSEFirewallClass::CONFIG_FILE) + .and_return(package_installed) + allow(subject).to receive(:SuSEFirewallIsInstalled) + .and_return(config_exists) + end + + let(:package_installed) { true } + let(:config_exists) { true } + + context "when package and config file are available" do + it "reads current configuration" do + expect(subject).to receive(:ConvertToServicesDefinedByPackages) + expect(Yast::NetworkInterfaces).to receive(:Read) + expect(subject).to receive(:ReadCurrentConfiguration) + expect(subject.Read).to eq(true) + end + end + + context "when configuration does not exist" do + let(:config_exists) { false } + + it "empties firewall config and returns false" do + expect(subject.Read).to eq(false) + expect(subject.GetStartService).to eq(false) + expect(subject.GetEnableService).to eq(false) + end + end + + context "when the package is not installed" do + let(:package_installed) { false } + + it "empties firewall config and returns false" do + expect(subject.Read).to eq(false) + expect(subject.GetStartService).to eq(false) + expect(subject.GetEnableService).to eq(false) + end + end + + context "when configuration was already read" do + before do + allow(subject).to receive(:ConvertToServicesDefinedByPackages) + allow(Yast::NetworkInterfaces).to receive(:Read) + subject.Read + end + + it "does not read it again" do + expect(Yast::NetworkInterfaces).to_not receive(:Read) + subject.Read + end + end + end + + describe "#Import" do + before { subject.main } + + it "imports given settings" do + subject.Import("start_firewall" => true, "enable_firewall" => false) + expect(subject.GetStartService).to eq(true) + expect(subject.GetEnableService).to eq(false) + end + + context "given a configuration" do + before do + subject.Import("start_firewall" => true, "enable_firewall" => false) + end + + context "when a setting is not given" do + it "leaves that setting untouched" do + subject.Import("enable_firewall" => true) + expect(subject.GetStartService).to eq(true) # Untouched setting + expect(subject.GetEnableService).to eq(true) + end + end + + context "when nil is passed" do + it "leaves settings untouched" do + subject.Import(nil) + expect(subject.GetStartService).to eq(true) + expect(subject.GetEnableService).to eq(false) + end + end + + context "when an empty hash is passed" do + it "leaves settings untouched" do + subject.Import({}) + expect(subject.GetStartService).to eq(true) + expect(subject.GetEnableService).to eq(false) + end + end + end + end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/network/testsuite/tests/SuSEFirewall.out new/yast2-3.1.175/library/network/testsuite/tests/SuSEFirewall.out --- old/yast2-3.1.173/library/network/testsuite/tests/SuSEFirewall.out 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/network/testsuite/tests/SuSEFirewall.out 2016-02-24 09:47:58.000000000 +0100 @@ -12,7 +12,7 @@ Dump Dump == Import/Export == Return nil -Return $["FW_ALLOW_FW_BROADCAST_DMZ":"no", "FW_ALLOW_FW_BROADCAST_EXT":"no", "FW_ALLOW_FW_BROADCAST_INT":"no", "FW_CONFIGURATIONS_DMZ":"aaa-bbb", "FW_CONFIGURATIONS_EXT":"aaa-bbb ab-ab-ab aa-aa-aa bb-bb-bb", "FW_CONFIGURATIONS_INT":"", "FW_DEV_DMZ":"", "FW_DEV_EXT":"eth6 special-string eth8", "FW_DEV_INT":"dsl0", "FW_FORWARD_MASQ":"", "FW_IGNORE_FW_BROADCAST_DMZ":"no", "FW_IGNORE_FW_BROADCAST_EXT":"yes", "FW_IGNORE_FW_BROADCAST_INT":"no", "FW_IPSEC_TRUST":"no", "FW_LOAD_MODULES":"\n\n\n", "FW_LOG_ACCEPT_ALL":"no", "FW_LOG_ACCEPT_CRIT":"yes", "FW_LOG_DROP_ALL":"no", "FW_LOG_DROP_CRIT":"yes", "FW_MASQUERADE":"no", "FW_PROTECT_FROM_INT":"no", "FW_ROUTE":"no", "FW_SERVICES_DMZ_IP":"", "FW_SERVICES_DMZ_RPC":"", "FW_SERVICES_DMZ_TCP":"", "FW_SERVICES_DMZ_UDP":"", "FW_SERVICES_EXT_IP":"", "FW_SERVICES_EXT_RPC":"", "FW_SERVICES_EXT_TCP":"", "FW_SERVICES_EXT_UDP":"", "FW_SERVICES_INT_IP":"", "FW_SERVICES_INT_RPC":"", "FW_SERVICES_INT_TCP":"", "FW_SERVICES_INT_UDP":"", "enable_firewall":false, "start_firewall":false] +Return $["FW_ALLOW_FW_BROADCAST_DMZ":"no", "FW_ALLOW_FW_BROADCAST_EXT":"no", "FW_ALLOW_FW_BROADCAST_INT":"no", "FW_BOOT_FULL_INIT":"no", "FW_CONFIGURATIONS_DMZ":"aaa-bbb", "FW_CONFIGURATIONS_EXT":"aaa-bbb ab-ab-ab aa-aa-aa bb-bb-bb", "FW_CONFIGURATIONS_INT":"", "FW_DEV_DMZ":"", "FW_DEV_EXT":"eth6 special-string eth8", "FW_DEV_INT":"dsl0", "FW_FORWARD_ALWAYS_INOUT_DEV":"", "FW_FORWARD_MASQ":"", "FW_IGNORE_FW_BROADCAST_DMZ":"no", "FW_IGNORE_FW_BROADCAST_EXT":"yes", "FW_IGNORE_FW_BROADCAST_INT":"no", "FW_IPSEC_TRUST":"no", "FW_LOAD_MODULES":"\n\n\n", "FW_LOG_ACCEPT_ALL":"no", "FW_LOG_ACCEPT_CRIT":"yes", "FW_LOG_DROP_ALL":"no", "FW_LOG_DROP_CRIT":"yes", "FW_MASQUERADE":"no", "FW_PROTECT_FROM_INT":"no", "FW_ROUTE":"no", "FW_SERVICES_ACCEPT_DMZ":"", "FW_SERVICES_ACCEPT_EXT":"", "FW_SERVICES_ACCEPT_INT":"", "FW_SERVICES_ACCEPT_RELATED_DMZ":"", "FW_SERVICES_ACCEPT_RELATED_EXT":"", "FW_SERVICES_ACCEPT_RELATED_INT":"", "FW_SERVICES_DMZ_IP":"", "FW_SERVICES_DMZ_RPC":"", "FW_SERVICES_DMZ_TCP":"", "FW_SERVICES_DMZ_UDP":"", "FW_SERVICES_EXT_IP":"", "FW_SERVICES_EXT_RPC":"", "FW_SERVICES_EXT_TCP":"", "FW_SERVICES_EXT_UDP":"", "FW_SERVICES_INT_IP":"", "FW_SERVICES_INT_RPC":"", "FW_SERVICES_INT_TCP":"", "FW_SERVICES_INT_UDP":"", "FW_STOP_KEEP_ROUTING_STATE":"no", "enable_firewall":false, "start_firewall":false] Dump Dump == Firewall behaviour == Return [$["id":"ippp5", "name":"", "type":"dialup", "zone":nil], $["id":"ppp5", "name":"", "type":"dialup", "zone":nil], $["id":"arc5", "name":"", "zone":nil], $["id":"atm5", "name":"", "zone":nil], $["id":"ci5", "name":"", "zone":nil], $["id":"ctc5", "name":"", "zone":nil], $["id":"dummy5", "name":"", "zone":nil], $["id":"escon5", "name":"", "zone":nil], $["id":"eth5", "name":"", "zone":nil], $["id":"eth6", "name":"", "zone":"EXT"], $["id":"eth7", "name":"", "zone":nil], $["id":"eth8", "name":"", "zone":"EXT"], $["id":"eth9", "name":"", "zone":nil], $["id":"fddi5", "name":"", "zone":nil], $["id":"hippi5", "name":"", "zone":nil], $["id":"hsi5", "name":"", "zone":nil], $["id":"iucv5", "name":"", "zone":nil], $["id":"myri5", "name":"", "zone":nil], $["id":"tr5", "name":"", "zone":nil]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/src/Makefile.am new/yast2-3.1.175/library/packages/src/Makefile.am --- old/yast2-3.1.173/library/packages/src/Makefile.am 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/packages/src/Makefile.am 2016-02-24 09:47:58.000000000 +0100 @@ -21,7 +21,10 @@ ylibdir = "${yast2dir}/lib/packages" ylib_DATA = \ - lib/packages/dummy_callbacks.rb + lib/packages/commit_result.rb \ + lib/packages/dummy_callbacks.rb \ + lib/packages/update_message.rb \ + lib/packages/update_messages_view.rb EXTRA_DIST = $(module_DATA) $(ynclude_DATA) $(ylib_DATA) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/src/lib/packages/commit_result.rb new/yast2-3.1.175/library/packages/src/lib/packages/commit_result.rb --- old/yast2-3.1.173/library/packages/src/lib/packages/commit_result.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.175/library/packages/src/lib/packages/commit_result.rb 2016-02-24 09:47:58.000000000 +0100 @@ -0,0 +1,60 @@ +require "packages/update_message" + +module Packages + # Commit results coming from libzypp + class CommitResult + attr_reader :committed, :successful, :failed, :remaining, :srcremaining, :update_messages + + class << self + # Construct an instance taking as input the Pkg.Commit or Pkg.PkgCommit output + # + # Pkg.Commit and Pkg.PkcCommit return an array with the following + # elements: [successful, failed, remaining, srcremaining, update_messages]. + # + # @param result [Array] Result as returned by Pkg.Commit and Pkg.PkgCommit + def from_result(result) + messages = build_update_messages(result[4] || []) + new(result[0], result[1], result[2], result[3], messages) + end + + # Convert an array of hash into an array of UpdateMessage objects + # + # Each hash contains the following keys/values: + # + # * solvable: solvable name (usually package names). + # * text: message text. + # * installationPath: path to the libzypp's file containing the message + # after installation. + # * currentPath: path to the libzypp's file containing the message + # currently. It will differ from installationPath + # when running inst-sys. + # + # @param messages [Array<Hash>] Hash representing a message from libzypp. + # @return [Array<Packager::UpdateMessage>] List of update messages + def build_update_messages(messages) + messages.map do |msg| + Packages::UpdateMessage.new(msg["solvable"], msg["text"], + msg["installationPath"], msg["currentPath"]) + end + end + end + + # Constructor + # + # @param successful [Integer] Number of commited resolvables + # @param failed [Array] List of resolvables with error + # @param remaining [Array] List of remaining resolvables (due to wrong media) + # @param srcremaining [Array] List of kind:source remaining resolvables (due to wrong media) + # @param update_messages [Array<Hash>] List of libzypp update messages. + # Check .build_update_messages for more details. + # + # @see build_update_messages + def initialize(successful, failed, remaining, srcremaining, update_messages) + @successful = successful + @failed = failed || [] + @remaining = remaining || [] + @srcremaining = srcremaining || [] + @update_messages = update_messages || [] + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/src/lib/packages/update_message.rb new/yast2-3.1.175/library/packages/src/lib/packages/update_message.rb --- old/yast2-3.1.173/library/packages/src/lib/packages/update_message.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.175/library/packages/src/lib/packages/update_message.rb 2016-02-24 09:47:58.000000000 +0100 @@ -0,0 +1,17 @@ +# YaST packages module +module Packages + # Represents an update message from libzypp. + # + # + # @see https://doc.opensuse.org/projects/libzypp/HEAD/classzypp_1_1ZYppCommitResult.html#ae6883415d94d4728e3de0dc9c7c58fd5 + # @!attribute [r] solvable + # @return [String] Name of the solvable libzypp element (usually the package's name). + # @!attribute [r] text + # @return [String] Message's text. + # @!attribute [r] installation_path + # @return [String] Path to the file which contains the message in the installed system. + # @!attribute [r] current_path + # @return [String] Path to the file which contains the message in the running system. + # While running inst-sys, it will differ from installation_path. + UpdateMessage = Struct.new(:solvable, :text, :installation_path, :current_path) +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/src/lib/packages/update_messages_view.rb new/yast2-3.1.175/library/packages/src/lib/packages/update_messages_view.rb --- old/yast2-3.1.173/library/packages/src/lib/packages/update_messages_view.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.175/library/packages/src/lib/packages/update_messages_view.rb 2016-02-24 09:47:58.000000000 +0100 @@ -0,0 +1,52 @@ +require "yast" + +module Packages + # This class converts a set of libzypp update messages into string + # representations. + # + # At this time, richtext is the only provided conversion. + class UpdateMessagesView + include Yast::I18n + extend Yast::I18n + + def initialize(messages) + Yast.import "String" + textdomain "base" + @messages = messages + end + + # Convert a list of messages into richtext + # + # @param messages [Array<UpdateMessage>] List of messages + # @return [String] Richtext representation of the list of messages + def richtext + text = "<h1>#{_("Packages notifications")}</h1>\n" \ + "<p>#{_("You have notifications from the following packages:")}</p>" + text << richtext_toc(@messages) if @messages.size > 1 + text << @messages.map { |m| message_to_richtext(m) }.join("<hr>") + end + + private + + # Convert one message to richtext + # + # @return [String] Message converted to richtext + def message_to_richtext(message) + location = format(_("This message will be available at %s"), + Yast::String.EscapeTags(message.installation_path)) + content = message.text.strip.gsub("\n\n", "</p><p>").gsub("\n", "<br>") + + "<h2>#{Yast::String.EscapeTags(message.solvable)}</h2>" \ + "<p><em>#{location}</em></p>" \ + "<p>#{content}</p>" + end + + # Return a richtext list of package names to be used as table of contents + # + # @return [String] List of package names + def richtext_toc(messages) + names = messages.map { |m| Yast::String.EscapeTags(m.solvable) } + "<ul><li>#{names.join("</li>\n<li>")}</li></ul>\n" + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/src/modules/PackageSystem.rb new/yast2-3.1.175/library/packages/src/modules/PackageSystem.rb --- old/yast2-3.1.173/library/packages/src/modules/PackageSystem.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/packages/src/modules/PackageSystem.rb 2016-02-24 09:47:58.000000000 +0100 @@ -243,7 +243,7 @@ any_to_install = Pkg.IsAnyResolvable(:package, :to_install) || Pkg.IsAnyResolvable(:patch, :to_install) - # [int successful, list failed, list remaining, list srcremaining] + # [int successful, list failed, list remaining, list srcremaining, list update_messages] result = Pkg.PkgCommit(0) Builtins.y2debug("PkgCommit: %1", result) if result.nil? || Ops.get_list(result, 1, []) != [] @@ -254,6 +254,8 @@ return false end + PackagesUI.show_update_messages(result) + Builtins.foreach(Ops.get_list(result, 2, [])) do |remaining| if ok == true if Builtins.contains(toinstall, remaining) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/src/modules/PackagesUI.rb new/yast2-3.1.175/library/packages/src/modules/PackagesUI.rb --- old/yast2-3.1.173/library/packages/src/modules/PackagesUI.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/packages/src/modules/PackagesUI.rb 2016-02-24 09:47:58.000000000 +0100 @@ -32,6 +32,8 @@ # $Id$ require "yast" require "cgi" +require "packages/commit_result" +require "packages/update_messages_view" module Yast class PackagesUIClass < Module @@ -45,6 +47,7 @@ Yast.import "HTML" Yast.import "String" Yast.import "Popup" + Yast.import "Report" @package_summary = {} end @@ -774,6 +777,20 @@ ShowInstallationSummaryMap(@package_summary) end + # Show messages coming from libzypp about installed packages + # + # This messages are retrieved from libzypp. + # + # @param [Array] result Result from package commit (as it comes from PkgCommit) + def show_update_messages(result) + return false if result.nil? + commit_result = ::Packages::CommitResult.from_result(result) + return false if commit_result.update_messages.empty? + view = ::Packages::UpdateMessagesView.new(commit_result.update_messages) + Report.LongMessage(view.richtext) + true + end + publish function: :GetPackageSummary, type: "map <string, any> ()" publish function: :SetPackageSummary, type: "void (map <string, any>)" publish function: :ResetPackageSummary, type: "void ()" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/test/Makefile.am new/yast2-3.1.175/library/packages/test/Makefile.am --- old/yast2-3.1.173/library/packages/test/Makefile.am 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/packages/test/Makefile.am 2016-02-24 09:47:58.000000000 +0100 @@ -1,10 +1,12 @@ TESTS = \ + commit_result_test.rb \ dummy_callbacks_test.rb \ package_callbacks_test.rb \ packages_ui_test.rb \ product_test.rb \ signature_check_callbacks_test.rb \ - slide_show_test.rb + slide_show_test.rb \ + update_messages_view_test.rb TEST_EXTENSIONS = .rb RB_LOG_COMPILER = rspec diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/test/commit_result_test.rb new/yast2-3.1.175/library/packages/test/commit_result_test.rb --- old/yast2-3.1.173/library/packages/test/commit_result_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.175/library/packages/test/commit_result_test.rb 2016-02-24 09:47:58.000000000 +0100 @@ -0,0 +1,45 @@ +#!/usr/bin/env rspec + +require_relative "test_helper" +require "packages/update_message" +require "packages/commit_result" + +describe Packages::CommitResult do + let(:message) do + { + "solvable" => "package", + "text" => "Some cool message!", + "installationPath" => "/var/adm/update-messages/package-1.0", + "currentPath" => "/mnt/var/adm/update-messages/package-1.0" + } + end + + let(:old_result) do + [1, ["pkg1"], ["pkg2"], ["pkg3"], [message]] + end + + describe ".from_result" do + it "builds a new instance from Pkg.Commit/Pkg.PkgCommit return value" do + result = Packages::CommitResult.from_result(old_result) + expect(result.successful).to eq(1) + expect(result.failed).to eq(["pkg1"]) + expect(result.remaining).to eq(["pkg2"]) + expect(result.srcremaining).to eq(["pkg3"]) + expect(result.update_messages) + .to eq([Packages::UpdateMessage.new(message["solvable"], message["text"], message["installationPath"], message["currentPath"])]) + end + + context "when result is a failure" do + let(:old_result) { [-1] } + + it "builds a new instance from Pkg.Commit/Pkg.PkgCommit return value" do + result = Packages::CommitResult.from_result(old_result) + expect(result.successful).to eq(-1) + expect(result.failed).to be_empty + expect(result.remaining).to be_empty + expect(result.srcremaining).to be_empty + expect(result.update_messages).to be_empty + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/test/package_system_test.rb new/yast2-3.1.175/library/packages/test/package_system_test.rb --- old/yast2-3.1.173/library/packages/test/package_system_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.175/library/packages/test/package_system_test.rb 2016-02-24 09:47:58.000000000 +0100 @@ -0,0 +1,52 @@ +#!/usr/bin/env rspec + +require_relative "test_helper" + +Yast.import "PackageSystem" +Yast.import "PackagesUI" + +describe "Yast::PackageSystem" do + subject(:system) { Yast::PackageSystem } + + describe "DoInstallAndRemove" do + let(:lock_free) { true } + let(:result) { [1, [], [], [], []] } + + before do + allow(Yast::PackageLock).to receive(:Check).and_return(lock_free) + allow(system).to receive(:EnsureSourceInit) + allow(system).to receive(:EnsureTargetInit) + allow(Yast::Pkg).to receive(:PkgGetLicensesToConfirm).and_return([]) + allow(Yast::Pkg).to receive(:PkgSolve).and_return(true) + allow(system).to receive(:SelectPackages).and_return(true) + allow(Yast::Pkg).to receive(:IsAnyResolvable).with(:package, :to_install).and_return(true) + allow(Yast::Pkg).to receive(:PkgCommit).with(0).and_return(result) + allow(system).to receive(:InstalledAll).and_return(true) + end + + context "when package system is locked" do + let(:lock_free) { false } + + it "returns false" do + expect(system.DoInstallAndRemove(["pkg1"], ["pkg2"])).to eq(false) + end + end + + context "when update messages are received" do + let(:result) { [1, [], [], [], [message]] } + let(:message) do + { + "solvable" => "dummy-package", + "text" => "Some dummy text.", + "installationPath" => "/var/adm/update-message/dummy-package-1.0", + "currentPath" => "/var/adm/update-message/dummy-package-1.0" + } + end + + it "shows the update messages" do + expect(Yast::PackagesUI).to receive(:show_update_messages).with(result) + expect(system.DoInstallAndRemove(["pkg1"], ["pkg2"])).to eq(true) + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/test/packages_ui_test.rb new/yast2-3.1.175/library/packages/test/packages_ui_test.rb --- old/yast2-3.1.173/library/packages/test/packages_ui_test.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/packages/test/packages_ui_test.rb 2016-02-24 09:47:58.000000000 +0100 @@ -1,10 +1,14 @@ #!/usr/bin/env rspec require_relative "test_helper" +require "packages/commit_result" +require "packages/update_message" Yast.import "PackagesUI" describe Yast::PackagesUI do + subject(:packages_ui) { Yast::PackagesUI } + describe "#format_license" do it "returns a preformatted HTML license unchanged" do license = "\n<!-- DT:Rich -->\n<h3>License Confirmation</h3>" @@ -26,4 +30,45 @@ expect(Yast::PackagesUI.format_license(license)).to match(/\A<p>.*<\/p><p>.*<\/p>\z/) end end + + describe "#show_update_messages" do + let(:result) { [1, [], [], [], [message]] } + let(:message) do + { "solvable" => "mariadb", "text" => "message content", + "installationPath" => "/some/path1", "currentPath" => "/some/path2" } + end + + it "opens a popup containing update messages" do + expect(Yast::Report).to receive(:LongMessage) + .with(%r{<h2>mariadb</h2>}) + packages_ui.show_update_messages(result) + end + + context "when no messages exist" do + let(:result) { [0, [], [], [], []] } + + it "does not open a popup" do + expect(Yast::Report).to_not receive(:LongMessage) + packages_ui.show_update_messages(result) + end + end + + context "when commit failed" do + let(:result) { [-1] } + + it "does not open a popup" do + expect(Yast::Report).to_not receive(:LongMessage) + packages_ui.show_update_messages(result) + end + end + + context "when nil is passed" do + let(:result) { nil } + + it "does not open a popup" do + expect(Yast::Report).to_not receive(:LongMessage) + packages_ui.show_update_messages(result) + end + end + end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/packages/test/update_messages_view_test.rb new/yast2-3.1.175/library/packages/test/update_messages_view_test.rb --- old/yast2-3.1.173/library/packages/test/update_messages_view_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.175/library/packages/test/update_messages_view_test.rb 2016-02-24 09:47:58.000000000 +0100 @@ -0,0 +1,22 @@ +#!/usr/bin/env rspec + +require_relative "test_helper" +require "packages/update_message" +require "packages/update_messages_view" + +describe Packages::UpdateMessagesView do + subject(:view) { Packages::UpdateMessagesView.new(messages) } + + let(:messages) do + [ + Packages::UpdateMessage.new("pkg1", "message 1", "/var/adm/path-1", "/var/adm/path-1"), + Packages::UpdateMessage.new("pkg2", "message 2", "/var/adm/path-2", "/var/adm/path-2") + ] + end + + describe "#richtext" do + it "concatenates information of all messages in a richtext string" do + expect(view.richtext).to match(/message 1.*message 2/m) + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/types/src/modules/Hostname.rb new/yast2-3.1.175/library/types/src/modules/Hostname.rb --- old/yast2-3.1.173/library/types/src/modules/Hostname.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/types/src/modules/Hostname.rb 2016-02-24 09:47:58.000000000 +0100 @@ -157,7 +157,7 @@ def CurrentFQ hostname_data = SCR.Execute(path(".target.bash_output"), "hostname --fqdn") - if hostname_data.nil? || hostname_data["exit"] != 0 || invalid_hostname?(hostname_data["stdout"].to_s.strip) + if hostname_data["exit"] != 0 || invalid_hostname?(hostname_data["stdout"].to_s.strip) Builtins.y2warning("Using fallback hostname") fqhostname = SCR.Read(path(".target.string"), "/etc/hostname") || "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/library/types/test/hostname_test.rb new/yast2-3.1.175/library/types/test/hostname_test.rb --- old/yast2-3.1.173/library/types/test/hostname_test.rb 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/library/types/test/hostname_test.rb 2016-02-24 09:47:58.000000000 +0100 @@ -10,30 +10,49 @@ let(:etc_hostname) { "etc.hostname.cz" } let(:cmd_hostname) { "cmd.hostname.cz" } + let(:hostname) { Yast::Hostname } + + def allow_execute_hostname(stdout, code = 0, stderr = "") + ret = { "stdout" => stdout, "stderr" => stderr, "exit" => code } - it "returns output of hostname --fqdn if available" do allow(Yast::SCR) .to receive(:Execute) .with(path(".target.bash_output"), "hostname --fqdn") - .and_return("stdout" => cmd_hostname, "exit" => 0) - - expect(Yast::Hostname.CurrentFQ).to eq cmd_hostname + .and_return(ret) end - it "reads /etc/hostname when hostname --fqdn fails" do - allow(Yast::SCR) - .to receive(:Execute) - .with(path(".target.bash_output"), "hostname --fqdn") - .and_return(nil) + def allow_read_hostname(result) allow(Yast::SCR) .to receive(:Read) .with(path(".target.string"), "/etc/hostname") - .and_return(etc_hostname) + .and_return(result) + end + + it "returns output of hostname --fqdn if available" do + allow_execute_hostname(cmd_hostname) + + expect(hostname.CurrentFQ).to eq cmd_hostname + end + + it "reads /etc/hostname when hostname --fqdn fails" do + allow_execute_hostname("", 1) + allow_read_hostname(etc_hostname) + allow(Yast::FileUtils) .to receive(:Exists) .with("/etc/hostname") .and_return(true) - expect(Yast::Hostname.CurrentFQ).to eq etc_hostname + expect(hostname.CurrentFQ).to eq etc_hostname + end + + it "returns default hostname proposal when generating AY profile at the end of installation" do + Yast.import "Stage" + + allow_execute_hostname("1.1.1.1") # linuxrc sometimes provides IP as hostname + allow_read_hostname("") # linuxrc do not provide /etc/hostname + allow(Yast::Stage).to receive(:initial).and_return(true) # and all this happens only in installer + + expect(hostname.CurrentFQ).to eq "linux.#{hostname.DefaultDomain}" end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/package/yast2.changes new/yast2-3.1.175/package/yast2.changes --- old/yast2-3.1.173/package/yast2.changes 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/package/yast2.changes 2016-02-24 09:47:59.000000000 +0100 @@ -1,4 +1,23 @@ ------------------------------------------------------------------- +Mon Feb 22 05:39:05 UTC 2016 - [email protected] + +- Add support for showing update messages from libzypp + (related to bsc#943805) +- 3.1.175 + +------------------------------------------------------------------- +Thu Feb 5 12:35:38 UTC 2016 - [email protected] + +- SuSEFirewall module reads system configuration during + autoinstallation. It behaves in the same way as + regular installation or normal operation (bsc#963585) +- AutoYaST settings for SuSEFirewall will be merged + with the existing configuration (instead of being fully + overwritten). +- Add a read_and_import method to SuSEFirewall module. +- 3.1.174 + +------------------------------------------------------------------- Fri Feb 5 07:31:35 UTC 2016 - [email protected] - bsc#960040 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.173/package/yast2.spec new/yast2-3.1.175/package/yast2.spec --- old/yast2-3.1.173/package/yast2.spec 2016-02-05 14:56:11.000000000 +0100 +++ new/yast2-3.1.175/package/yast2.spec 2016-02-24 09:47:59.000000000 +0100 @@ -17,7 +17,7 @@ Name: yast2 -Version: 3.1.173 +Version: 3.1.175 Release: 0 Url: https://github.com/yast/yast-yast2
