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)
