Merge remote-tracking branch 'origin/package-scripts'

FIXES #1057
main
Adriaan de Groot 6 years ago
commit e074959ede

@ -40,6 +40,9 @@ This release contains contributions from (alphabetically by first name):
and then sized to the actual SD card the user has used.
* The *mount* module now handles missing *extraMounts* and *extraMountsEfi*
keys gracefully (this is probably a misconfiguration issue).
* The *packages* module now supports pre- and post-script options
for all operations, not just during install (keep in mind that
these run as three separate shells, though).
# 3.2.2 (2018-09-04) #

@ -126,7 +126,8 @@ class PackageManager(metaclass=abc.ABCMeta):
"""
Install a package from a single entry in the install list.
This can be either a single package name, or an object
with pre- and post-scripts.
with pre- and post-scripts. If @p packagedata is a dict,
it is assumed to follow the documented structure.
@param packagedata: str|dict
@param from_local: bool
@ -139,6 +140,22 @@ class PackageManager(metaclass=abc.ABCMeta):
self.install([packagedata["package"]], from_local=from_local)
self.run(packagedata["post-script"])
def remove_package(self, packagedata):
"""
Remove a package from a single entry in the remove list.
This can be either a single package name, or an object
with pre- and post-scripts. If @p packagedata is a dict,
it is assumed to follow the documented structure.
@param packagedata: str|dict
"""
if isinstance(packagedata, str):
self.remove([packagedata], from_local=from_local)
else:
self.run(packagedata["pre-script"])
self.remove([packagedata["package"]], from_local=from_local)
self.run(packagedata["post-script"])
class PMPackageKit(PackageManager):
backend = "packagekit"
@ -440,19 +457,27 @@ def run_operations(pkgman, entry):
libcalamares.utils.warning(warn_text)
elif key == "remove":
_change_mode(REMOVE)
if all([isinstance(x, str) for x in package_list]):
pkgman.remove(package_list)
else:
for package in package_list:
pkgman.remove_package(package)
elif key == "try_remove":
_change_mode(REMOVE)
for package in package_list:
try:
pkgman.remove([package])
pkgman.remove_package(package)
except subprocess.CalledProcessError:
warn_text = "Could not remove package "
warn_text += package
warn_text += str(package)
libcalamares.utils.warning(warn_text)
elif key == "localInstall":
_change_mode(INSTALL)
if all([isinstance(x, str) for x in package_list]):
pkgman.install(package_list, from_local=True)
else:
for package in package_list:
pkgman.install_package(package, from_local=True)
completed_packages += len(package_list)
libcalamares.job.setprogress(completed_packages * 1.0 / total_packages)

@ -64,6 +64,8 @@ update_system: false
# - localInstall: this is used to call the package manager
# to install a package from a path-to-a-package. This is
# useful if you have a static package archive on the install media.
# The *pacman* package manager is the only one to specially support
# this operation (all others treat this the same as *install*).
# - remove, try_remove: will call the package manager to
# remove one or more packages. The remove target will
# abort the whole installation if package-removal fails,
@ -91,18 +93,20 @@ update_system: false
#
# Any package name may be localized; this is used to install localization
# packages for software based on the selected system locale. By including
# the string LOCALE in the package name, the following happens:
# the string `LOCALE` in the package name, the following happens:
#
# - if the system locale is English (any variety), then the package is not
# installed at all,
# - otherwise $LOCALE or ${LOCALE} is replaced by the 'lower-cased' BCP47
# - otherwise `$LOCALE` or `${LOCALE}` is replaced by the 'lower-cased' BCP47
# name of the 'language' part of the selected system locale (not the
# country/region/dialect part), e.g. selecting "nl_BE" will use "nl"
# here.
#
# Take care that just plain LOCALE will not be replaced, so foo-LOCALE will
# be left unchanged, while foo-$LOCALE will be changed. However, foo-LOCALE
# 'will' be removed from the list of packages, if English is selected.
# Take care that just plain `LOCALE` will not be replaced, so `foo-LOCALE` will
# be left unchanged, while `foo-$LOCALE` will be changed. However, `foo-LOCALE`
# **will** be removed from the list of packages (i.e. not installed), if
# English is selected. If a non-English locale is selected, then `foo-LOCALE`
# will be installed, unchanged (no language-name-substitution occurs).
#
# The following installs localizations for vi, if they are relevant; if
# there is no localization, installation continues normally.

Loading…
Cancel
Save