From 1674a88b9152a541aec9981d2cd93c94049a635b Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Mon, 17 Jun 2019 07:18:36 +0000 Subject: kiss: Added package conflicts. FossilOrigin-Name: 28cc1e0d70d5f372219079e0fab18b36430f735278428fc2e7598a66dd0d93b0 --- kiss | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'kiss') diff --git a/kiss b/kiss index cbecbac..997bae9 100755 --- a/kiss +++ b/kiss @@ -134,15 +134,41 @@ pkg_tar() { log "Use '$kiss install $name' to install the package." } +pkg_conflicts() { + log "Checking for package conflicts." + + # Extract manifest from tarball and strip directories. + tar xf "$bin_dir/$pkg" "./var/db/$kiss/$name/manifest" -O | + while read -r line; do + [ -f "$line" ] && printf '%s\n' "$line" >> "$cac_dir/manifest" + done + + # Compare extracted manifest to all installed manifests. + # If there are matching lines (files) there's a package + # conflict. + for db in "$sys_db"/*; do + [ "$name" = "${db##*/}" ] && continue + + grep -Fxf "$cac_dir/manifest" "$db/manifest" && + die "Package '$name' conflicts with '${db##*/}'." + done + + rm "$cac_dir/manifest" +} + pkg_install() { [ -f "$bin_dir/$pkg" ] || args b "$name" + pkg_conflicts + # Create a backup of 'tar' so it isn't removed during # package installation. cp "$(command -v tar)" "$cac_dir" + log "Removing previous version of package if it exists." pkg_remove "$name" - "$cac_dir/tar" kpxvf "$bin_dir/$pkg" -C "$sys_dir/" + + "$cac_dir/tar" kpxf "$bin_dir/$pkg" -C "$sys_dir/" rm "$cac_dir/tar" "$sys_db/$name/post-install" 2>/dev/null -- cgit v1.2.3 From f67cd748b5f56153519beacbde798d8fa02978de Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Tue, 18 Jun 2019 08:01:06 +0000 Subject: kiss: Fix pkg_conflicts FossilOrigin-Name: 20d92d7576a6432c81925f143d8fb4748167ad926bf4086994efa492aaaaa27b --- kiss | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'kiss') diff --git a/kiss b/kiss index 997bae9..b789b8d 100755 --- a/kiss +++ b/kiss @@ -125,8 +125,11 @@ pkg_strip() { } pkg_manifest() { - (cd "$pkg_dir" && find ./*) | sed -e ss.ss -e '1!G;h;$!d' | - tee manifest > "$pkg_db/$name/manifest" + # Store the file and directory list of the package. + # Directories have a trailing '/' and the list is sorted in reverse. + (cd "$pkg_dir" && { + find ./* -type d -print | sed 's!$!/!'; find . \! -type d + }) | sort -r | sed -e ss.ss | tee manifest > "$pkg_db/$name/manifest" } pkg_tar() { @@ -139,9 +142,9 @@ pkg_conflicts() { # Extract manifest from tarball and strip directories. tar xf "$bin_dir/$pkg" "./var/db/$kiss/$name/manifest" -O | - while read -r line; do - [ -f "$line" ] && printf '%s\n' "$line" >> "$cac_dir/manifest" - done + while read -r line; do + [ "${line%%*/}" ] && printf '%s\n' "$line" >> "$cac_dir/manifest" + done # Compare extracted manifest to all installed manifests. # If there are matching lines (files) there's a package @@ -152,8 +155,6 @@ pkg_conflicts() { grep -Fxf "$cac_dir/manifest" "$db/manifest" && die "Package '$name' conflicts with '${db##*/}'." done - - rm "$cac_dir/manifest" } pkg_install() { @@ -261,7 +262,7 @@ args() { } main() { - trap 'rm -rf -- "$mak_dir" "$pkg_dir"' EXIT INT + trap 'rm -rf -- "$mak_dir" "$pkg_dir" "$cac_dir/manifest"' EXIT INT kiss=${0##*/} [ -z "$KISS_PATH" ] && -- cgit v1.2.3 From a362d7cf4d25591f555667f12787c801055d42de Mon Sep 17 00:00:00 2001 From: "dylan.araps@gmail.com" Date: Tue, 18 Jun 2019 08:38:45 +0000 Subject: kiss: Simplify manifest find. FossilOrigin-Name: 2a7e7e985410cbc26b9278b2e12e37d306543568594b546e534d58de10cbe0f8 --- kiss | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'kiss') diff --git a/kiss b/kiss index 5f3e440..ab7a5bb 100755 --- a/kiss +++ b/kiss @@ -131,9 +131,8 @@ pkg_strip() { pkg_manifest() { # Store the file and directory list of the package. # Directories have a trailing '/' and the list is sorted in reverse. - (cd "$pkg_dir" && { - find ./* -type d -print | sed 's!$!/!'; find . \! -type d - }) | sort -r | sed -e ss.ss | tee manifest > "$pkg_db/$name/manifest" + (cd "$pkg_dir" && find ./* -type d -exec printf '%s/\n' {} + -or -print) | + sort -r | sed -e ss.ss | tee manifest > "$pkg_db/$name/manifest" } pkg_tar() { -- cgit v1.2.3