fix/improve repository manager

This commit is contained in:
Daniel Langbein 2021-04-25 15:22:27 +02:00
parent 5b5571813b
commit d790b861a0
2 changed files with 103 additions and 6 deletions

View File

@ -2,7 +2,7 @@
_pkgname=repo _pkgname=repo
_reponame=arch-pkg _reponame=arch-pkg
pkgname="de-p1st-$_pkgname" pkgname="de-p1st-$_pkgname"
pkgver=0.0.6 pkgver=0.0.7
pkgrel=1 pkgrel=1
pkgdesc="Bash script to manage remote Arch Linux repository" pkgdesc="Bash script to manage remote Arch Linux repository"
arch=('any') arch=('any')

View File

@ -10,13 +10,110 @@ source /etc/de-p1st-repo/arch-repo.cfg || exit
function add_to_db(){ function add_to_db(){
echo "Adding new packages to db ..." echo "Adding new packages to db ..."
mapfile -t PKGS < <(cat new-pkg.txt) sort_pkgname_pkgver || return $?
for PKG in "${PKGS[@]}"; do
repo-add -n "${REMOTE_DB_NAME}.db.tar.gz" "${PKG}" || exit echo "For each package: Add latest version to database ..."
for PKGNAME in ./pkg/*; do
#
# get latest version for PKGNAME
#
local LATEST
for PKGVER in ./pkg/"${PKGNAME}"/*; do
LATEST="$PKGVER"
break
done
local cmp
for PKGVER in ./pkg/"$PKGNAME"/*; do
# compare the currently known latest version
# with the next version
cmp=$(vercmp "$LATEST" "$PKGVER") || return $?
# if the new version is larger, save it as LATEST
if [ "$cmp" -lt "0" ]; then
LATEST="$PKGVER"
fi
done
#
# add latest version of PKGNAME to database
#
PKG=$(cat "./pkg/${PKGNAME}/${LATEST}") || return $?
repo-add -n "${REMOTE_DB_NAME}.db.tar.gz" "${PKG}" || return $?
true
done done
} }
#
# create files "./pkg/$pkgname/$pkgver" with content "$path_to_file" = "$PKG"
#
function sort_pkgname_pkgver(){
echo "Sorting packages by package name and package version ..."
for PKG in ./*.pkg.tar.{xz,zst}; do
get_pkginfo "$PKG" || return $?
get_pkgname "$PKGINFO" || return $?
get_pkgver "$PKGINFO" || return $?
echo "Creating file pkg/${PKGNAME} with content ${PKG} ..."
mkdir -p "pkg/${PKGNAME}" || return $?
echo "${PKG}" > "pkg/${PKGNAME}/${PKGVER}" || return $?
done
}
#
# get .PKGINFO
#
function get_pkginfo(){
# $1: path to package file
# return: 0 on success
if endswith "$1" ".pkg.tar.xz"; then
PKGINFO=$(tar -xvf "$1" -O .PKGINFO) || return $?
elif endswith "$1" ".pkg.tar.zst"; then
PKGINFO=$(tar -I zstd -xvf "$1" -O .PKGINFO) || return $?
else
return 1
fi
}
#
# get pkgver from $PKGINFO
#
function get_pkgver(){
# return: 0 on success
# remove "pkgver = " as well as tailing whitespace characters
local tmp
tmp=$(echo "$PKGINFO" | grep '^pkgver') || return $?
PKGVER=$(echo "$tmp" | sed 's|^pkgver\s*=\s*||; s|\s*$||') || return $?
}
#
# get pkgname from &PKGINFO
#
function get_pkgname(){
# return: 0 on success
# remove "pkgname = " as well as tailing whitespace characters
local tmp
tmp=$(echo "$PKGINFO" | grep '^pkname') || return $?
PKGVER=$(echo "$tmp" | sed 's|^pkgname\s*=\s*||; s|\s*$||') || return $?
}
# Inspired by: https://stackoverflow.com/questions/2172352/in-bash-how-can-i-check-if-a-string-begins-with-some-value/18558871#18558871
#
# $1 begins with $2
#
beginswith() { case $1 in "$2"*) true;; *) false;; esac; }
#
# $1 ends with $2
#
endswith() { case $1 in *"$2") true;; *) false;; esac; }
# #
# generate index.html # generate index.html
@ -50,5 +147,5 @@ function generate_index(){
cd "${REMOTE_PKG_DIR}" || exit cd "${REMOTE_PKG_DIR}" || exit
add_to_db add_to_db || exit
generate_index generate_index || exit