From 447861b03f128a79fd10f356157f1b47e5446103 Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Wed, 26 Jun 2019 16:27:36 +0000 Subject: kiss: Fix package installation bugs. FossilOrigin-Name: e97870b69f3501416be502fd67556007ed214ea30ff95e45e063e6b502f42ad2 --- kiss | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/kiss b/kiss index a31e9e4..6dc8cb8 100755 --- a/kiss +++ b/kiss @@ -20,8 +20,9 @@ source_type() { } pkg_clean() { - rm -rf -- "$mak_dir" "$pkg_dir" \ - "$cac_dir/manifest-$$" "$cac_dir/tar" "$cac_dir/checksums-$$" + rm -rf -- "$mak_dir" "$pkg_dir" "$tar_dir" \ + "$cac_dir/manifest-$$" "$cac_dir/checksums-$$" \ + "$cac_dir/mv" "$cac_dir/mkdir" "$cac_dir/find" } pkg_search() { @@ -154,8 +155,13 @@ pkg_conflicts() { # Extract manifest from tarball and strip directories. tar xf "$bin_dir/$pkg" -O "./var/db/$kiss/$name/manifest" | while read -r line; do - [ "${line%%*/}" ] && printf '%s\n' "$line" >> "$cac_dir/manifest-$$" - done + [ "${line%%*/}" ] && { + printf '%s\n' "$line" >> "$cac_dir/manifest-$$" + continue + } + + [ ! -f "$sys_dir$line" ] || die "Conflict: $line already exists." + done || die "Found file conflicts." # Compare extracted manifest to all installed manifests. # If there are matching lines (files) there's a package @@ -173,14 +179,34 @@ pkg_install() { pkg_conflicts - # Create a backup of 'tar' so it isn't removed during - # package installation. - cp "$(command -v tar)" "$cac_dir" + # Create a backup of 'mv', 'mkdir' and 'find' so they aren't removed + # during package removal. + cp "$(command -v mv)" "$cac_dir" + cp "$(command -v mkdir)" "$cac_dir" + cp "$(command -v find)" "$cac_dir" log "Removing previous version of package if it exists." pkg_remove - "$cac_dir/tar" kpxf "$bin_dir/$pkg" -C "$sys_dir/" 2>/dev/null + tar pxf "$bin_dir/$pkg" -C "$tar_dir/" + + cd "$tar_dir" || die "Aborting due to tar error." + + find ./ -mindepth 1 -type d | while read -r dir; do + mkdir -p "$sys_dir/${dir#./}" + done + + find ./ -mindepth 1 -not -type d | while read -r file; do + rpath=${file#.} + + case $rpath in + /etc/*) [ -f "$sys_dir${rpath%/*}" ] || mv=1 ;; + *) mv=1 ;; + esac + + [ "$mv" ] && mv "$file" "$sys_dir${rpath%/*}" ;mv= + done + "$sys_db/$name/post-install" 2>/dev/null log "Installed ${pkg%.tar.gz}" @@ -201,11 +227,13 @@ pkg_remove() { "$cac_dir/rmdir" "$sys_dir$file" 2>/dev/null || continue else "$cac_dir/rm" -f -- "$sys_dir$file" || log "Failed to remove $file." - fi && log "Removed $file" + fi done < "$sys_db/${1:-$name}/manifest" # Use the backup of 'rm' to remove 'rmdir' and itself. "$cac_dir/rm" "$cac_dir/rmdir" "$cac_dir/rm" + + log "Removed ${pkg%.tar.gz}" } pkg_updates() { @@ -285,6 +313,7 @@ main() { mkdir -p "${cac_dir:=${XDG_CACHE_HOME:=$HOME/.cache}/$kiss}" \ "${mak_dir:=$cac_dir/build-$$}" \ "${bin_dir:=$cac_dir/bin}" \ + "${tar_dir:=$cac_dir/extract-$$}" \ "${pkg_db:=${pkg_dir:=$cac_dir/pkg-$$}/var/db/$kiss}" || die "Couldn't create directories." -- cgit v1.2.3 From 650e2604c73ef06537460119b4614cfcef115430 Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Wed, 26 Jun 2019 16:43:13 +0000 Subject: kiss: Fix /etc exclusion. FossilOrigin-Name: ec93b0dea0e6f5b6263c0a7ea19cac496b263c7c002209fbe0a9205b5b79bf45 --- kiss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kiss b/kiss index 6dc8cb8..d47abbc 100755 --- a/kiss +++ b/kiss @@ -200,7 +200,7 @@ pkg_install() { rpath=${file#.} case $rpath in - /etc/*) [ -f "$sys_dir${rpath%/*}" ] || mv=1 ;; + /etc/*) [ -f "$sys_dir${rpath%/*}/${file##*/}" ] || mv=1 ;; *) mv=1 ;; esac @@ -221,7 +221,7 @@ pkg_remove() { cp "$(command -v rmdir)" "$cac_dir" while read -r file; do - [ "${file%/*}" = /etc ] && continue + [ "${file##/etc/*}" ] || continue if [ -d "$sys_dir$file" ]; then "$cac_dir/rmdir" "$sys_dir$file" 2>/dev/null || continue -- cgit v1.2.3 From 6aa2694569352dcc7c3908e3ec7d8c5050ca8fee Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Wed, 26 Jun 2019 17:34:44 +0000 Subject: kiss: Optimize directory installation. FossilOrigin-Name: c1eac4c5d5a94d088ba6ff6242a7701eed3e31b701a817d7489260ded9ac07eb --- kiss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kiss b/kiss index d47abbc..67731e9 100755 --- a/kiss +++ b/kiss @@ -192,7 +192,8 @@ pkg_install() { cd "$tar_dir" || die "Aborting due to tar error." - find ./ -mindepth 1 -type d | while read -r dir; do + # Optimization: Only find the deepest directories. + find . -type d -links -3 -prune | while read -r dir; do mkdir -p "$sys_dir/${dir#./}" done @@ -258,7 +259,7 @@ pkg_list() { } args() { - [ -w "$KISS_ROOT/" ] || case $1 in + [ -w "$sys_dir/" ] || case $1 in i*|r*) die "No write permissions to \$KISS_ROOT." esac -- cgit v1.2.3 From 93eab21949a97f50613efe92416cdba962ab258d Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Wed, 26 Jun 2019 17:38:41 +0000 Subject: kiss: Remove tarball earlier. FossilOrigin-Name: 4ff7d51e11517e3179228720f48276021f2716687a09a73ee261285de6f93d28 --- kiss | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/kiss b/kiss index 67731e9..7580078 100755 --- a/kiss +++ b/kiss @@ -178,6 +178,7 @@ pkg_install() { [ -f "$bin_dir/$pkg" ] || args b "$name" pkg_conflicts + tar pxf "$bin_dir/$pkg" -C "$tar_dir/" || die "Failed to extract tarball." # Create a backup of 'mv', 'mkdir' and 'find' so they aren't removed # during package removal. @@ -188,8 +189,6 @@ pkg_install() { log "Removing previous version of package if it exists." pkg_remove - tar pxf "$bin_dir/$pkg" -C "$tar_dir/" - cd "$tar_dir" || die "Aborting due to tar error." # Optimization: Only find the deepest directories. @@ -234,7 +233,7 @@ pkg_remove() { # Use the backup of 'rm' to remove 'rmdir' and itself. "$cac_dir/rm" "$cac_dir/rmdir" "$cac_dir/rm" - log "Removed ${pkg%.tar.gz}" + log "Removed ${1:-name}." } pkg_updates() { -- cgit v1.2.3 From f9909596f03d17002f2444082169767e5c595fa1 Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Wed, 26 Jun 2019 18:21:42 +0000 Subject: kiss: clean up FossilOrigin-Name: 81dc120a72a2df5954c74e04d112b5339e10971773a44dd01b921379c8dde8f9 --- kiss | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/kiss b/kiss index 7580078..7e38f14 100755 --- a/kiss +++ b/kiss @@ -199,12 +199,10 @@ pkg_install() { find ./ -mindepth 1 -not -type d | while read -r file; do rpath=${file#.} - case $rpath in - /etc/*) [ -f "$sys_dir${rpath%/*}/${file##*/}" ] || mv=1 ;; - *) mv=1 ;; - esac + [ -z "${rpath##/etc/*}" ] && [ -f "$sys_dir${rpath%/*}/${file##*/}" ] && + return - [ "$mv" ] && mv "$file" "$sys_dir${rpath%/*}" ;mv= + mv "$file" "$sys_dir${rpath%/*}" done "$sys_db/$name/post-install" 2>/dev/null @@ -233,7 +231,7 @@ pkg_remove() { # Use the backup of 'rm' to remove 'rmdir' and itself. "$cac_dir/rm" "$cac_dir/rmdir" "$cac_dir/rm" - log "Removed ${1:-name}." + log "Removed ${1:-$name}." } pkg_updates() { -- cgit v1.2.3 From 4d8bc8146e5c4528a48ff78af4d6de90dbf06243 Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Wed, 26 Jun 2019 18:26:33 +0000 Subject: kiss: Remove file conflict check for now. FossilOrigin-Name: 176baa60b238f723125d6fdf991af46cd3a1ff58a1f4b96a2760ce4ebff32245 --- kiss | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/kiss b/kiss index 7e38f14..b86b50d 100755 --- a/kiss +++ b/kiss @@ -155,12 +155,7 @@ pkg_conflicts() { # Extract manifest from tarball and strip directories. tar xf "$bin_dir/$pkg" -O "./var/db/$kiss/$name/manifest" | while read -r line; do - [ "${line%%*/}" ] && { - printf '%s\n' "$line" >> "$cac_dir/manifest-$$" - continue - } - - [ ! -f "$sys_dir$line" ] || die "Conflict: $line already exists." + [ "${line%%*/}" ] && printf '%s\n' "$line" >> "$cac_dir/manifest-$$" done || die "Found file conflicts." # Compare extracted manifest to all installed manifests. -- cgit v1.2.3 From a18b45269edeef01e9b085f1a57afb84b50edc1a Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Wed, 26 Jun 2019 18:27:27 +0000 Subject: kiss: Remove file conflict check for now. FossilOrigin-Name: b6a960a0e411f66933765e1fc921326112937f0cb6edf05c1d0b79b8f218708f --- kiss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kiss b/kiss index b86b50d..26a7977 100755 --- a/kiss +++ b/kiss @@ -156,7 +156,7 @@ pkg_conflicts() { tar xf "$bin_dir/$pkg" -O "./var/db/$kiss/$name/manifest" | while read -r line; do [ "${line%%*/}" ] && printf '%s\n' "$line" >> "$cac_dir/manifest-$$" - done || die "Found file conflicts." + done # Compare extracted manifest to all installed manifests. # If there are matching lines (files) there's a package -- cgit v1.2.3