Hello community,
here is the log from the commit of package yast2-installation for
openSUSE:Factory checked in at 2016-08-31 00:03:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-installation (Old)
and /work/SRC/openSUSE:Factory/.yast2-installation.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-installation"
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-installation/yast2-installation.changes
2016-08-22 10:48:15.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.yast2-installation.new/yast2-installation.changes
2016-08-31 00:03:02.000000000 +0200
@@ -1,0 +2,26 @@
+Thu Aug 25 14:23:20 UTC 2016 - [email protected]
+
+- Move the installer self update step earlier in the workflow
+ so the user entered values are not lost after restart and avoid
+ repeating some steps again (bsc#985055)
+- This also fixes losing some values due to restaring YaST (bsc#993690),
+ (bsc#992608)
+- Improved the self update URL handling - the boot parameter has
+ the highest priority, always ask user when a SLP service is found,
+ in AutoYaST mode SLP needs to be enabled in the profile
+- Display progress when downloading and applying the updates
+- 3.1.213
+
+-------------------------------------------------------------------
+Wed Aug 25 12:51:45 UTC 2016 - [email protected]
+
+- Replace unicode bullet char by asterisk for ncurses (bsc#995082)
+- 3.1.212
+
+-------------------------------------------------------------------
+Thu Aug 25 07:33:10 UTC 2016 - [email protected]
+
+- fix writing proposals (bnc#994127)
+- 3.1.211
+
+-------------------------------------------------------------------
Old:
----
yast2-installation-3.1.210.tar.bz2
New:
----
yast2-installation-3.1.213.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-installation.spec ++++++
--- /var/tmp/diff_new_pack.y1Ti69/_old 2016-08-31 00:03:03.000000000 +0200
+++ /var/tmp/diff_new_pack.y1Ti69/_new 2016-08-31 00:03:03.000000000 +0200
@@ -17,7 +17,7 @@
Name: yast2-installation
-Version: 3.1.210
+Version: 3.1.213
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -66,8 +66,8 @@
# Lazy loading in ProductLicense
Requires: yast2-packager >= 3.1.113
-# Yast::Storage.multipath_off?
-Requires: yast2-storage >= 3.1.97
+# Storage::GetDetectedDiskPaths
+Requires: yast2-storage >= 2.24.1
# use in startup scripts
Requires: initviocons
++++++ yast2-installation-3.1.210.tar.bz2 -> yast2-installation-3.1.213.tar.bz2
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/yast2-installation-3.1.210/doc/SELF_UPDATE.md
new/yast2-installation-3.1.213/doc/SELF_UPDATE.md
--- old/yast2-installation-3.1.210/doc/SELF_UPDATE.md 2016-08-19
16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/doc/SELF_UPDATE.md 2016-08-30
14:17:36.000000000 +0200
@@ -21,6 +21,18 @@
3. The update will be applied to the installation system.
4. YaST will be restarted and the installation will be resumed.
+### Language Selection
+
+The self-update step is executed before selecting the language
+(`inst_complex_welcome` client). That means the self-update progress and
+the errors which happens during the self-update process are by default
displayed
+in English.
+
+To use another language also for the self-update press `F2` in the DVD boot
menu
+and select the language from the list. Or use the `language` boot option, e.g.
+`language=de_DE`.
+
+
## Update Format
YaST will use RPM packages stored in a rpm-md repository, although they are
@@ -46,11 +58,15 @@
```
3. Registration server (SCC/SMT), not available in openSUSE. The URL of the
registration server which should be used is determined via:
- 1. AutoYaST profile ([reg_server
element](https://www.suse.com/documentation/sles-12/singlehtml/book_autoyast/book_autoyast.html#CreateProfile.Register)).
- 2. The `regurl` boot parameter
+ 1. The `regurl` boot parameter
+ 2. AutoYaST profile ([reg_server
element](https://www.suse.com/documentation/sles-12/singlehtml/book_autoyast/book_autoyast.html#CreateProfile.Register)).
3. SLP lookup (this behavior applies to regular and AutoYaST installations):
- * If one server is found, it will be used automatically.
- * If more than one server is found, it will ask the user to choose one.
+ * If at least one server is found it will ask the user to choose one.
+ * In AutoYaST mode SLP is skipped unless enabled in the profile in the
+ registration section (see
[documentation](https://www.suse.com/documentation/sles-12/singlehtml/book_autoyast/book_autoyast.html#idm140139881100304)).
+ AutoYaST expects that only one server is reported by SLP, if more
+ servers are found it is considered as an error and user interaction is
+ required just like in manual installation.
4. Default SUSE Customer Center API (`https://scc.suse.com/`).
4. Hard-coded in the `control.xml` file on the installation medium (thus it
depends on the base product):
@@ -63,7 +79,7 @@
The first suitable URL will be used. There are two exceptions:
-* Of course, if no update URL is found then the self update is skipped.
+* Of course, if no update URL is found then the self-update is skipped.
* If SCC/SMT provides multiple URLs, they will be all used.
The URL can contain a variable `$arch` that will be replaced by the system's
@@ -93,6 +109,14 @@
correct (or is missing), the user will be asked whether she/he wants to apply
the update (although it's a security risk).
+When using AutoYaST, this behavior can be modified including the
+[/general/signature-handling](https://www.suse.com/documentation/sles-12/singlehtml/book_autoyast/book_autoyast.html#idm140139881381840)
+section in the profile.
+
+On the other hand, if SLP discovery is enabled, a popup is displayed to choose
the
+server to use. SLP by default does not use any authentication, everybody on the
+local network can announce a registration server.
+
## Self-update and User Updates
Changes introduced by the user via Driver Updates (`dud` boot option) will take
@@ -103,14 +127,19 @@
## Resume installation
-Any client called before the self update step is responsible to remember its
state (if
+Any client called before the self-update step is responsible to remember its
state (if
needed) and automatically going to the next dialog after the YaST restart.
-Once the self update step is reached again it will remove the restarting flag.
+Once the self-update step is reached again it will remove the restarting flag.
+
+The self-update step is called very early in the workflow, for the self-update
+step only configured network is needed. That is configured either by `linuxrc`
+or by the `setup_dhcp` YaST client which does not need to remember any state.
+
+## Supported URL Schemes
-Currently there is no API available for remembering the client states. The
easiest
-way is to store the configuration into an YAML file and load it when
restarting the
-installer. See the
[example](https://github.com/yast/yast-installation/pull/367/files#diff-4c91d6424e08c9bef9237f7d959fc0c2R48)
-in the `inst_complex_welcome` client.
+Currently only HTTP/HTTPS and FTP URL schemes are supported for downloading
+the updates. Some additional schemes might work but are not tested and
therefore
+not supported.
## Error handling
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/package/yast2-installation.changes
new/yast2-installation-3.1.213/package/yast2-installation.changes
--- old/yast2-installation-3.1.210/package/yast2-installation.changes
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/package/yast2-installation.changes
2016-08-30 14:17:36.000000000 +0200
@@ -1,4 +1,30 @@
-------------------------------------------------------------------
+Thu Aug 25 14:23:20 UTC 2016 - [email protected]
+
+- Move the installer self update step earlier in the workflow
+ so the user entered values are not lost after restart and avoid
+ repeating some steps again (bsc#985055)
+- This also fixes losing some values due to restaring YaST (bsc#993690),
+ (bsc#992608)
+- Improved the self update URL handling - the boot parameter has
+ the highest priority, always ask user when a SLP service is found,
+ in AutoYaST mode SLP needs to be enabled in the profile
+- Display progress when downloading and applying the updates
+- 3.1.213
+
+-------------------------------------------------------------------
+Wed Aug 25 12:51:45 UTC 2016 - [email protected]
+
+- Replace unicode bullet char by asterisk for ncurses (bsc#995082)
+- 3.1.212
+
+-------------------------------------------------------------------
+Thu Aug 25 07:33:10 UTC 2016 - [email protected]
+
+- fix writing proposals (bnc#994127)
+- 3.1.211
+
+-------------------------------------------------------------------
Wed Aug 17 15:02:02 UTC 2016 - [email protected]
- filter out same repositories from extraurls if they differ only
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/package/yast2-installation.spec
new/yast2-installation-3.1.213/package/yast2-installation.spec
--- old/yast2-installation-3.1.210/package/yast2-installation.spec
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/package/yast2-installation.spec
2016-08-30 14:17:36.000000000 +0200
@@ -17,7 +17,7 @@
Name: yast2-installation
-Version: 3.1.210
+Version: 3.1.213
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -63,8 +63,8 @@
# Lazy loading in ProductLicense
Requires: yast2-packager >= 3.1.113
-# Yast::Storage.multipath_off?
-Requires: yast2-storage >= 3.1.97
+# Storage::GetDetectedDiskPaths
+Requires: yast2-storage >= 2.24.1
# use in startup scripts
Requires: initviocons
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/src/lib/installation/clients/inst_complex_welcome.rb
new/yast2-installation-3.1.213/src/lib/installation/clients/inst_complex_welcome.rb
---
old/yast2-installation-3.1.210/src/lib/installation/clients/inst_complex_welcome.rb
2016-08-19 16:32:01.000000000 +0200
+++
new/yast2-installation-3.1.213/src/lib/installation/clients/inst_complex_welcome.rb
2016-08-30 14:17:36.000000000 +0200
@@ -45,10 +45,6 @@
@license_id = Ops.get(Pkg.SourceGetCurrent(true), 0, 0)
# ------------------------------------- main part of the client
-----------
- if Installation.restarting? && data_stored?
- apply_data
- return :next
- end
@argmap = GetInstArgs.argmap
@@ -127,8 +123,6 @@
setup_final_choice
- store_data
-
return :next
when :show_fulscreen_license
UI.OpenDialog(all_licenses_dialog)
@@ -383,35 +377,6 @@
log.info "Language: '#{@language}', system encoding '#{WFM.GetEncoding}'"
end
- DATA_PATH = "/var/lib/YaST2/complex_welcome_store.yaml".freeze
-
- def data_stored?
- ::File.exist?(DATA_PATH)
- end
-
- def store_data
- data = {
- "language" => @language,
- "keyboard" => @keyboard,
- "license_accepted" => InstData.product_license_accepted
- }
-
- File.write(DATA_PATH, data.to_yaml)
- end
-
- def apply_data
- data = YAML.load(File.read(DATA_PATH))
- @language = data["language"]
- @keyboard = data["keyboard"]
- InstData.product_license_accepted = data["license_accepted"]
- ProductLicense.info_seen!(@license_id)
-
- change_language
- setup_final_choice
-
- ::FileUtils.rm_rf(DATA_PATH)
- end
-
def text_mode?
return @text_mode unless @text_mode.nil?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/src/lib/installation/clients/inst_disks_activate.rb
new/yast2-installation-3.1.213/src/lib/installation/clients/inst_disks_activate.rb
---
old/yast2-installation-3.1.210/src/lib/installation/clients/inst_disks_activate.rb
2016-08-19 16:32:01.000000000 +0200
+++
new/yast2-installation-3.1.213/src/lib/installation/clients/inst_disks_activate.rb
2016-08-30 14:17:36.000000000 +0200
@@ -58,8 +58,6 @@
@have_zfcp = false
@want_fcoe = false
- return :next if Installation.restarting?
-
if Arch.s390
# popup label
UI.OpenDialog(Label(_("Detecting Available Controllers")))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/src/lib/installation/clients/inst_system_analysis.rb
new/yast2-installation-3.1.213/src/lib/installation/clients/inst_system_analysis.rb
---
old/yast2-installation-3.1.210/src/lib/installation/clients/inst_system_analysis.rb
2016-08-19 16:32:01.000000000 +0200
+++
new/yast2-installation-3.1.213/src/lib/installation/clients/inst_system_analysis.rb
2016-08-30 14:17:36.000000000 +0200
@@ -26,19 +26,15 @@
# Lukas Ocilka <[email protected]>
require "yast"
-require "fileutils"
module Yast
class InstSystemAnalysisClient < Client
- include Yast::Logger
-
def main
Yast.import "UI"
textdomain "installation"
Yast.import "Arch"
- Yast.import "Directory"
Yast.import "GetInstArgs"
Yast.import "Hotplug"
Yast.import "InstData"
@@ -60,8 +56,6 @@
Yast.include self, "packager/storage_include.rb"
Yast.include self, "packager/load_release_notes.rb"
- @multipath_off_file = File.join(Directory.vardir, "multipath_off")
-
if Mode.autoupgrade
Report.Import(
@@ -150,9 +144,6 @@
_("YaST is probing computer hardware and installed systems now.")
)
- # bug#989770
- Storage.SetMultipathStartup(false) if persisted_multipath_off?
-
actions_functions.each do |run_function|
Progress.NextStage
# Bugzilla #298049
@@ -174,12 +165,6 @@
end
Installation.probing_done = true
- # bug#989770
- if Storage.multipath_off?
- log.info "The user decided to not activate multipath"
- persist_multipath_off
- end
-
# the last step is hidden
return :abort if ProductProfile.CheckCompliance(nil) == false
@@ -370,22 +355,5 @@
true
end
-
- protected
-
- # Sets a mark for the installer (in case it's executed again due to
- # self-update) to disable multipath without asking the user
- def persist_multipath_off
- log.info "Multipath activation pop-up will be skipped if installer
restarts"
- ::FileUtils.touch(@multipath_off_file)
- end
-
- # Checks if #persist_multipath_off was called in the previous execution of
- # the installer. @see #persist_multipath_off
- #
- # @return [Boolean]
- def persisted_multipath_off?
- ::File.exist?(@multipath_off_file)
- end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/src/lib/installation/clients/inst_update_installer.rb
new/yast2-installation-3.1.213/src/lib/installation/clients/inst_update_installer.rb
---
old/yast2-installation-3.1.210/src/lib/installation/clients/inst_update_installer.rb
2016-08-19 16:32:01.000000000 +0200
+++
new/yast2-installation-3.1.213/src/lib/installation/clients/inst_update_installer.rb
2016-08-30 14:17:36.000000000 +0200
@@ -24,9 +24,14 @@
UPDATED_FLAG_FILENAME = "installer_updated".freeze
REMOTE_SCHEMES = ["http", "https", "ftp", "tftp", "sftp", "nfs", "nfs4",
"cifs", "smb"].freeze
+ PROFILE_FORBIDDEN_SCHEMES = ["label"].freeze
REGISTRATION_DATA_PATH = "/var/lib/YaST2/inst_update_installer.yaml".freeze
Yast.import "Pkg"
+ Yast.import "Packages"
+ Yast.import "PackageCallbacks"
+ Yast.import "InstURL"
+ Yast.import "Language"
Yast.import "GetInstArgs"
Yast.import "Directory"
Yast.import "Installation"
@@ -38,6 +43,9 @@
Yast.import "NetworkService"
Yast.import "Mode"
Yast.import "Profile"
+ Yast.import "ProfileLocation"
+ Yast.import "AutoinstConfig"
+ Yast.import "AutoinstGeneral"
def main
textdomain "installation"
@@ -49,16 +57,38 @@
Installation.finish_restarting!
end
+ # shortcut - already updated or disabled via boot option
+ if installer_updated? || disabled_in_linuxrc?
+ log.info "Self update not needed, skipping"
+ return :next
+ end
+
+ initialize_progress
+
+ if Mode.auto
+ process_profile
+ Yast::Progress.NextStage
+ end
+
+ initialize_packager
+
+ # self update disabled or not possible
return :next unless try_to_update?
log.info("Trying installer update")
+ installer_updated = update_installer
- if update_installer
- ::FileUtils.touch(update_flag_file) # Indicates that the installer was
updated.
+ if installer_updated
+ # Indicates that the installer was updated.
+ ::FileUtils.touch(update_flag_file)
+ Yast::Progress.NextStage
Installation.restart!
else
:next
end
+ ensure
+ finish_packager
+ finish_progress
end
# Tries to update the installer
@@ -80,6 +110,7 @@
if updated
log.info("Applying installer updates")
+ Yast::Progress.NextStage
updates_manager.apply_all
end
updated
@@ -103,7 +134,7 @@
#
# @return [Boolean] True if it's enabled; false otherwise.
def self_update_enabled?
- if Linuxrc.InstallInf("SelfUpdate") == "0" # disabled via Linuxrc
+ if disabled_in_linuxrc?
log.info("self-update was disabled through Linuxrc")
false
else
@@ -111,6 +142,13 @@
end
end
+ # disabled via Linuxrc ?
+ # @return [Boolean] true if self update has been disabled by
"self_update=0"
+ # boot option
+ def disabled_in_linuxrc?
+ Linuxrc.InstallInf("SelfUpdate") == "0"
+ end
+
# Return the self-update URLs
#
# @return [Array<URI>] self-update URLs
@@ -132,6 +170,9 @@
# @return [Array<URI>] self-update URLs
def default_self_update_urls
return @default_self_update_urls if @default_self_update_urls
+ # load the base product from the installation medium,
+ # the registration server needs it for evaluating the self update URL
+ add_installation_repo
@default_self_update_urls = self_update_url_from_connect
return @default_self_update_urls unless @default_self_update_urls.empty?
@default_self_update_urls = Array(self_update_url_from_control)
@@ -176,27 +217,42 @@
#
# Determined in the following order:
#
- # * via AutoYaST profile
- # * regurl boot parameter
+ # * "regurl" boot parameter
+ # * From AutoYaST profile
# * SLP look up
- # * If there's only 1 SMT server, it will be chosen automatically.
- # * If there's more than 1 SMT server, it will ask the user to choose one
+ # * In AutoYaST mode the SLP needs to be explicitly enabled in the
profile,
+ # if the scan finds *exactly* one SLP service then it is used. If more
+ # than one service is found then an interactive popup is displayed.
+ # (This breaks the AY unattended concept but basically more services
+ # is treated as an error, AytoYaST cannot know which one to use.)
+ # * In non-AutoYaST mode it will ask the user to choose the found SLP
+ # servise or the SCC default.
+ # * Fallbacks to SCC if no SLP service is found.
#
# @return [URI,:scc,:cancel] Registration URL; :scc if SCC server was
selected;
# :cancel if dialog was dismissed.
#
- # @see #registration_server_from_user
+ # @see #registration_service_from_user
def registration_url
- url = registration_url_from_profile ||
::Registration::UrlHelpers.boot_reg_url
+ url = ::Registration::UrlHelpers.boot_reg_url ||
registration_url_from_profile
return URI(url) if url
+
+ # do the SLP scan in AutoYast mode only when allowed in the profile
+ return :scc if Mode.auto && registration_profile["slp_discovery"] != true
+
services = ::Registration::UrlHelpers.slp_discovery
+ log.info "SLP discovery result: #{services.inspect}"
return :scc if services.empty?
+
service =
- if services.size > 1
- registration_service_from_user(services)
- else
+ if Mode.auto && services.size == 1
services.first
+ else
+ registration_service_from_user(services)
end
+
+ log.info "Selected SLP service: #{service.inspect}"
+
return service unless service.respond_to?(:slp_url)
URI(::Registration::UrlHelpers.service_url(service.slp_url))
end
@@ -208,9 +264,15 @@
def registration_url_from_profile
return nil unless Mode.auto
+ get_url_from(registration_profile["reg_server"])
+ end
+
+ # return the registration settings from the loaded AutoYaST profile
+ # @return [Hash] the current settings, returns empty Hash if the
+ # registration section is missing in the profile
+ def registration_profile
profile = Yast::Profile.current
- profile_url = profile.fetch("suse_register", {})["reg_server"]
- get_url_from(profile_url)
+ profile.fetch("suse_register", {})
end
# Ask the user to chose a registration server
@@ -434,5 +496,188 @@
Yast::Profile.current.fetch("suse_register", {})
)
end
+
+ # Initialize the package management so we can download the updates from
+ # the update repository.
+ def initialize_packager
+ return if @packager_initialized
+ log.info "Initializing the package management..."
+
+ # Add the initial installation repository.
+ # Unfortunately the Packages.InitializeCatalogs call cannot be used here
+ # as is does too much (adds y2update.tgz, selects the product, selects
+ # the default patterns, looks for the addon product files...).
+
+ # initialize package callbacks to show a progress while downloading the
files
+ PackageCallbacks.InitPackageCallbacks
+
+ # set the language for the package manager (mainly error messages)
+ Pkg.SetTextLocale(Language.language)
+
+ # set the target to inst-sys otherwise libzypp complains in the GPG check
+ Pkg.TargetInitialize("/")
+
+ # load the GPG keys (*.gpg files) from inst-sys
+ Packages.ImportGPGKeys
+
+ @packager_initialized = true
+ end
+
+ def add_installation_repo
+ base_url = InstURL.installInf2Url("")
+ initial_repository = Pkg.SourceCreateBase(base_url, "")
+
+ until initial_repository
+ log.error "Adding the installation repository failed"
+ # ask user to retry
+ base_url = Packages.UpdateSourceURL(base_url)
+
+ # aborted by user
+ return false if base_url == ""
+
+ initial_repository = Pkg.SourceCreateBase(base_url, "")
+ end
+ end
+
+ # delete all added installation repositories
+ # to make sure there is no leftover which could affect the installation
later
+ def finish_packager
+ return unless @packager_initialized
+ # false = all repositories, even the disabled ones
+ Pkg.SourceGetCurrent(false).each { |r| Pkg.SourceDelete(r) }
+ Pkg.SourceSaveAll
+ Pkg.SourceFinishAll
+ Pkg.TargetFinish
+ end
+
+ # Show global self update progress
+ def initialize_progress
+ stages = [
+ # TRANSLATORS: progress label
+ _("Add Update Repository"),
+ _("Download the Packages"),
+ _("Apply the Packages"),
+ _("Restart")
+ ]
+
+ stages.unshift(_("Fetching AutoYast Profile")) if Mode.auto
+
+ # open a new wizard dialog with title on the top
+ # (the default dialog with title on the left looks ugly with the
+ # Progress dialog)
+ Yast::Wizard.CreateDialog
+ @wizard_open = true
+
+ Yast::Progress.New(
+ # TRANSLATORS: dialog title
+ _("Updating the Installer..."),
+ # TRANSLATORS: progress title
+ _("Updating the Installer..."),
+ # max is 100%
+ 100,
+ # stages
+ stages,
+ # steps
+ [],
+ # help text
+ ""
+ )
+
+ # mark the first stage active
+ Yast::Progress.NextStage
+ end
+
+ # Finish the self update progress
+ def finish_progress
+ return unless @wizard_open
+
+ Yast::Progress.Finish
+ Yast::Wizard.CloseDialog
+ end
+
+ private
+
+ #
+ # TODO: Most of the code responsable of process the profile has been
+ # obtained from which inst_autoinit client in yast2-autoinstallation.
+ # We should try to move it to a independent class or to Yast::Profile.
+ #
+
+ # @return [Boolean] true if the scheme is not forbidden
+ def profile_valid_scheme?
+ !PROFILE_FORBIDDEN_SCHEMES.include? AutoinstConfig.scheme
+ end
+
+ # Obtains the current profile
+ #
+ # @return [Hash, nil] current profile if not empty; nil otherwise
+ #
+ # @see Yast::Profile.current
+ def current_profile
+ return nil if Profile.current == {}
+
+ Profile.current
+ end
+
+ # Fetch the profile from the given URI
+ #
+ # @return [Hash, nil] current profile if fetched or exists; nil otherwise
+ #
+ # @see Yast::Profile.current
+ def fetch_profile
+ return current_profile if current_profile
+
+ if !profile_valid_scheme?
+ Report.Warning("The scheme used (#{AutoinstConfig.scheme}), " \
+ "is not supported in self update.")
+ return nil
+ end
+
+ process_location
+
+ if !current_profile
+ secure_uri = Yast::URL.HidePassword(AutoinstConfig.OriginalURI)
+ log.info("Unable to load the profile from: #{secure_uri}")
+
+ return nil
+ end
+
+ if !Profile.ReadXML(AutoinstConfig.xml_tmpfile)
+ Report.Warning(_("Error while parsing the control file.\n\n"))
+ return nil
+ end
+
+ current_profile
+ end
+
+ # Imports Report settings from the current profile
+ def profile_prepare_reports
+ report = Profile.current["report"]
+ Report.Import(report)
+ end
+
+ # Imports general settings from the profile and set signature callbacks
+ def profile_prepare_signatures
+ AutoinstGeneral.Import(Profile.current.fetch("general", {}))
+ AutoinstGeneral.SetSignatureHandling
+ end
+
+ # Fetch profile and prepare reports and signature callbas in case of
+ # obtained a valid one.
+ def process_profile
+ log.info("Fetching the profile")
+ return false if !fetch_profile
+
+ profile_prepare_reports
+ profile_prepare_signatures
+ end
+
+ # It retrieves the profile and the user rules from the given location
+ #
+ # @see ProfileLocation.Process
+ def process_location
+ log.info("Processing profile location...")
+ ProfileLocation.Process
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/src/lib/installation/proposal_runner.rb
new/yast2-installation-3.1.213/src/lib/installation/proposal_runner.rb
--- old/yast2-installation-3.1.210/src/lib/installation/proposal_runner.rb
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/src/lib/installation/proposal_runner.rb
2016-08-30 14:17:36.000000000 +0200
@@ -261,7 +261,9 @@
def pre_continue_handling
@skip = if Yast::UI.WidgetExists(Id(:skip))
- Yast::UI.QueryWidget(Id(:skip), :Value)
+ val = Yast::UI.QueryWidget(Id(:skip), :Value)
+ log.info "there is :skip widget with value #{val.inspect}."
+ val
else
true
end
@@ -510,7 +512,9 @@
def write_settings
success = true
- @store.proposal_names do |submod|
+ log.info "Writting settings for proposal"
+
+ @store.proposal_names.each do |submod|
submod_success = submod_write_settings(submod)
submod_success = true if submod_success.nil?
log.error "Write() failed for submodule #{submod}" unless
submod_success
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/src/lib/installation/proposal_store.rb
new/yast2-installation-3.1.213/src/lib/installation/proposal_store.rb
--- old/yast2-installation-3.1.210/src/lib/installation/proposal_store.rb
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/src/lib/installation/proposal_store.rb
2016-08-30 14:17:36.000000000 +0200
@@ -100,11 +100,14 @@
return @can_skip unless @can_skip.nil?
@can_skip = if properties.key?("enable_skip")
+ log.info "properties skip available
#{properties["enable_skip"].inspect}."
properties["enable_skip"] == "yes"
else
!["initial", "uml"].include?(@proposal_mode)
end
+ log.info "can skip set to #{@can_skip.inspect}."
+
@can_skip
end
@@ -390,11 +393,17 @@
end
def properties
- @proposal_properties ||= Yast::ProductControl.getProposalProperties(
+ return @proposal_properties unless @proposal_properties.nil?
+
+ @proposal_properties = Yast::ProductControl.getProposalProperties(
Yast::Stage.stage,
Yast::Mode.mode,
@proposal_mode
)
+
+ log.info "Properties #{@proposal_properties.inspect}"
+
+ @proposal_properties
end
def make_proposal(client, force_reset: false, language_changed: false,
callback: proc {})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/src/lib/installation/select_system_role.rb
new/yast2-installation-3.1.213/src/lib/installation/select_system_role.rb
--- old/yast2-installation-3.1.210/src/lib/installation/select_system_role.rb
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/src/lib/installation/select_system_role.rb
2016-08-30 14:17:36.000000000 +0200
@@ -1,3 +1,4 @@
+# coding: utf-8
# Copyright (c) 2016 SUSE LLC.
# All Rights Reserved.
@@ -94,10 +95,12 @@
def role_buttons
ui_roles = role_attributes.each_with_object(VBox()) do |r, vbox|
+ # bsc#995082: System role descriptions use a character that is missing
in console font
+ description = Yast::UI.TextMode ? r[:description].tr("•", "*") :
r[:description]
vbox << Left(RadioButton(Id(r[:id]), r[:label]))
vbox << HBox(
HSpacing(Yast::UI.TextMode ? 4 : 2),
- Left(Label(r[:description]))
+ Left(Label(description))
)
vbox << VSpacing(2)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/src/lib/installation/update_repository.rb
new/yast2-installation-3.1.213/src/lib/installation/update_repository.rb
--- old/yast2-installation-3.1.210/src/lib/installation/update_repository.rb
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/src/lib/installation/update_repository.rb
2016-08-30 14:17:36.000000000 +0200
@@ -39,6 +39,7 @@
# end
class UpdateRepository
include Yast::Logger
+ include Yast::I18n
# @return [URI] URI of the repository
attr_reader :uri
@@ -96,6 +97,9 @@
# @param instsys_parts_path [Pathname] Path to instsys.parts registry
def initialize(uri, instsys_parts_path = Pathname("/etc/instsys.parts"))
Yast.import "Pkg"
+ Yast.import "Progress"
+
+ textdomain "installation"
@uri = uri
@repo_id = add_repo
@@ -129,6 +133,9 @@
# If a known error occurs, it will be converted to a CouldNotFetchUpdate
# exception.
#
+ # A progress is displayed when the packages are downloaded.
+ # The progress can be disabled by calling `Yast::Progress.set(false)`.
+ #
# @param path [Pathname] Directory to store the updates
# @return [Pathname] Paths to the updates
#
@@ -138,7 +145,10 @@
#
# @raise CouldNotFetchUpdate
def fetch(path = Pathname("/download"))
- packages.each_with_object(update_files) do |package, files|
+ init_progress
+
+ packages.each_with_object(update_files).with_index do |(package, files),
index|
+ update_progress(100 * index / packages.size)
files << fetch_package(package, path)
end
rescue PackageNotFound, CouldNotExtractPackage, CouldNotSquashPackage => e
@@ -166,6 +176,15 @@
# * Mount the squashfs filesystem
# * Add files/directories to inst-sys using the /etc/adddir script
#
+ # @note The current implementation creates one squashfs image per package
+ # and mounting a squashfs image consumes one loop device (/dev/loop*).
+ # Inst-sys has by default 64 loop devices, but some of them already used,
+ # in an extreme case we might run out of loop devices.
+ #
+ # On the other hand downloading and unpacking all packages at once might
+ # require a lot of memory, the installer could crash on a system with
+ # small memory.
+ #
# @param mount_path [Pathname] Directory to mount the update
#
# @raise UpdatesNotFetched
@@ -186,7 +205,10 @@
#
# Release the repository
def cleanup
+ Yast::Pkg.SourceReleaseAll
Yast::Pkg.SourceDelete(repo_id)
+ # make sure it's also removed from disk
+ Yast::Pkg.SourceSaveAll
end
# Determine whether the repository is empty or not
@@ -231,15 +253,15 @@
# Extract a RPM contents to a given directory
#
- # @param package_path [Pathname] RPM local path
+ # @param package_file [File] RPM package (local file name)
# @param dir [Pathname] Directory to extract the RPM contents
#
# @raise CouldNotExtractPackage
- def extract(package_path, dir)
+ def extract(package_file, dir)
Dir.chdir(dir) do
- cmd = format(EXTRACT_CMD, source: package_path.path)
+ cmd = format(EXTRACT_CMD, source: package_file.path)
out = Yast::SCR.Execute(Yast::Path.new(".target.bash_output"), cmd)
- log.info("Extracting package #{package_path}: #{out}")
+ log.info("Extracting package #{package_file.inspect}: #{out}")
raise CouldNotExtractPackage unless out["exit"].zero?
end
end
@@ -367,5 +389,17 @@
f.puts "#{path.relative_path_from(Pathname("/"))} #{mountpoint}"
end
end
+
+ # Initialize the progress
+ def init_progress
+ # mark the next stage active
+ Yast::Progress.NextStage
+ end
+
+ # Display the current Progress
+ # @param [Fixnum] percent the current progress in range 0..100
+ def update_progress(percent)
+ Yast::Progress.Step(percent)
+ end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/test/inst_complex_welcome_test.rb
new/yast2-installation-3.1.213/test/inst_complex_welcome_test.rb
--- old/yast2-installation-3.1.210/test/inst_complex_welcome_test.rb
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/test/inst_complex_welcome_test.rb
2016-08-30 14:17:37.000000000 +0200
@@ -22,6 +22,7 @@
# null object returned above as parameter and it raise exception from
# component system
stub_const("Yast::UI", double.as_null_object)
+ allow(Yast::Pkg).to receive(:SourceGetCurrent).and_return([])
end
after do
@@ -44,105 +45,78 @@
allow(Yast::Installation).to receive(:restarting?) { restarting }
end
- context "and installer is restarting" do
- let(:restarting) { true }
- it "applies data if exists and returns next" do
- allow(subject).to receive(:data_stored?) { true }
- expect(subject).to receive(:apply_data)
+ it "initializes dialog" do
+ allow(subject).to receive(:event_loop)
+ expect(subject).to receive(:initialize_dialog)
- expect(subject.main).to eql(:next)
- end
+ subject.main
+ end
- it "does not apply data if not exists and continues as not restarting"
do
- allow(subject).to receive(:data_stored?) { false }
- expect(subject).not_to receive(:apply_data)
- allow(subject).to receive(:event_loop)
- expect(subject).to receive(:initialize_dialog)
+ it "starts input loop" do
+ expect(subject).to receive(:initialize_dialog)
+ expect(subject).to receive(:event_loop)
- subject.main
- end
+ subject.main
end
- context "and installer is not restarting" do
- before do
- allow(subject).to receive(:data_stored?) { false }
- end
+ context "when back is selected" do
- it "initializes dialog" do
- allow(subject).to receive(:event_loop)
+ it "returns back" do
expect(subject).to receive(:initialize_dialog)
+ expect(Yast::UI).to receive(:UserInput).and_return(:back)
- subject.main
+ expect(subject.main).to eql(:back)
end
+ end
- it "starts input loop" do
- expect(subject).to receive(:initialize_dialog)
- expect(subject).to receive(:event_loop)
+ context "when next is selected" do
+ before do
+ allow(Yast::Mode).to receive(:config).and_return(false)
+ allow(Yast::Stage).to receive(:initial).and_return(true)
- subject.main
- end
+ allow(Yast::Language).to
receive(:CheckIncompleteTranslation).and_return(true)
+ allow(Yast::Language).to receive(:CheckLanguagesSupport)
- context "when back is selected" do
+ allow(Yast::ProductLicense).to
receive(:AcceptanceNeeded).and_return(license_needed)
+ allow(Yast::ProductLicense).to
receive(:cache_license_acceptance_needed).and_return(nil)
+ allow(subject).to
receive(:license_accepted?).and_return(license_accepted)
+ end
- it "returns back" do
- expect(subject).to receive(:initialize_dialog)
- expect(Yast::UI).to receive(:UserInput).and_return(:back)
+ context "when license is required and not accepted" do
+ let(:license_needed) { true }
+ let(:license_accepted) { false }
+ it "not returns" do
+ expect(Yast::UI).to receive(:UserInput).and_return(:next, :back)
+ expect(Yast::Report).to receive(:Message)
+ .with(_("You must accept the license to install this product"))
expect(subject.main).to eql(:back)
end
end
- context "when next is selected" do
- before do
- allow(Yast::Mode).to receive(:config).and_return(false)
- allow(Yast::Stage).to receive(:initial).and_return(true)
-
- allow(Yast::Language).to
receive(:CheckIncompleteTranslation).and_return(true)
- allow(Yast::Language).to receive(:CheckLanguagesSupport)
-
- allow(Yast::ProductLicense).to
receive(:AcceptanceNeeded).and_return(license_needed)
- allow(Yast::ProductLicense).to
receive(:cache_license_acceptance_needed).and_return(nil)
- allow(subject).to
receive(:license_accepted?).and_return(license_accepted)
- end
-
- context "when license is required and not accepted" do
- let(:license_needed) { true }
- let(:license_accepted) { false }
-
- it "not returns" do
- expect(Yast::UI).to receive(:UserInput).and_return(:next, :back)
- expect(Yast::Report).to receive(:Message)
- .with(_("You must accept the license to install this product"))
- expect(subject.main).to eql(:back)
- end
- end
-
- context "when license is not required" do
- let(:license_needed) { false }
- let(:license_accepted) { false }
-
- it "stores selected data and returns next" do
- expect(Yast::UI).to receive(:UserInput).and_return(:next)
- expect(subject).to receive(:setup_final_choice)
- expect(subject).to receive(:store_data)
- expect(Yast::Report).to_not receive(:Message)
+ context "when license is not required" do
+ let(:license_needed) { false }
+ let(:license_accepted) { false }
+
+ it "stores selected data and returns next" do
+ expect(Yast::UI).to receive(:UserInput).and_return(:next)
+ expect(subject).to receive(:setup_final_choice)
+ expect(Yast::Report).to_not receive(:Message)
- expect(subject.main).to eql(:next)
- end
+ expect(subject.main).to eql(:next)
end
+ end
- context "when license is required and accepted" do
- let(:license_needed) { true }
- let(:license_accepted) { true }
-
- it "stores selected data and returns next" do
- expect(Yast::UI).to receive(:UserInput).and_return(:next)
- expect(subject).to receive(:setup_final_choice)
- expect(subject).to receive(:store_data)
- expect(Yast::Report).to_not receive(:Message)
+ context "when license is required and accepted" do
+ let(:license_needed) { true }
+ let(:license_accepted) { true }
+
+ it "stores selected data and returns next" do
+ expect(Yast::UI).to receive(:UserInput).and_return(:next)
+ expect(subject).to receive(:setup_final_choice)
+ expect(Yast::Report).to_not receive(:Message)
- expect(subject.main).to eql(:next)
- end
+ expect(subject.main).to eql(:next)
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/test/inst_disks_activate_test.rb
new/yast2-installation-3.1.213/test/inst_disks_activate_test.rb
--- old/yast2-installation-3.1.210/test/inst_disks_activate_test.rb
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/test/inst_disks_activate_test.rb
2016-08-30 14:17:37.000000000 +0200
@@ -14,7 +14,6 @@
describe "#main" do
let(:probed_disks) { [] }
let(:s390) { false }
- let(:restarting) { false }
before do
allow(Yast::Linuxrc).to
receive(:InstallInf).with("WithFCoE").and_return("0")
@@ -23,19 +22,9 @@
allow(Yast::Popup).to
receive(:ConfirmAbort).with(:painless).and_return(true)
allow(Yast::Arch).to receive(:s390).and_return(s390)
allow(Yast::GetInstArgs).to receive(:going_back) { going_back }
- allow(Yast::Installation).to receive(:restarting?) { restarting }
stub_const("Yast::Storage", double("Yast::Storage", ReReadTargetMap:
true))
end
- context "when installation is restarting" do
- let(:restarting) { true }
- it "returns next" do
- expect(Yast::Arch).to_not receive(:s390)
-
- expect(subject.main).to eql(:next)
- end
- end
-
context "when architecture is s390" do
let(:s390) { true }
before do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/yast2-installation-3.1.210/test/inst_finish_test.rb
new/yast2-installation-3.1.213/test/inst_finish_test.rb
--- old/yast2-installation-3.1.210/test/inst_finish_test.rb 2016-08-19
16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/test/inst_finish_test.rb 2016-08-30
14:17:37.000000000 +0200
@@ -24,6 +24,10 @@
allow(Yast::PackageCallbacks).to receive(:RegisterEmptyProgressCallbacks)
allow(Yast::PackageCallbacks).to
receive(:RestorePreviousProgressCallbacks)
+ allow(Yast::Pkg).to receive(:TargetInitialize)
+ allow(Yast::Pkg).to receive(:TargetLoad)
+ allow(Yast::Pkg).to receive(:PkgInstalled).and_return(false)
+
allow(Yast::Hooks).to receive(:run)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/test/inst_update_installer_test.rb
new/yast2-installation-3.1.213/test/inst_update_installer_test.rb
--- old/yast2-installation-3.1.210/test/inst_update_installer_test.rb
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/test/inst_update_installer_test.rb
2016-08-30 14:17:37.000000000 +0200
@@ -35,8 +35,10 @@
let(:restarting) { false }
let(:profile) { {} }
let(:ay_profile) { double("Yast::Profile", current: profile) }
+ let(:ay_profile_location) { double("Yast::ProfileLocation") }
before do
+ allow(Yast::GetInstArgs).to receive(:going_back).and_return(false)
allow(Yast::Pkg).to receive(:GetArchitecture).and_return(arch)
allow(Yast::Mode).to receive(:auto).and_return(false)
allow(Yast::NetworkService).to
receive(:isNetworkRunning).and_return(network_running)
@@ -48,6 +50,12 @@
allow(::FileUtils).to receive(:touch)
stub_const("Registration::Storage::InstallationOptions",
FakeInstallationOptions)
stub_const("Registration::Storage::Config", FakeRegConfig)
+ # skip the libzypp initialization globally, enable in the specific tests
+ allow(subject).to receive(:initialize_packager).and_return(true)
+ allow(subject).to receive(:finish_packager)
+ allow(subject).to receive(:add_installation_repo)
+ allow(subject).to receive(:fetch_profile).and_return(ay_profile)
+ allow(subject).to receive(:process_profile)
# stub the Profile module to avoid dependency on autoyast2-installation
stub_const("Yast::Profile", ay_profile)
@@ -64,7 +72,44 @@
end
end
- context "when update is enabled" do
+ it "cleans up the package management at the end" do
+ # override the global stub
+ expect(subject).to receive(:finish_packager).and_call_original
+ # pretend the package management has been initialized
+ # TODO: test the uninitialized case as well
+ subject.instance_variable_set(:@packager_initialized, true)
+
+ expect(Yast::Pkg).to receive(:SourceGetCurrent).and_return([0])
+ expect(Yast::Pkg).to receive(:SourceDelete).with(0)
+ expect(Yast::Pkg).to receive(:SourceSaveAll)
+ expect(Yast::Pkg).to receive(:SourceFinishAll)
+ expect(Yast::Pkg).to receive(:TargetFinish)
+
+ # just a shortcut to avoid mocking the whole update
+ allow(subject).to receive(:disabled_in_linuxrc?).and_return(true)
+ subject.main
+ end
+
+ it "displays a progress" do
+ expect(Yast::Wizard).to receive(:CreateDialog)
+ expect(Yast::Progress).to receive(:New)
+ expect(Yast::Progress).to receive(:NextStage)
+
+ # just a shortcut to avoid mocking the whole update
+ allow(subject).to receive(:self_update_enabled?).and_return(false)
+ subject.main
+ end
+
+ it "finishes the progress at the end" do
+ expect(Yast::Progress).to receive(:Finish)
+ expect(Yast::Wizard).to receive(:CloseDialog)
+
+ # just a shortcut to avoid mocking the whole update
+ allow(subject).to receive(:self_update_enabled?).and_return(false)
+ subject.main
+ end
+
+ context "when update URL is configured in control.xml" do
before do
allow(Yast::ProductFeatures).to
receive(:GetStringFeature).and_return(url)
end
@@ -246,6 +291,23 @@
allow(File).to receive(:write)
end
+ it "initializes the package management" do
+ # override the global stubs
+ expect(subject).to receive(:initialize_packager).and_call_original
+ expect(subject).to
receive(:add_installation_repo).and_call_original
+
+ url = "cd:///"
+ expect(Yast::Pkg).to receive(:SetTextLocale)
+ expect(Yast::Pkg).to receive(:TargetInitialize).with("/")
+ expect(Yast::Packages).to receive(:ImportGPGKeys)
+ expect(Yast::InstURL).to receive(:installInf2Url).and_return(url)
+ expect(Yast::Pkg).to receive(:SourceCreateBase).with(url,
"").and_return(0)
+
+ # just a shortcut to avoid mocking the whole update
+ allow(subject).to receive(:update_installer).and_return(false)
+ subject.main
+ end
+
it "tries to update the installer using the given URL" do
expect(manager).to receive(:add_repository).with(URI(update0.url))
.and_return(true)
@@ -324,27 +386,6 @@
end
end
- context "when only one SMT server exist" do
- before do
- allow(url_helpers).to receive(:slp_discovery).and_return([smt0])
- end
-
- it "is selected automatically" do
- expect(regservice_selection).to_not receive(:run)
- expect(registration_class).to receive(:new).with(smt0.slp_url)
- .and_return(registration)
- subject.main
- end
-
- it "saves the registration URL to be used later" do
- allow(manager).to receive(:add_repository)
- expect(FakeInstallationOptions.instance).to
receive(:custom_url=).with(smt0.slp_url)
- expect(File).to
receive(:write).with(/\/inst_update_installer.yaml\z/,
- { "custom_url" => smt0.slp_url }.to_yaml)
- subject.main
- end
- end
-
context "when a registration configuration is specified via AutoYaST
profile" do
let(:reg_server_url) { "http://ay.test.example.com/update" }
let(:profile) { { "suse_register" => { "reg_server" =>
reg_server_url } } }
@@ -376,6 +417,14 @@
allow(::FileUtils).to receive(:touch)
end
+ it "tries to process the profile from the given URL" do
+ expect(subject).to receive(:process_profile)
+ expect(manager).to receive(:add_repository).with(URI(profile_url))
+ .and_return(true)
+
+ subject.main
+ end
+
context "the profile defines the update URL" do
it "gets the URL from AutoYaST profile" do
expect(manager).to
receive(:add_repository).with(URI(profile_url))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/yast2-installation-3.1.210/test/test_helper.rb
new/yast2-installation-3.1.213/test/test_helper.rb
--- old/yast2-installation-3.1.210/test/test_helper.rb 2016-08-19
16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/test/test_helper.rb 2016-08-30
14:17:37.000000000 +0200
@@ -25,14 +25,34 @@
def second_stage
end
end
+
AutoinstConfig = AutoinstConfigClass.new
+ class AutoinstGeneralClass
+ # we need at least one non-default methods, otherwise ruby-bindings thinks
+ # it is just namespace
+ def SetSignatureHandling
+ end
+
+ def Import(profile)
+ end
+ end
+
+ AutoinstGeneral = AutoinstGeneralClass.new
+
# Faked Profile module
class ProfileClass
def current
end
end
Profile = ProfileClass.new
+
+ class ProfileLocationClass
+ def Process
+ end
+ end
+
+ ProfileLocation = ProfileLocationClass.new
end
if ENV["COVERAGE"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/yast2-installation-3.1.210/test/update_repository_test.rb
new/yast2-installation-3.1.213/test/update_repository_test.rb
--- old/yast2-installation-3.1.210/test/update_repository_test.rb
2016-08-19 16:32:01.000000000 +0200
+++ new/yast2-installation-3.1.213/test/update_repository_test.rb
2016-08-30 14:17:37.000000000 +0200
@@ -243,8 +243,11 @@
end
describe "#cleanup" do
- it "deletes the repository" do
+ it "deletes and releases the repository" do
expect(Yast::Pkg).to receive(:SourceDelete).with(repo_id)
+ expect(Yast::Pkg).to receive(:SourceReleaseAll)
+ expect(Yast::Pkg).to receive(:SourceSaveAll)
+
subject.cleanup
end
end