#!/bin/bash source /etc/de-p1st-repo/arch-repo.cfg || exit # # add new packages to database # function add_to_db(){ echo "Adding new packages to db ..." sort_pkgname_pkgver || return $? echo "For each package: Add latest version to database ..." for PKGNAME in ./db/*; do # # get latest version for $PKGNAME # local LATEST # pick one random version as starting point for the latest version for PKGVER in ./db/"${PKGNAME}"/*; do LATEST="$PKGVER" break done local cmp for PKGVER in ./db/"$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 "./db/${PKGNAME}/${LATEST}") || return $? repo-add --new "${REMOTE_DB_NAME}.db.tar.gz" "${PKG}" || return $? true done } # # create files "./db/$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 ./db/${PKGNAME} with content ${PKG} ..." mkdir -p "db/${PKGNAME}" || return $? echo "${PKG}" > "db/${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 echo "$1 does not seem to be a package!" 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 # function generate_index(){ echo "Generating index.html with links to all packages ..." echo ' privacy1st.de Arch Packages

privacy1st.de Arch Packages

The sources can be found here: https://git.privacy1st.de/langfingaz/arch-pkg

' >> index.html } cd "${REMOTE_PKG_DIR}" || exit add_to_db || exit generate_index || exit