Hello community,

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

Package is "yast2-bootloader"

Wed Jun  7 13:08:29 2017 rev:246 rq:499678 version:3.2.20

Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-bootloader/yast2-bootloader.changes        
2017-04-25 08:57:18.894498743 +0200
+++ /work/SRC/openSUSE:Factory/.yast2-bootloader.new/yast2-bootloader.changes   
2017-06-07 13:08:31.930619286 +0200
@@ -1,0 +2,6 @@
+Tue May 30 07:37:01 UTC 2017 - [email protected]
+- Repropose bootloader configuration when storage proposal is
+  modified (bsc#1035746)
+- 3.2.20
+
+-------------------------------------------------------------------

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

New:
----
  yast2-bootloader-3.2.20.tar.bz2

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

Other differences:
------------------
++++++ yast2-bootloader.spec ++++++
--- /var/tmp/diff_new_pack.Rlk70y/_old  2017-06-07 13:08:32.486540838 +0200
+++ /var/tmp/diff_new_pack.Rlk70y/_new  2017-06-07 13:08:32.486540838 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-bootloader
-Version:        3.2.19
+Version:        3.2.20
 Release:        0
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ yast2-bootloader-3.2.19.tar.bz2 -> yast2-bootloader-3.2.20.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-bootloader-3.2.19/package/yast2-bootloader.changes 
new/yast2-bootloader-3.2.20/package/yast2-bootloader.changes
--- old/yast2-bootloader-3.2.19/package/yast2-bootloader.changes        
2017-04-18 09:23:45.220091561 +0200
+++ new/yast2-bootloader-3.2.20/package/yast2-bootloader.changes        
2017-05-30 14:00:40.931263978 +0200
@@ -1,4 +1,10 @@
 -------------------------------------------------------------------
+Tue May 30 07:37:01 UTC 2017 - [email protected]
+- Repropose bootloader configuration when storage proposal is
+  modified (bsc#1035746)
+- 3.2.20
+
+-------------------------------------------------------------------
 Thu Apr 13 13:34:12 UTC 2017 - [email protected]
 
 - Add possibility to use trusted boot for EFI (FATE#315831)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-bootloader-3.2.19/package/yast2-bootloader.spec 
new/yast2-bootloader-3.2.20/package/yast2-bootloader.spec
--- old/yast2-bootloader-3.2.19/package/yast2-bootloader.spec   2017-04-18 
09:23:45.220091561 +0200
+++ new/yast2-bootloader-3.2.20/package/yast2-bootloader.spec   2017-05-30 
14:00:40.931263978 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-bootloader
-Version:        3.2.19
+Version:        3.2.20
 Release:        0
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-bootloader-3.2.19/src/lib/bootloader/proposal_client.rb 
new/yast2-bootloader-3.2.20/src/lib/bootloader/proposal_client.rb
--- old/yast2-bootloader-3.2.19/src/lib/bootloader/proposal_client.rb   
2017-04-18 09:23:45.228091561 +0200
+++ new/yast2-bootloader-3.2.20/src/lib/bootloader/proposal_client.rb   
2017-05-30 14:00:41.119263978 +0200
@@ -35,10 +35,12 @@
 
     def make_proposal(attrs)
       force_reset = attrs["force_reset"]
-      auto_mode = Yast::Mode.autoinst || Yast::Mode.autoupgrade
+      storage_changed = Yast::BootStorage.storage_changed?
+      # redetect disks if cache is invalid as first part
+      Yast::BootStorage.detect_disks if storage_changed
+      log.info "Storage changed: #{storage_changed}"
 
-      if (force_reset || !Yast::Bootloader.proposed_cfg_changed) &&
-          !auto_mode
+      if reset_needed?(force_reset, storage_changed)
         # force re-calculation of bootloader proposal
         # this deletes any internally cached values, a new proposal will
         # not be partially based on old data now any more
@@ -107,6 +109,17 @@
 
   private
 
+    # returns if proposal should be reseted
+    # logic in this condition:
+    # when reset is forced or user do not modify proposal, reset proposal,
+    # but only when not using auto_mode
+    # But if storage changed, always repropose as it can be very wrong.
+    def reset_needed?(force_reset, storage_changed)
+      return true if storage_changed
+      return false if Yast::Mode.autoinst || Yast::Mode.autoupgrade
+      force_reset || !Yast::Bootloader.proposed_cfg_changed
+    end
+
     BOOT_SYSCONFIG_PATH = "/etc/sysconfig/bootloader".freeze
     # read bootloader from /mnt as SCR is not yet switched in proposal
     # phase of update (bnc#874646)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-bootloader-3.2.19/src/modules/BootStorage.rb 
new/yast2-bootloader-3.2.20/src/modules/BootStorage.rb
--- old/yast2-bootloader-3.2.19/src/modules/BootStorage.rb      2017-04-18 
09:23:45.228091561 +0200
+++ new/yast2-bootloader-3.2.20/src/modules/BootStorage.rb      2017-05-30 
14:00:41.191263978 +0200
@@ -48,6 +48,13 @@
       # list <string> includes physical disks used for md raid
 
       @md_physical_disks = []
+
+      # Timestamp to recognize if cached values are still valid
+      @storage_timestamp = nil
+    end
+
+    def storage_changed?
+      @storage_timestamp != Storage.GetTargetChangeTime
     end
 
     def gpt_boot_disk?
@@ -175,7 +182,8 @@
 
     # Sets properly boot, root and mbr disk.
     def detect_disks
-      return unless @RootPartitionDevice.empty? # quit if already detected
+      # Use cached value if already detected and cache still valid
+      return if [email protected]? && !storage_changed?
       # While calling "yast clone_system" and while cloning bootloader
       # in the AutoYaST module, libStorage has to be set to "normal"
       # mode in order to read mountpoints correctly.
@@ -210,6 +218,8 @@
 
       @mbr_disk = find_mbr_disk
 
+      @storage_timestamp = Storage.GetTargetChangeTime
+
       Mode.SetMode(old_mode) if old_mode == "autoinst_config"
     end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-bootloader-3.2.19/test/boot_storage_test.rb 
new/yast2-bootloader-3.2.20/test/boot_storage_test.rb
--- old/yast2-bootloader-3.2.19/test/boot_storage_test.rb       2017-04-18 
09:23:45.228091561 +0200
+++ new/yast2-bootloader-3.2.20/test/boot_storage_test.rb       2017-05-30 
14:00:41.203263978 +0200
@@ -89,6 +89,18 @@
 
       expect(subject.mbr_disk).to eq "/dev/vda"
     end
+
+    it "skips cache if storage gets changed" do
+      subject.RootPartitionDevice = "/dev/sda1"
+      subject.BootPartitionDevice = "/dev/sda2"
+      subject.mbr_disk = "/dev/sda"
+
+      allow(Yast::Storage).to 
receive(:GetTargetChangeTime).and_return(Time.now.to_i)
+
+      subject.detect_disks
+
+      expect(subject.RootPartitionDevice).to eq "/dev/vda1"
+    end
   end
 
   describe ".available_swap_partitions" do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-bootloader-3.2.19/test/bootloader_proposal_client_test.rb 
new/yast2-bootloader-3.2.20/test/bootloader_proposal_client_test.rb
--- old/yast2-bootloader-3.2.19/test/bootloader_proposal_client_test.rb 
2017-04-18 09:23:45.232091561 +0200
+++ new/yast2-bootloader-3.2.20/test/bootloader_proposal_client_test.rb 
2017-05-30 14:00:41.323263978 +0200
@@ -11,6 +11,7 @@
     mock_disk_partition
     allow(Yast::BootStorage).to receive(:mbr_disk).and_return("/dev/sda")
     allow(Yast::BootStorage).to 
receive(:BootPartitionDevice).and_return("/dev/sda1")
+    allow(Yast::BootStorage).to receive(:storage_changed?).and_return(false)
     allow(Yast::Storage).to receive(:GetTargetMap).and_return({})
 
     allow_any_instance_of(::Bootloader::Stage1).to(
@@ -199,6 +200,13 @@
       expect(subject.make_proposal({})).to eq("raw_proposal" => ["do not 
change"])
     end
 
+    it "always resets if storage changed" do
+      expect(Yast::Bootloader).to receive(:Reset)
+      expect(Yast::BootStorage).to receive(:storage_changed?).and_return(true)
+
+      subject.make_proposal("force_reset" => true)
+    end
+
     it "resets configuration if not automode and force_reset passed" do
       expect(Yast::Bootloader).to receive(:Reset)
 


Reply via email to