From c0c05ca285f4b872831145ab44fce211ec1c55f6 Mon Sep 17 00:00:00 2001 From: awalsh128 Date: Mon, 25 Jul 2022 20:50:58 -0700 Subject: [PATCH] Fix pre-existing dep bug in issue #36. --- install_and_cache_pkgs.sh | 2 +- lib.sh | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/install_and_cache_pkgs.sh b/install_and_cache_pkgs.sh index 2e7bc04..a7f9fed 100755 --- a/install_and_cache_pkgs.sh +++ b/install_and_cache_pkgs.sh @@ -52,7 +52,7 @@ for package in ${normalized_packages}; do manifest_main="${manifest_main}${package_name}:${package_ver}," cached_packages="${cached_packages} ${package_name}:${package_version}" - read dep_packages < <(get_dep_packages "${package_name}") + read dep_packages < <(get_dep_packages "${package_name}") || exit 2 cached_packages="${cached_packages} $(echo ${dep_packages} | tr '\n' ' ')" if test -z "${dep_packages}"; then diff --git a/lib.sh b/lib.sh index edabb1a..8a21a2a 100755 --- a/lib.sh +++ b/lib.sh @@ -9,15 +9,23 @@ function normalize_package_list { echo "${sorted}" } -# Gets a package list of dependencies as newline delimited pairs -# :\n... +# Gets a package list of dependencies as space delimited pairs with each pair colon delimited. +# : ... function get_dep_packages { - echo $(apt-fast install --dry-run --yes "${1}" | \ - grep "^Inst" | sort | awk '{print $2 $3}' | \ - tr '(' ':' | grep -v "${1}:") + local regex="^Inst ([^ ]+) (\[[^ ]+\]\s)?\(([^ ]+)" + dep_packages="" + while read -r line; do + if [[ "${line}" =~ ${regex} ]]; then + dep_packages="${dep_packages}${BASH_REMATCH[1]}:${BASH_REMATCH[3]} " + else + log_err "Unable to parse package name and version from \"$line\"" + exit 2 + fi + done < <(apt-fast install --dry-run --yes "${1}" | grep "^Inst" | grep -v "^Inst ${1} " | sort) + echo "${dep_packages:0:-1}" # Removing trailing space. } -# Split fully qualified package into name and version +# Split fully qualified package into name and version. function get_package_name_ver { IFS=\: read name ver <<< "${1}" # If version not found in the fully qualified package value. @@ -28,13 +36,14 @@ function get_package_name_ver { } function log { echo "$(date +%H:%M:%S)" "${@}"; } +function log_err { >&2 echo "$(date +%H:%M:%S)" "${@}"; } function log_empty_line { echo ""; } # Writes the manifest to a specified file. function write_manifest { log "Writing ${1} packages manifest to ${3}..." - # 0:-1 to remove trailing comma, delimit by newline and sort + # 0:-1 to remove trailing comma, delimit by newline and sort. echo "${2:0:-1}" | tr ',' '\n' | sort > ${3} log "done" }