diff options
author | dylan.araps@gmail.com <dylan.araps@gmail.com> | 2020-02-18 19:14:48 +0000 |
---|---|---|
committer | dylan.araps@gmail.com <dylan.araps@gmail.com> | 2020-02-18 19:14:48 +0000 |
commit | 70e24adeea6cd8d788314cae6b4768b005acbcf1 (patch) | |
tree | 77775635fb10af507217074af87682f786f35ec4 | |
parent | dc2d7ec88f352da94924402cf1ae5f7e09415c54 (diff) | |
download | cpt-70e24adeea6cd8d788314cae6b4768b005acbcf1.tar.gz |
kiss: y/n prompts and view package build file feature
FossilOrigin-Name: e47d0f119bcf0db0b9768ef0026febb2496bcada47bf75e73a1beafa2d96740e
-rwxr-xr-x | kiss | 53 |
1 files changed, 34 insertions, 19 deletions
@@ -39,14 +39,26 @@ contains() { case " $1 " in *" $2 "*) return 0; esac; return 1 } -prompt() { - # Ask the user for some input. - log "Continue?: Press Enter to continue or Ctrl+C to abort here" - - # POSIX 'read' has none of the "nice" options like '-n', '-p' - # etc etc. This is the most basic usage of 'read'. - # '_' is used as 'dash' errors when no variable is given to 'read'. - read -r _ +yn() { + log "${1:-Continue?} (y/n)" + + # Enable raw input to allow for a single byte to be read from + # stdin without needing to wait for the user to press Return. + stty -icanon -echo + + # Read a single byte from stdin using 'dd'. POSIX 'read' has + # no support for single/'N' byte based input from the user. + answer=$(dd ibs=1 count=1 2>/dev/null) + + # Disable raw input, leaving the terminal how we *should* + # have found it. + stty icanon echo + + # Handle the answer here directly, enabling this function's + # return status to be used in place of checking for '[yY]' + # throughout this program. Also call the function again if + # invalid input is given. + case $answer in y) ;; n) return 1 ;; *) yn "$1"; esac } as_root() { @@ -526,7 +538,7 @@ pkg_build() { log "Building: $*" # Only ask for confirmation if more than one package needs to be built. - [ $# -gt 1 ] || [ "$pkg_update" ] && prompt + [ $# -gt 1 ] || [ "$pkg_update" ] && yn log "Checking to see if any dependencies have already been built" log "Installing any pre-built dependencies" @@ -560,6 +572,13 @@ pkg_build() { pkg_verify "$@" + # Allow user to inspect package files prior to build. + [ "$KISS_AUDIT" != 1 ] || + for pkg; do + yn "View build file for $pkg?" && + "${EDITOR:-vi}" "$(pkg_find "$pkg")/build" + done + # Finally build and create tarballs for all passed packages and # dependencies. for pkg; do @@ -643,13 +662,9 @@ pkg_build() { set -- $explicit # Only ask for confirmation if more than one package needs to be installed. - [ $# -gt 1 ] && { - log "Install built packages? [$*]" - - prompt && { - args i "$@" - return - } + [ $# -gt 1 ] && yn "Install built packages? [$*]" && { + args i "$@" + return } log "Run 'kiss i $*' to install the package(s)" @@ -730,8 +745,8 @@ pkg_conflicts() { # Enable alternatives automatically if it is safe to do so. # This checks to see that the package that is about to be installed # doesn't overwrite anything it shouldn't in '/var/db/kiss/installed'. - "$grep" -Fxf "$cac_dir/$pid-m" -- "$@" | - "$grep" -q ":/var/db/kiss/installed/" || choice_auto=1 + "$grep" -Fxf "$cac_dir/$pid-m" -- "$@" | + "$grep" -q ":/var/db/kiss/installed/" || choice_auto=1 # Use 'grep' to list matching lines between the to # be installed package's manifest and the above filtered @@ -1146,7 +1161,7 @@ pkg_updates() { log "Detected package manager update" log "The package manager will be updated first" - prompt + yn pkg_build kiss args i kiss |