This commit is contained in:
emmett1
2017-09-21 07:20:21 +08:00
parent 0821c007f5
commit eed6a0e950

View File

@@ -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 ###