51 lines
1.5 KiB
Bash
51 lines
1.5 KiB
Bash
#!/bin/sh
|
|
|
|
# stdin: old list
|
|
# $1 = old list , $1 = new path
|
|
to_delete()
|
|
{
|
|
find "$2" -type d 2>/dev/null | sed 's|$|/|g' > tmplist
|
|
find "$2" -type f 2>/dev/null >> tmplist
|
|
sort tmplist > list
|
|
diff --new-line-format="" --unchanged-line-format="" "$1" list
|
|
rm tmplist list
|
|
}
|
|
|
|
# $1 = package , $2 = prefix
|
|
upgrade_package()
|
|
{
|
|
[ "$1" = "$fname" ] && [ -z "$opt_R" ] && _self_update=y && return 0
|
|
echo "Updating $1"
|
|
tmpdir="$TMPDIR/zpkg_$(random_string 5)"
|
|
mkdir -p "$tmpdir"
|
|
(
|
|
# fetch package
|
|
cd "$tmpdir"
|
|
fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; }
|
|
unpack "$1.tar.$extension" || return $?
|
|
|
|
oldlist=$(cat "$PKG_PATH/$1.tar.$extension" | $pcompress -dc 2>/dev/null | tar -tf - 2>/dev/null | sort)
|
|
echo "$oldlist" | grep "^ROOT/" | to_delete - ROOT | sed 's|^ROOT/||g' | tac | delete_files / $2
|
|
echo "$oldlist" | grep "^HOME/" | to_delete - HOME | sed 's|^HOME/||g' | tac | delete_files "$HOME"
|
|
|
|
copy_files ROOT / $2 2>/dev/null
|
|
copy_files HOME "$HOME" 2>/dev/null
|
|
$2 cp "$1.tar.$extension" "$PKG_PATH"
|
|
$2 chmod a+r "$PKG_PATH/$1.tar.$extension"
|
|
add_package_entry "$1" $2
|
|
)
|
|
ret=$?
|
|
rm -rd "$tmpdir" 2>/dev/null
|
|
return $ret
|
|
}
|
|
|
|
## self upgrading mitigation
|
|
|
|
unset _self_update
|
|
do_self_update()
|
|
{
|
|
_tmpzpkg="$TMPDIR/zpkg_bin_$(random_string 5)"
|
|
# copy current file
|
|
cp "$0" "$_tmpzpkg" || return $?
|
|
exec sh -c '_ZPKG_SELF_UPGRADE=y "$1" -R install zpkg ; rm -f "$1"' sh "$_tmpzpkg"
|
|
}
|