#!/bin/sh
META_SUFFIX=".tar.gz"
# Init ths insaled package database
db_init() {
mkdir -p "$APKDB"
}
# All installed packages
db_all_installed() {
local opwd i
opwd="$PWD"
cd "$APKDB"
ls -d *-[0-9]* 2>/dev/null | sed 's/'$META_SUFFIX'$//'
cd "$opwd"
}
############################################################
## all installed packages with description
#db_all_installed_with_desc() {
# local opwd
# opwd=`pwd`
# cd ${APKDB}
# for i in *$META_SUFFIX ; do
# pkgv=`basename $i $META_SUFFIX`
# echo -n -e "$pkgv\t"
# echo `db_get_description ${pkgv}`
# done
# cd $opwd
#}
##########################################################
# is package installed?
# returns pkgv or nothing if pkg is not installed
db_get_installed_pkgv() {
local p="$1"
local regexp
if has_version "$p" ; then
regexp="^$p\$"
else
regexp="^$p-[0-9].*"
fi
db_all_installed | grep "$regexp"
}
############################################################
db_decompress_meta() {
local metafile="$APKDB/$1$META_SUFFIX"
[ "$APK_NOCOMPRESS" ] && return
[ ! -f "$metafile" ] && die "$1 does not seem to be installed."
tar -C "$APKDB" -zxf "$metafile"
}
#############################################################
db_compress_meta() {
local opwd metaball pkgv
[ "$APK_NOCOMPRESS" ] && return
opwd="$PWD"
pkgv="$1"
metaball="$pkgv$META_SUFFIX"
cd "$APKDB"
[ ! -d "$pkgv" ] &&\
die "db_compress_meta: $APKDB/$pkgv is not a directory or is missing"
rm -f "$metaball"
tar -czf "$metaball" $pkgv
rm -rf "$pkgv"
cd "$opwd"
}
db_register_required_by() {
local pkgv="`db_get_installed_pkgv $1`"
local reqby_pkgv="$2"
[ -z "$pkgv" ] && return 1
db_decompress_meta $pkgv
echo "$reqby_pkgv" >> "$APKDB/$pkgv/REQUIRED_BY"
db_compress_meta $pkgv
}
db_unregister_required_by() {
local pkgv="`db_get_installed_pkgv $1`"
local reqby_pkgv=$2
local reqbys
local rbfile="$APKDB/$pkgv/REQUIRED_BY"
[ -z "$pkgv" ] && return 1
db_decompress_meta $pkgv
if [ -f "$rbfile" ] ; then
reqbys="`cat \"$rbfile\" | grep -v $reqby_pkgv`"
if [ "$reqbys" ] ; then
echo "$reqbys" > "$rbfile"
else
rm -f "$rbfile"
fi
fi
db_compress_meta $pkgv
}
# unregister package in dependencies REQUIRED_BY
db_unregister_pkgv() {
local i pkgv="$1"
local deps="`db_get_pkgv_deps $pkgv`"
if [ "$deps" ] ; then
for i in $deps ; do
[ "$VERBOSE" ] && echo "unregistering $i required by $pkgv"
[ "$DRYRUN" ] || db_unregister_required_by $i $pkgv
done
fi
}
#############################################################
#db_pkgv_metafile() {
# local opwd pkgv
# opwd=`pwd`
# pkgv=$1
# cd ${APKDB}
# tar -zxf ${pkgv}$META_SUFFIX -O ${pkgv}/$2
# cd $opwd
#}
#
#db_pkgv_listfiles() {
# db_pkgv_metafile $1 CONTENTS
#}
#
#
#db_pkgv_backupfiles() {
# db_pkgv_metafile $1 BACKUPFILES
#}
#
############################################################
## create sha1 sum of package files
## Needs the meta to be in $APK_TMPDIR
#create_sha1sum() {
# local sha1file listfile opwd
# opwd=`pwd`
# listfile=${APK_TMPDIR}/${1}/CONTENTS
# sha1file=${APK_TMPDIR}/${1}/SHA1
# cd $ROOT
# rm -f ${sha1file}
# while read i ; do
# [ -f ${i} ] && sha1sum ${i} >> ${sha1file}
# done < ${listfile}
# cd $opwd
#}
#
#
############################################################
## Create sha1 sum of backup files
#create_backup_sha1sum() {
# local sha1file listfile opwd
# opwd=`pwd`
# listfile=${APK_TMPDIR}/${1}/BACKUPFILES
# # if there is no config file, just return
# [ ! -f $listfile ] && return
# sha1file=${APKDB}/${1}.cfg.sha1
# cd ${ROOT}
# rm -f ${sha1file}
# while read i ; do
# [ -f ${i} ] && sha1sum ${i} >> ${sha1file}
# done < ${listfile}
# cd $opwd
#}
# create checksums for local files.
db_create_localsums() {
local opwd="$PWD"
local lf="$APKDB/$1/LOCAL"
local files
if [ -f "$lf" ] ; then
cd "$ROOT"
sed 's:^/::' "$lf" | while read f ; do
[ -e "$f" ] && find "$f" -type f | \
xargs "$APK_MKSUM" >> "$APKDB/$1/$APK_SUM"
done
cd "$opwd"
fi
}
db_get_pkgv_meta() {
if [ "$APK_NOCOMPRESS" ] ; then
cat "$APKDB/$1/$2" 2>/dev/null
else
tar -O -zxf "$APKDB/$1$META_SUFFIX" $1/$2 2>/dev/null
fi
}
db_get_pkgv_deps() {
db_get_pkgv_meta "$1" DEPEND
}
db_get_pkgv_reqby() {
db_get_pkgv_meta "$1" REQUIRED_BY
}
# return a list of installed pkgv's from given glob
db_glob() {
local sufx re
[ -z "$APK_NOCOMPRESS" ] && sufx=".tar.gz"
if echo "$1" | grep "^:" >/dev/null ; then
re=`echo "$1" | sed 's/^://'`
db_all_installed | grep "$re"
elif has_wildcard "$1" || has_version "$1" ; then
ls "$APKDB/"$1$sufx 2>/dev/null | sed 's|.*/|| ; s|'$META_SUFFIX'||'
else
ls "$APKDB/$1"-[0-9]* 2>/dev/null | sed 's|.*/|| ; s|'$META_SUFFIX'||'
fi
}
# remove all meta data for given package
db_zap_pkgv_meta() {
local p="$APKDB/$1"
local pgz="$p$META_SUFFIX"
[ -d "$p" ] && rm -rf "$p"
[ -f "$pgz" ] && rm -f "$pgz"
}
#find the package to which specified file belongs.
db_belongs() {
local pv
for pv in `db_all_installed` ; do
db_get_pkgv_meta $pv CONTENTS | grep "/$1\$" >/dev/null && echo $pv
done
}