diff --git a/lazy.sh b/lazy.sh index 0663633..0c74e2d 100755 --- a/lazy.sh +++ b/lazy.sh @@ -22,13 +22,36 @@ find_fail() { 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 -i) i=1;; -u) u=1;; -l) l=1;; -f) f=1;; + -d) d=1;; + -iu) iu=1;; + -ui) iu=1;; *) usage "bad argument $i";; esac shift @@ -44,17 +67,92 @@ do shift done -if [ "$i" = "1" ]; then - echo "Installing $1" - mkdir -p /tmp/lazybox/$1 || exit 1 - tar -xf $1 -C /tmp/lazybox/$1 || tar_fail - stat /tmp/lazybox/$1/usr/share/lazypkg/ >/dev/null || stat_fail +if [ "$d" = "1" ]; then + stat /usr/share/lazypkg/$1 > /dev/null 2> /dev/null || find_fail + grep deps /usr/share/lazypkg/$1 | tr '=' '\n' | grep -v deps | tr ':' '\n' + +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 / - 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 - 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\]" 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 +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 diff --git a/lazypkg.sh b/lazypkg.sh index 5346030..b6c28a4 100755 --- a/lazypkg.sh +++ b/lazypkg.sh @@ -14,8 +14,8 @@ function do_fetch() { srcdir=$(pwd) fetch } -stat src > /dev/null 2>/dev/null || do_fetch srcdir=$(pwd)/src +stat src > /dev/null 2>/dev/null || do_fetch cd $srcdir @@ -34,6 +34,7 @@ cat > $dir/out/$pkgname/usr/share/lazypkg/$pkgname << EOF [pkg] name=$pkgname ver=$pkgver +deps=$deps [license] EOF @@ -66,6 +67,7 @@ echo $ext | tr ':' '\n' | while read e; do [pkg] name=$pkgname-\$e ver=$pkgver +deps=$pkgname [license] EOF