mirror of
https://github.com/outbackdingo/scratchpkg.git
synced 2026-03-19 17:13:42 +00:00
scratch, pkgadd
This commit is contained in:
53
pkgadd
53
pkgadd
@@ -114,7 +114,7 @@ ret() {
|
||||
}
|
||||
|
||||
isinstalled() {
|
||||
if [ -s "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo"; then
|
||||
if [ -s "$ROOT_DIR/$PKGDB_DIR/$1" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -132,7 +132,7 @@ run_scripts() {
|
||||
parse_opts $(extract_opts "$@")
|
||||
|
||||
SCRATCHPKG_DIR="var/lib/scratchpkg"
|
||||
PKGDB_DIR="$SCRATCHPKG_DIR/index"
|
||||
PKGDB_DIR="$SCRATCHPKG_DIR/db"
|
||||
LOCK_FILE="$SCRATCHPKG_DIR/spkg.lock"
|
||||
|
||||
ROOT_DIR="${ROOT_DIR%/}" # remove trailing slash
|
||||
@@ -187,8 +187,8 @@ name=${noextname%-*}
|
||||
|
||||
# get package information if installed
|
||||
if isinstalled $name; then
|
||||
iversion=$(grep ^version $ROOT_DIR/$PKGDB_DIR/$name/.pkginfo | cut -d " " -f3-)
|
||||
irelease=$(grep ^release $ROOT_DIR/$PKGDB_DIR/$name/.pkginfo | cut -d " " -f3-)
|
||||
iversion=$(head -n1 $ROOT_DIR/$PKGDB_DIR/$name | awk '{print $1}')
|
||||
irelease=$(head -n1 $ROOT_DIR/$PKGDB_DIR/$name | awk '{print $2}')
|
||||
ALREADYINSTALLED=yes
|
||||
fi
|
||||
|
||||
@@ -230,13 +230,13 @@ echo "$opr: $name-$version-$release..."
|
||||
|
||||
# check for file conflict
|
||||
if [ ! "$IGNORE_CONFLICT" ]; then
|
||||
grep -Ev "^.pkg*" "$TMP_PKGADD" | grep -v '/$' | while read -r line; do
|
||||
grep -v '/$' "$TMP_PKGADD" | while read -r line; do
|
||||
if [ "$line" = "${line%.*}.spkgnew" ]; then
|
||||
line=${line%.*}
|
||||
fi
|
||||
if [ -e "$ROOT_DIR/$line" ] || [ -L "$ROOT_DIR/$line" ]; then
|
||||
if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then
|
||||
if ! grep -Fqx "$line" "$ROOT_DIR/$PKGDB_DIR/$name/.files"; then
|
||||
if ! grep -Fqx "$line" "$ROOT_DIR/$PKGDB_DIR/$name"; then
|
||||
echo "$line"
|
||||
touch "$TMP_CONFLICT"
|
||||
fi
|
||||
@@ -256,7 +256,7 @@ fi
|
||||
rm -f $TMP_PKGINSTALL
|
||||
|
||||
# extract package into ROOT_DIR
|
||||
tar -xvhpf "$PKGNAME" -C "$ROOT_DIR"/ $excludefile | while read -r line; do
|
||||
tar -xvhpf "$PKGNAME" -C "$ROOT_DIR"/ | while read -r line; do
|
||||
if [ "$line" = "${line%.*}.spkgnew" ]; then
|
||||
line=${line%.*}
|
||||
if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then
|
||||
@@ -273,40 +273,17 @@ done
|
||||
|
||||
# remove old files from old package that not exist in new package
|
||||
if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then
|
||||
rmlist_file="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_file"
|
||||
rmlist_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_dir"
|
||||
reserve_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.reserve_dir"
|
||||
rmlist_all="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_all"
|
||||
grep '/$' $ROOT_DIR/$PKGDB_DIR/*/.files \
|
||||
| grep -v $ROOT_DIR/$PKGDB_DIR/$name/.files \
|
||||
| awk -F : '{print $2}' \
|
||||
| sort \
|
||||
| uniq > $reserve_dir # get list reserved dirs
|
||||
grep -Fxv -f "$TMP_PKGINSTALL" $ROOT_DIR/$PKGDB_DIR/$name/.files > $rmlist_all # get list files and dirs to remove
|
||||
grep -v '/$' "$rmlist_all" | tac > "$rmlist_file" # get files only to remove
|
||||
grep -Fxv -f "$reserve_dir" "$rmlist_all" | grep '/$' | tac > "$rmlist_dir" # get dirs only (safe) to remove
|
||||
(cd "$ROOT_DIR"/
|
||||
[ -s $rmlist_file ] && {
|
||||
cat $rmlist_file | while read -r line; do
|
||||
rm $VERBOSE_INSTALL "$line"
|
||||
done
|
||||
}
|
||||
[ -s $rmlist_dir ] && {
|
||||
cat $rmlist_dir | while read -r line; do
|
||||
rmdir $VERBOSE_INSTALL "$line"
|
||||
done
|
||||
}
|
||||
)
|
||||
rm -f "$rmlist_file" "$rmlist_dir" "$reserve_dir" "$rmlist_all"
|
||||
tail -n+2 "$ROOT_DIR/$PKGDB_DIR/$name" | tac | while read -r line; do
|
||||
case $line in
|
||||
*/) grep "^$line$" $ROOT_DIR/$PKGDB_DIR/* "$TMP_PKGINSTALL" | grep -qv "$ROOT_DIR/$PKGDB_DIR/$name" || rmdir $([ "$VERBOSE_INSTALL" ] && echo -v) "$ROOT_DIR/$line";;
|
||||
*) grep -q "^$line$" "$TMP_PKGINSTALL" || rm $([ "$VERBOSE_INSTALL" ] && echo -v) "$ROOT_DIR/$line";;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
# register package into database
|
||||
rm -fr "$ROOT_DIR/$PKGDB_DIR/$name"
|
||||
mkdir "$ROOT_DIR/$PKGDB_DIR/$name"
|
||||
echo "name = $name" > "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
|
||||
echo "version = $version" >> "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
|
||||
echo "release = $release" >> "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
|
||||
install -m644 "$TMP_PKGINSTALL" "$ROOT_DIR/$PKGDB_DIR/$name/.files"
|
||||
echo "$version $release" > "$ROOT_DIR/$PKGDB_DIR/$name"
|
||||
cat "$TMP_PKGINSTALL" >> "$ROOT_DIR/$PKGDB_DIR/$name"
|
||||
|
||||
# running ldconfig
|
||||
if [ -x "$ROOT_DIR"/sbin/ldconfig ]; then
|
||||
|
||||
52
pkgdel
52
pkgdel
@@ -91,12 +91,12 @@ parse_opts() {
|
||||
|
||||
ret() {
|
||||
# remove lock file on exit
|
||||
rm -f "$ROOT_DIR/$LOCK_FILE" "$reserve" "$dirs" "$remove" "$files"
|
||||
rm -f "$ROOT_DIR/$LOCK_FILE"
|
||||
exit $1
|
||||
}
|
||||
|
||||
isinstalled() {
|
||||
if [ -s "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo"; then
|
||||
if [ -s "$ROOT_DIR/$PKGDB_DIR/$1" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -143,50 +143,24 @@ if ! isinstalled "$RMNAME"; then
|
||||
ret 1
|
||||
fi
|
||||
|
||||
name=$(grep ^name $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
|
||||
version=$(grep ^version $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
|
||||
release=$(grep ^release $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
|
||||
name=$RMNAME
|
||||
version=$(head -n1 $ROOT_DIR/$PKGDB_DIR/$name | awk '{print $1}')
|
||||
release=$(head -n1 $ROOT_DIR/$PKGDB_DIR/$name | awk '{print $2}')
|
||||
|
||||
if [ -z "$name" ] && [ -z "$version" ] && [ -z "$release" ]; then
|
||||
if [ -z "$version" ] && [ -z "$release" ]; then
|
||||
msgerr "Package '$RMNAME' not installed but exist in database."
|
||||
ret 1
|
||||
fi
|
||||
|
||||
# create list for reserve and remove (dirs and files)
|
||||
reserve="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_reserve"
|
||||
remove="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_remove"
|
||||
dirs="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_dirs"
|
||||
files="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_files"
|
||||
|
||||
grep '/$' $ROOT_DIR/$PKGDB_DIR/*/.files \
|
||||
| grep -v $ROOT_DIR/$PKGDB_DIR/$name/.files \
|
||||
| awk -F : '{print $2}' \
|
||||
| sort \
|
||||
| uniq > "$reserve"
|
||||
grep '/$' "$ROOT_DIR/$PKGDB_DIR/$name/.files" > "$remove"
|
||||
grep -Fxv -f "$reserve" "$remove" | tac > "$dirs"
|
||||
grep -v '/$' "$ROOT_DIR/$PKGDB_DIR/$name/.files" | tac >> "$files"
|
||||
|
||||
echo "remove: $name-$version-$release..."
|
||||
|
||||
# remove files and dirs
|
||||
(cd "$ROOT_DIR"/
|
||||
[ -s $files ] && {
|
||||
cat $files | while read -r line; do
|
||||
rm $VERBOSE_REMOVE "$line"
|
||||
done
|
||||
}
|
||||
[ -s $dirs ] && {
|
||||
cat $dirs | while read -r line; do
|
||||
rmdir $VERBOSE_REMOVE "$line"
|
||||
done
|
||||
}
|
||||
)
|
||||
|
||||
rm -f "$reserve" "$dirs" "$remove" "$files"
|
||||
tail -n+2 "$ROOT_DIR/$PKGDB_DIR"/$name | tac | while read -r line; do
|
||||
case $line in
|
||||
*/) grep "^$line$" "$ROOT_DIR/$PKGDB_DIR"/* | grep -qv "$ROOT_DIR/$PKGDB_DIR"/$name: || rmdir $([ "$VERBOSE_REMOVE" ] && echo -v) "$ROOT_DIR/$line";;
|
||||
*) rm $([ "$VERBOSE_REMOVE" ] && echo -v) "$ROOT_DIR/$line";;
|
||||
esac
|
||||
done
|
||||
|
||||
# remove from database
|
||||
rm -rf "$ROOT_DIR/$PKGDB_DIR/$name"
|
||||
rm -f "$ROOT_DIR/$PKGDB_DIR/$name"
|
||||
|
||||
# running ldconfig
|
||||
if [ -x "$ROOT_DIR"/sbin/ldconfig ]; then
|
||||
|
||||
12
scratch
12
scratch
@@ -18,12 +18,12 @@
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
RED='\e[0;31m'
|
||||
GREEN='\e[0;32m'
|
||||
YELLOW='\e[0;33m'
|
||||
CYAN='\e[0;36m'
|
||||
PURPLE='\e[0;35m'
|
||||
CRESET='\e[0m'
|
||||
RED='\033[31m'
|
||||
GREEN='\033[32m'
|
||||
YELLOW='\033[33m'
|
||||
CYAN='\033[36m'
|
||||
PURPLE='\033[35m'
|
||||
CRESET='\033[0m'
|
||||
|
||||
nocolor() {
|
||||
RED=
|
||||
|
||||
Reference in New Issue
Block a user