kiss: fix pkg conflicts

This commit is contained in:
Dylan Araps 2020-01-06 07:49:52 +02:00
parent 98b5cbd75b
commit c8a29c451e
No known key found for this signature in database
GPG Key ID: 46D62DD9F1DE636E
1 changed files with 26 additions and 12 deletions

38
kiss
View File

@ -574,8 +574,6 @@ pkg_conflicts() {
# Check to see if a package conflicts with another.
log "$2" "Checking for package conflicts"
set +ef
# Filter the tarball's manifest and select only files
# and any files they resolve to on the filesystem \
# (/bin/ls -> /usr/bin/ls).
@ -584,20 +582,36 @@ pkg_conflicts() {
printf '%s\n' "$file"
(cd "$KISS_ROOT/" && readlink -f "./$file") ||:
done |
readlink -f "$KISS_ROOT/$file" ||:
done > "$cac_dir/$pid-m"
# Filter the existing file list through the manifest of the
# presently installed version of the package (if it exists).
grep -svFxf "$sys_db/$2/manifest" - 2>/dev/null > "$cac_dir/$pid-m"
p_name=$2
# If the generated manifest contains matches, check the
# contents for conflicts.
# Generate a list of all installed package manifests.
set +ef
set -f -- "$sys_db"/*/manifest
# Filter the manifest list and remove the previously
# installed version of the package if it exists.
for pkg; do
i_name=${pkg%/*}
i_name=${i_name##*/}
shift
[ "$p_name" = "$i_name" ] && continue
set -- "$@" "$pkg"
done
# Use 'grep' to list matching lines between the to
# be installed package's manifest and the above filtered
# list.
[ -s "$cac_dir/$pid-m" ] &&
grep -Fxf "$cac_dir/$pid-m" -- "$sys_db"/*/manifest &&
die "Package '$2' conflicts with another package"
grep -Fxf "$cac_dir/$pid-m" -- "$@" &&
die "Package '$p_name' conflicts with another package"
set -ef
set -e
}
pkg_remove() {