From 7416bd3b5e8a21c2a1040fc10bd37e94e32cf638 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Sat, 17 Jul 2021 13:58:36 +0300 Subject: [PATCH] kiss: unify all version logic --- kiss | 56 +++++++++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/kiss b/kiss index fb7cdb9..f642b11 100755 --- a/kiss +++ b/kiss @@ -215,10 +215,17 @@ pkg_lint() { } pkg_find_version() { - pkg_find_die "$1" + ver_pre=$repo_ver + rel_pre=$repo_rel + + pkg_find "$@" read -r repo_ver repo_rel 2>/dev/null < "$repo_dir/version" || die "$1" "Failed to read version file ($repo_dir/version)" +} + +pkg_find_version_split() { + pkg_find_version "$@" # Split the version on '.+-_' to obtain individual components. IFS=.+-_ read -r repo_major repo_minor repo_patch repo_ident </dev/null < "$_list_pkg/version" || version=null - printf '%s\n' "${_list_pkg##*/} $version" + printf '%s\n' "$repo_name $repo_ver-$repo_rel" done } @@ -350,7 +347,7 @@ pkg_source_resolve() { pkg_source() { # Download any remote package sources. The existence of local files is # also checked. - pkg_find_version "$1" + pkg_find_version_split "$1" # Support packages without sources. Simply do nothing. [ -f "$repo_dir/sources" ] || return 0 @@ -476,7 +473,7 @@ pkg_depends() { contains "$deps" "$1" || { # Filter out non-explicit, already installed packages. [ -z "$3" ] || [ "$2" ] || contains "$explicit" "$1" || - ! pkg_list "$1" >/dev/null 2>&1 || return + ! [ -d "$sys_db/$1" ] || return # Detect circular dependencies and bail out. # Looks for multiple repeating patterns of (dep dep_parent) (5 is max). @@ -830,7 +827,7 @@ pkg_build_all() { for pkg do log "$pkg" "Building package ($((_build_cur+=1))/${_build_tot:=$#})" - pkg_find_version "$pkg" + pkg_find_version_split "$pkg" # arg1: queue-status # arg2: package name @@ -1099,12 +1096,12 @@ pkg_conflicts() { pkg_swap() { # Swap between package alternatives. - pkg_list "$1" >/dev/null + [ -d "$sys_db/$1" ] || die "'$1' not found" fnr "$1$2" '/' '>' [ -f "$sys_ch/$_fnr" ] || [ -h "$sys_ch/$_fnr" ] || - die "Alternative '$1 $2' doesn't exist" + die "Alternative '$1 ${2:-null}' doesn't exist" if [ -f "$KISS_ROOT$2" ]; then # Figure out which package owns the file we are going to swap in the @@ -1316,7 +1313,6 @@ pkg_removable() { pkg_remove() { # Remove a package and all of its files. The '/etc' directory is handled # differently and configuration files are *not* overwritten. - pkg_list "$1" >/dev/null || return # Intended behavior. # shellcheck disable=2030,2031 @@ -1363,7 +1359,7 @@ pkg_installable() { ;; *-) - pkg_list "$dep" >/dev/null 2>&1 || { + [ -d "$sys_db/$dep" ] || { printf '%s %s\n' "$dep" "$dep_type" set -- "$1" "$2" "$(($3 + 1))" } @@ -1599,9 +1595,7 @@ pkg_update() { set +f -- for pkg in "$sys_db/"*; do - read -r db_ver db_rel < "$pkg/version" || - die "${pkg##*/}" "Failed to read installed version" - + pkg_find_version "${pkg##*/}" "" "" "$sys_db" pkg_find_version "${pkg##*/}" # Detect repository orphans (installed packages with no @@ -1611,8 +1605,8 @@ pkg_update() { esac # Compare installed packages to repository packages. - [ "$db_ver-$db_rel" = "$repo_ver-$repo_rel" ] || { - printf '%s\n' "${pkg##*/} $db_ver-$db_rel ==> $repo_ver-$repo_rel" + [ "$ver_pre-$rel_pre" = "$repo_ver-$repo_rel" ] || { + printf '%s\n' "${pkg##*/} $ver_pre-$rel_pre ==> $repo_ver-$repo_rel" set -- "$@" "${pkg##*/}" } done @@ -1767,7 +1761,7 @@ args() { c|checksum) for pkg do pkg_source "$pkg" c; done for pkg do - pkg_find_version "$pkg" + pkg_find_version_split "$pkg" [ -f "$repo_dir/sources" ] || { log "$pkg" "No sources file, skipping checksums" @@ -1789,9 +1783,9 @@ args() { i|install) for pkg do pkg_install "$pkg"; done ;; b|build) pkg_build_all "${@:?No packages installed}" ;; d|download) for pkg do pkg_source "$pkg"; done ;; - l|list) pkg_list "$@" ;; + l|list) pkg_list_version "$@" ;; r|remove) for pkg in $redro; do pkg_remove "$pkg"; done ;; - s|search) for pkg do pkg_find_die "$pkg" all; done ;; + s|search) for pkg do pkg_find "$pkg" all; done ;; u|update) pkg_update ;; v|version) printf '5.5.6\n' ;; @@ -1840,7 +1834,7 @@ args() { ;; *) - pkg_find_die "kiss-$action*" "" -x "$PATH" + pkg_find "kiss-$action*" "" -x "$PATH" "$repo_dir" "$@" ;; esac