kiss: order dependencies properly for updates
This commit is contained in:
parent
f9c8b0a8db
commit
a37a158169
68
kiss
68
kiss
|
@ -141,7 +141,7 @@ pkg_list() {
|
||||||
|
|
||||||
# Loop over each package and print its name and version.
|
# Loop over each package and print its name and version.
|
||||||
for pkg; do
|
for pkg; do
|
||||||
[ -d "$pkg" ] || { log "'$pkg' is not installed"; return 1; }
|
[ -d "$pkg" ] || { log "$pkg" "not installed"; return 1; }
|
||||||
|
|
||||||
read -r version 2>/dev/null < "$pkg/version" || version=null
|
read -r version 2>/dev/null < "$pkg/version" || version=null
|
||||||
printf '%s\n' "$pkg $version"
|
printf '%s\n' "$pkg $version"
|
||||||
|
@ -272,6 +272,30 @@ pkg_depends() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pkg_order() {
|
||||||
|
# Order a list of packages based on dependence and
|
||||||
|
# take into account pre-built tarballs if this is
|
||||||
|
# to be called from 'kiss i'.
|
||||||
|
for pkg; do
|
||||||
|
case $pkg in
|
||||||
|
*.tar.gz) deps="$deps $pkg " ;;
|
||||||
|
*) pkg_depends "$pkg" raw
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Filter the list, only keeping explicit packages.
|
||||||
|
# The purpose of these two loops is to order the
|
||||||
|
# argument list based on dependence.
|
||||||
|
for pkg in $deps; do
|
||||||
|
! contains "$*" "$pkg" || {
|
||||||
|
order="$order $pkg "
|
||||||
|
redro=" $pkg $redro"
|
||||||
|
}
|
||||||
|
done
|
||||||
|
|
||||||
|
deps=
|
||||||
|
}
|
||||||
|
|
||||||
pkg_strip() {
|
pkg_strip() {
|
||||||
# Strip package binaries and libraries. This saves space on the
|
# Strip package binaries and libraries. This saves space on the
|
||||||
# system as well as on the tar-balls we ship for installation.
|
# system as well as on the tar-balls we ship for installation.
|
||||||
|
@ -811,11 +835,7 @@ pkg_remove() {
|
||||||
# is handled differently and configuration files are *not*
|
# is handled differently and configuration files are *not*
|
||||||
# overwritten.
|
# overwritten.
|
||||||
|
|
||||||
# The package is not installed, don't do anything.
|
pkg_list "$1" >/dev/null || return
|
||||||
pkg_list "$1" >/dev/null || {
|
|
||||||
log "$1" "Not installed"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
# Enable globbing.
|
# Enable globbing.
|
||||||
set +f
|
set +f
|
||||||
|
@ -1139,7 +1159,10 @@ pkg_updates() {
|
||||||
# Build all packages requiring an update.
|
# Build all packages requiring an update.
|
||||||
# See [1] at top of script.
|
# See [1] at top of script.
|
||||||
# shellcheck disable=2046,2086
|
# shellcheck disable=2046,2086
|
||||||
pkg_build $outdated
|
{
|
||||||
|
pkg_order $outdated
|
||||||
|
pkg_build $order
|
||||||
|
}
|
||||||
|
|
||||||
log "Updated all packages"
|
log "Updated all packages"
|
||||||
}
|
}
|
||||||
|
@ -1260,38 +1283,15 @@ args() {
|
||||||
;;
|
;;
|
||||||
|
|
||||||
i|install)
|
i|install)
|
||||||
# Create a list of each package's dependencies.
|
pkg_order "$@"
|
||||||
for pkg; do
|
|
||||||
case $pkg in
|
|
||||||
*.tar.gz) deps="$deps $pkg " ;;
|
|
||||||
*) pkg_depends "$pkg" install
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Filter the list, only installing explicit packages.
|
for pkg in $order; do pkg_install "$pkg"; done
|
||||||
# The purpose of these two loops is to order the
|
|
||||||
# argument list based on dependence.
|
|
||||||
for pkg in $deps; do
|
|
||||||
! contains "$*" "$pkg" || pkg_install "$pkg"
|
|
||||||
done
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
r|remove)
|
r|remove)
|
||||||
log "Removing packages"
|
pkg_order "$@"
|
||||||
|
|
||||||
# Create a list of each package's dependencies.
|
|
||||||
for pkg; do pkg_depends "$pkg" remove; done
|
|
||||||
|
|
||||||
# Reverse the list of dependencies filtering out anything
|
|
||||||
# not explicitly set for removal.
|
|
||||||
for pkg in $deps; do
|
|
||||||
contains "$*" "$pkg" && remove_pkgs="$pkg $remove_pkgs"
|
|
||||||
done
|
|
||||||
|
|
||||||
for pkg in $remove_pkgs; do
|
|
||||||
pkg_list "$pkg" >/dev/null ||
|
|
||||||
die "$pkg" "Not installed"
|
|
||||||
|
|
||||||
|
for pkg in $redro; do
|
||||||
pkg_remove "$pkg" "${KISS_FORCE:-check}"
|
pkg_remove "$pkg" "${KISS_FORCE:-check}"
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
|
|
Loading…
Reference in New Issue