From eed6a0e9502c1e51a25a50c93776d768775eea18 Mon Sep 17 00:00:00 2001 From: emmett1 Date: Thu, 21 Sep 2017 07:20:21 +0800 Subject: [PATCH] updated --- installpkg | 109 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 47 deletions(-) diff --git a/installpkg b/installpkg index 65d9bfd..1d95973 100755 --- a/installpkg +++ b/installpkg @@ -38,6 +38,13 @@ installpkg() { # create lock file prevent simultaneous install package spkglock + # backup conf as set in spkgbuld if upgrade or reinstall package + if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then + if [ ! "$NO_BACKUP" ]; then + backupconf + fi + fi + # source .install file inside package if [ $(tar -tf "$PKGNAME" | grep -w ^".pkginstall") ] && [ ! "$REINSTALL_PKG" ]; then source <(tar -xf "$PKGNAME" .pkginstall -O) @@ -72,32 +79,43 @@ installpkg() { exit 1 fi - if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then - while IFS=' ' read -r line; do - if [ ! "$(tar -tf "$PKGNAME" --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]} | grep -w "$line")" ]; then + if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then + + TMP_TARLIST="/tmp/$name.tarlist.spkg" + tar -tf "$PKGNAME" --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]} > $TMP_TARLIST + + msg2 "Removing old files..." + grep -v '/$' $INDEX_DIR/$name/.files | while read line; do + if [ ! "$(grep -w "$line" $TMP_TARLIST)" ]; then pushd $ROOT_DIR - rm_silent "$line" || msgwarn "Failed remove $line" + if [ "$VERBOSE_INSTALL" = "yes" ]; then + rm_silent "$line" && echo "$line" && OLDFILEREMOVE=yes || msgwarn "Failed remove $line" + else + rm_silent "$line" && OLDFILEREMOVE=yes || msgwarn "Failed remove $line" + fi popd fi - done < <(tac $INDEX_DIR/$name/.files | grep -v '/$') + done + + msg2 "Removing old dirs..." while IFS=' ' read -r line; do - if [ ! "$(tar -tf "$PKGNAME" --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]} | grep -w "$line")" ] && [ ! "$(grep -R --exclude-dir="$name" -w "$line" "$INDEX_DIR")" ]; then + if [ ! "$(tac $TMP_TARLIST | grep -w "$line")" ] && [ ! "$(grep -R --exclude-dir="$name" -w "$line" "$INDEX_DIR")" ]; then pushd $ROOT_DIR - rmdir_silent "$line" || msgwarn "Failed remove $line" + if [ "$VERBOSE_INSTALL" = "yes" ]; then + rmdir_silent "$line" && echo "$line" || msgwarn "Failed remove $line" + else + rmdir_silent "$line" || msgwarn "Failed remove $line" + fi popd fi done < <(tac $INDEX_DIR/$name/.files | grep '/$') - tar -x -f $PKGNAME -C $INDEX_DIR/$name .pkginfo - tar -t -f $PKGNAME --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]} > $INDEX_DIR/$name/.files - tar -x -f $PKGNAME -C $INDEX_DIR/$name .pkginstall .pkgreadme >/dev/null 2>&1 - else - # register package, for install - mkdir $INDEX_DIR/$name - tar -x -f $PKGNAME -C $INDEX_DIR/$name .pkginfo - tar -t -f $PKGNAME --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]} > $INDEX_DIR/$name/.files - tar -x -f $PKGNAME -C $INDEX_DIR/$name .pkginstall .pkgreadme >/dev/null 2>&1 + + rm $TMP_TARLIST fi - msg "Successfully install ${color_green}$packagename${color_reset}." + + registerpkg + + msg "Successfully install ${color_green}$packagename${color_reset}." if [ ! "$NO_POSTINSTALL" ] && [ ! "$UPGRADE_PKG" ]; then run_postinstall @@ -129,7 +147,7 @@ installpkg() { KO) msg "postupgrade : ${color_red}FAIL${color_reset}" ;; esac - if [ -f $INDEX_DIR/$name/readme ]; then + if [ -f $INDEX_DIR/$name/.pkgreadme ]; then msg "This package has ${color_green}readme${color_reset}" fi @@ -137,6 +155,15 @@ installpkg() { spkglock } +registerpkg() { + + [ ! -d $INDEX_DIR/$name ] && mkdir $INDEX_DIR/$name + tar -x -f $PKGNAME -C $INDEX_DIR/$name .pkginfo + tar -t -f $PKGNAME --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]} > $INDEX_DIR/$name/.files + tar -x -f $PKGNAME -C $INDEX_DIR/$name .pkginstall .pkgreadme >/dev/null 2>&1 + +} + checkdeps() { for dep in ${depends[@]}; do @@ -174,11 +201,11 @@ checkconflict() { while IFS=' ' read -r line; do pushd $ROOT_DIR - if [ -f "$line" ] || [ -L "$line" ]; then + if [ -e "$line" ]; then fileconflict+=(${line}) fi popd - done < <(tar -tf "$PKGNAME" --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]}) + done < <(tar -tf "$PKGNAME" --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]} | grep -v '/$') if [ "${#fileconflict[@]}" -gt 0 ]; then msgerr "File conflict found:" @@ -194,13 +221,13 @@ upcheckconflict() { while IFS=' ' read -r line; do pushd $ROOT_DIR - if [ -f "$line" ] || [ -L "$line" ]; then + if [ -e "$line" ]; then if [ ! "$(grep -w "$line" "$INDEX_DIR/$name/.files")" ]; then fileconflict+=(${line}) fi fi popd - done < <(tar -tf "$PKGNAME" --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]}) + done < <(tar -tf "$PKGNAME" --exclude=.pkginfo --exclude=.pkginstall --exclude=.pkgreadme ${excludefile[@]} | grep -v '/$') if [ "${#fileconflict[@]}" -gt 0 ]; then msgerr "File conflict found:" @@ -248,14 +275,6 @@ updateinfopages() { popd } -upgradepkg() { - - if [ ! "$NO_BACKUP" ]; then - backupconf - fi - -} - backupconf() { pushd $ROOT_DIR @@ -264,7 +283,7 @@ backupconf() { if [ -e $bkp ]; then msg2 "Backup ${color_purple}$bkp${color_reset}" cp $bkp $BACKUP_DIR - DONE_BACKUP=yes + FILEBACKUP+=($bkp) fi done @@ -273,22 +292,19 @@ backupconf() { restoreconf() { - if [ "$DONE_BACKUP" ]; then - - pushd $ROOT_DIR - - for b in ${backup[@]}; do - if [ -e $b ]; then - mkdir -p $REJECTED_DIR/${b%/*} - mv $b $REJECTED_DIR/$b - msg2 "Restore ${color_purple}$b${color_reset}" - mv $BACKUP_DIR/$(basename ${b}) $b - fi - done - - popd + if [ "${#FILEBACKUP[@]}" -gt 0 ]; then + pushd $ROOT_DIR + for b in ${FILEBACKUP[@]}; do + if [ -e $b ]; then + mkdir -p $REJECTED_DIR/${b%/*} + mv $b $REJECTED_DIR/$b + msg2 "Restore ${color_purple}$b${color_reset}" + mv $BACKUP_DIR/$(basename ${b}) $b + fi + done + popd + fi - fi } checkoutdate() { @@ -539,7 +555,6 @@ main() { elif [ "$REINSTALL_PKG" ]; then msg "Reinstall package ${color_green}$packagename${color_reset}." fi - upgradepkg fi ### INSTALL PACKAGE INTO SYSTEM ###