Added dep tracking

This commit is contained in:
Ella-0 2021-01-31 01:49:02 +00:00
parent 04042c4108
commit 872362f202
2 changed files with 110 additions and 10 deletions

116
lazy.sh
View file

@ -22,13 +22,36 @@ find_fail() {
exit 1 exit 1
} }
i= u= l= f= o= continue_interactive() {
read -p "Do you wish to proceed?: " yn
case $yn in
[Yy]* ) break;;
[Nn]* ) exit;;
* ) exit;;
esac
}
already_exists() {
echo "Package already installed"
echo "pass -u and -i to upgrade"
exit 1
}
dep_not_found() {
echo "Missing dep: $1"
exit 1
}
i= u= l= f= o= d= iu=
case "$1" in case "$1" in
-i) i=1;; -i) i=1;;
-u) u=1;; -u) u=1;;
-l) l=1;; -l) l=1;;
-f) f=1;; -f) f=1;;
-d) d=1;;
-iu) iu=1;;
-ui) iu=1;;
*) usage "bad argument $i";; *) usage "bad argument $i";;
esac esac
shift shift
@ -44,17 +67,92 @@ do
shift shift
done done
if [ "$i" = "1" ]; then if [ "$d" = "1" ]; then
echo "Installing $1" stat /usr/share/lazypkg/$1 > /dev/null 2> /dev/null || find_fail
mkdir -p /tmp/lazybox/$1 || exit 1 grep deps /usr/share/lazypkg/$1 | tr '=' '\n' | grep -v deps | tr ':' '\n'
tar -xf $1 -C /tmp/lazybox/$1 || tar_fail
stat /tmp/lazybox/$1/usr/share/lazypkg/ >/dev/null || stat_fail elif [ "$iu" = "1" ]; then
# Setup names
bname_we=$(basename "$1")
bname=$(echo "$bname_we" | cut -f 1 -d '.')
# locate installed package
stat /usr/share/lazypkg/$bname > /dev/null 2> /dev/null || find_fail
echo "Upgrading $bname_we"
continue_interactive
# Extract new package and verify
mkdir -p /tmp/lazybox/$bname_we || exit 1
tar -xf $1 -C /tmp/lazybox/$bname_we || tar_fail
stat /tmp/lazybox/$bname_we/usr/share/lazypkg/$bname >/dev/null || stat_fail
# Check deps
deps=$(grep deps /tmp/lazybox/$bname_we/usr/share/lazypkg/$bname | tr '=' '\n' | grep -v deps | tr ':' '\n')
for dep in $deps; do
stat /usr/share/lazypkg/$dep > /dev/null 2> /dev/null || dep_not_found $dep
done
# Grab a list of old files and new files to install
OFILES=$(sed -n '/\[fs\]/,$p' /usr/share/lazypkg/$bname |
grep -v "\[fs\]" | awk '{print length, $0}' | sort -rn | cut -d " " -f2-)
NFILES=$(sed -n '/\[fs\]/,$p' /tmp/lazybox/$bname_we/usr/share/lazypkg/$bname |
grep -v "\[fs\]" | awk '{print length, $0}' | sort -rn | cut -d " " -f2-)
# Extract tar
tar -xf $1 -C / tar -xf $1 -C /
rm -r /tmp/lazybox/$1 rm -r /tmp/lazybox/$bname_we
# Remove old files (don't know if this works yet)
for file in $OFILES; do
if echo $NFILES | grep -q $file; then
echo "not removing $file"
else
echo "attempting to remove $file"
case $(stat -c "%F" /$file) in
directory) rmdir 2>/dev/null /$file;;
"regular file") rm /$file;;
*) break;;
esac
fi
done
echo $OFILES
elif [ "$i" = "1" ]; then
bname_we=$(basename "$1")
bname=$(echo "$bname_we" | cut -f 1 -d '.')
stat /usr/share/lazypkg/$bname > /dev/null 2> /dev/null && already_exists
echo "Installing $bname_we"
continue_interactive
mkdir -p /tmp/lazybox/$bname_we || exit 1
tar -xf $1 -C /tmp/lazybox/$bname_we || tar_fail
stat /tmp/lazybox/$bname_we/usr/share/lazypkg/$bname >/dev/null || stat_fail
deps=$(grep deps /tmp/lazybox/$bname_we/usr/share/lazypkg/$bname | tr '=' '\n' | grep -v deps | tr ':' '\n')
for dep in $deps; do
stat /usr/share/lazypkg/$dep > /dev/null 2> /dev/null || dep_not_found $dep
done
tar -xf $1 -C /
rm -r /tmp/lazybox/$bname_we
elif [ "$f" = "1" ]; then elif [ "$f" = "1" ]; then
stat /usr/share/lazypkg/$1 > /dev/null || find_fail stat /usr/share/lazypkg/$1 > /dev/null 2> /dev/null || find_fail
sed -n '/\[fs\]/,$p' /usr/share/lazypkg/$1 | grep -v "\[fs\]" sed -n '/\[fs\]/,$p' /usr/share/lazypkg/$1 | grep -v "\[fs\]"
elif [ "$l" = "1" ]; then elif [ "$l" = "1" ]; then
stat /usr/share/lazypkg/$1 > /dev/null || find_fail stat /usr/share/lazypkg/$1 > /dev/null 2> /dev/null || find_fail
sed -n '/\[license\]/,/\[fs\]/{/\[license\]\|\[fs\]/!p}' /usr/share/lazypkg/$1 sed -n '/\[license\]/,/\[fs\]/{/\[license\]\|\[fs\]/!p}' /usr/share/lazypkg/$1
elif [ "$u" = "1" ]; then
stat /usr/share/lazypkg/$1 > /dev/null 2> /dev/null || find_fail
FILES=$(sed -n '/\[fs\]/,$p' /usr/share/lazypkg/$1 | grep -v "\[fs\]" | awk '{print length, $0}' | sort -rn | cut -d " " -f2-)
echo "Uninstalling $1"
continue_interactive
for file in $FILES; do
case $(stat -c "%F" /$file) in
directory) rmdir 2>/dev/null /$file;;
"regular file") rm /$file;;
*) break;;
esac
done
fi fi

View file

@ -14,8 +14,8 @@ function do_fetch() {
srcdir=$(pwd) fetch srcdir=$(pwd) fetch
} }
stat src > /dev/null 2>/dev/null || do_fetch
srcdir=$(pwd)/src srcdir=$(pwd)/src
stat src > /dev/null 2>/dev/null || do_fetch
cd $srcdir cd $srcdir
@ -34,6 +34,7 @@ cat > $dir/out/$pkgname/usr/share/lazypkg/$pkgname << EOF
[pkg] [pkg]
name=$pkgname name=$pkgname
ver=$pkgver ver=$pkgver
deps=$deps
[license] [license]
EOF EOF
@ -66,6 +67,7 @@ echo $ext | tr ':' '\n' | while read e; do
[pkg] [pkg]
name=$pkgname-\$e name=$pkgname-\$e
ver=$pkgver ver=$pkgver
deps=$pkgname
[license] [license]
EOF EOF