#!/bin/sh
META_SUFFIX=".tar.gz"
# Init ths insaled package database
db_init() {
mkdir -p ${APKDB}
}
# Get description
db_get_description() {
local pkgv
pkgv=$1
if [ "$APK_NOCOMPRESS" ] ; then
cat $APKDB/$pkgv/DESC
else
tar -zxf $APKDB/$pkgv$META_SUFFIX -O ${pkgv}/DESC
fi
}
# All installed pacages
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 [ "$reqby" ] ; then
echo "$reqbys" > $rbfile
else
rm -f $rbfile
fi
fi
db_compress_meta $pkgv
}
#############################################################
#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
#}
#
#
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"
}