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
 


Reply via email to