Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLevente Polyak <anthraxx@archlinux.org>2022-10-10 00:37:51 +0200
committerLevente Polyak <anthraxx@archlinux.org>2023-05-19 22:27:12 +0200
commitb5d5402e439f5edfd642fb4f680d596f5992e874 (patch)
tree856facc3e379ed590e260e7c39cafaebea9e60be /lib
parenta8be7423efb287edd5ef80002a75a853fc0c9c1d (diff)
src: modularize repo layout into a library
This will greatly help us to structure the functionality and commands in a more sane way. We will distribute the sources as actual libraries and reuse code with imports instead of processing everything with m4 and duplicating a lot of code.
Diffstat (limited to 'lib')
-rw-r--r--lib/archroot.sh62
-rw-r--r--lib/common.sh289
-rw-r--r--lib/valid-repos.sh32
-rw-r--r--lib/valid-tags.sh26
4 files changed, 0 insertions, 409 deletions
diff --git a/lib/archroot.sh b/lib/archroot.sh
deleted file mode 100644
index d7917da..0000000
--- a/lib/archroot.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/hint/bash
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-:
-
-# shellcheck disable=2034
-CHROOT_VERSION='v4'
-
-##
-# usage : check_root $keepenv
-##
-orig_argv=("${BASH_SOURCE[0]}" "$@")
-check_root() {
- local keepenv=$1
-
- (( EUID == 0 )) && return
- if type -P sudo >/dev/null; then
- exec sudo --preserve-env=$keepenv -- "${orig_argv[@]}"
- else
- exec su root -c "$(printf ' %q' "${orig_argv[@]}")"
- fi
-}
-
-##
-# usage : is_btrfs( $path )
-# return : whether $path is on a btrfs
-##
-is_btrfs() {
- [[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs ]]
-}
-
-##
-# usage : is_subvolume( $path )
-# return : whether $path is a the root of a btrfs subvolume (including
-# the top-level subvolume).
-##
-is_subvolume() {
- [[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs && "$(stat -c %i "$1")" == 256 ]]
-}
-
-##
-# usage : subvolume_delete_recursive( $path )
-#
-# Find all btrfs subvolumes under and including $path and delete them.
-##
-subvolume_delete_recursive() {
- local subvol
-
- is_subvolume "$1" || return 0
-
- while IFS= read -d $'\0' -r subvol; do
- if ! subvolume_delete_recursive "$subvol"; then
- return 1
- fi
- done < <(find "$1" -mindepth 1 -xdev -depth -inum 256 -print0)
- if ! btrfs subvolume delete "$1" &>/dev/null; then
- error "Unable to delete subvolume %s" "$subvol"
- return 1
- fi
-
- return 0
-}
diff --git a/lib/common.sh b/lib/common.sh
deleted file mode 100644
index d2351af..0000000
--- a/lib/common.sh
+++ /dev/null
@@ -1,289 +0,0 @@
-#!/hint/bash
-#
-# This may be included with or without `set -euE`
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-[[ -z ${_INCLUDE_COMMON_SH:-} ]] || return 0
-_INCLUDE_COMMON_SH="$(set +o|grep nounset)"
-
-set +u +o posix
-# shellcheck disable=1091
-. /usr/share/makepkg/util.sh
-$_INCLUDE_COMMON_SH
-
-# Avoid any encoding problems
-export LANG=C
-
-# Set buildtool properties
-export BUILDTOOL=devtools
-export BUILDTOOLVER=m4_devtools_version
-
-# Set common properties
-export PACMAN_KEYRING_DIR=/etc/pacman.d/gnupg
-export GITLAB_HOST=gitlab.archlinux.org
-export GIT_REPO_SPEC_VERSION=1
-export GIT_PACKAGING_NAMESPACE=archlinux/packaging/packages
-export GIT_PACKAGING_NAMESPACE_ID=11323
-export GIT_PACKAGING_URL_SSH="ssh://git@${GITLAB_HOST}/${GIT_PACKAGING_NAMESPACE}"
-export GIT_PACKAGING_URL_HTTPS="https://${GITLAB_HOST}/${GIT_PACKAGING_NAMESPACE}"
-export PACKAGING_REPO_RELEASE_HOST=repos.archlinux.org
-
-# check if messages are to be printed using color
-if [[ -t 2 && "$TERM" != dumb ]]; then
- colorize
-else
- # shellcheck disable=2034
- declare -gr ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW=''
-fi
-
-stat_busy() {
- local mesg=$1; shift
- # shellcheck disable=2059
- printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}...${ALL_OFF}" "$@" >&2
-}
-
-stat_progress() {
- # shellcheck disable=2059
- printf "${BOLD}.${ALL_OFF}" >&2
-}
-
-stat_done() {
- # shellcheck disable=2059
- printf "${BOLD}done${ALL_OFF}\n" >&2
-}
-
-_setup_workdir=false
-setup_workdir() {
- [[ -z ${WORKDIR:-} ]] && WORKDIR=$(mktemp -d --tmpdir "${0##*/}.XXXXXXXXXX")
- _setup_workdir=true
- trap 'trap_abort' INT QUIT TERM HUP
- trap 'trap_exit' EXIT
-}
-
-cleanup() {
- if [[ -n ${WORKDIR:-} ]] && $_setup_workdir; then
- rm -rf "$WORKDIR"
- fi
- exit "${1:-0}"
-}
-
-abort() {
- error 'Aborting...'
- cleanup 255
-}
-
-trap_abort() {
- trap - EXIT INT QUIT TERM HUP
- abort
-}
-
-trap_exit() {
- local r=$?
- trap - EXIT INT QUIT TERM HUP
- cleanup $r
-}
-
-die() {
- (( $# )) && error "$@"
- cleanup 255
-}
-
-##
-# usage : lock( $fd, $file, $message, [ $message_arguments... ] )
-##
-lock() {
- # Only reopen the FD if it wasn't handed to us
- if ! [[ "/dev/fd/$1" -ef "$2" ]]; then
- mkdir -p -- "$(dirname -- "$2")"
- eval "exec $1>"'"$2"'
- fi
-
- if ! flock -n "$1"; then
- stat_busy "${@:3}"
- flock "$1"
- stat_done
- fi
-}
-
-##
-# usage : slock( $fd, $file, $message, [ $message_arguments... ] )
-##
-slock() {
- # Only reopen the FD if it wasn't handed to us
- if ! [[ "/dev/fd/$1" -ef "$2" ]]; then
- mkdir -p -- "$(dirname -- "$2")"
- eval "exec $1>"'"$2"'
- fi
-
- if ! flock -sn "$1"; then
- stat_busy "${@:3}"
- flock -s "$1"
- stat_done
- fi
-}
-
-##
-# usage : lock_close( $fd )
-##
-lock_close() {
- local fd=$1
- # https://github.com/koalaman/shellcheck/issues/862
- # shellcheck disable=2034
- exec {fd}>&-
-}
-
-##
-# usage: pkgver_equal( $pkgver1, $pkgver2 )
-##
-pkgver_equal() {
- if [[ $1 = *-* && $2 = *-* ]]; then
- # if both versions have a pkgrel, then they must be an exact match
- [[ $1 = "$2" ]]
- else
- # otherwise, trim any pkgrel and compare the bare version.
- [[ ${1%%-*} = "${2%%-*}" ]]
- fi
-}
-
-##
-# usage: find_cached_package( $pkgname, $pkgver, $arch )
-#
-# $pkgver can be supplied with or without a pkgrel appended.
-# If not supplied, any pkgrel will be matched.
-##
-shopt -s extglob
-find_cached_package() {
- local searchdirs=("$PWD" "$PKGDEST") results=()
- local targetname=$1 targetver=$2 targetarch=$3
- local dir pkg packages pkgbasename name ver rel arch r results
-
- for dir in "${searchdirs[@]}"; do
- [[ -d $dir ]] || continue
-
- shopt -s extglob nullglob
- mapfile -t packages < <(printf "%s\n" "$dir"/"${targetname}"-"${targetver}"-*"${targetarch}".pkg.tar?(.!(sig|*.*)))
- shopt -u extglob nullglob
-
- for pkg in "${packages[@]}"; do
- [[ -f $pkg ]] || continue
-
- # avoid adding duplicates of the same inode
- for r in "${results[@]}"; do
- [[ $r -ef $pkg ]] && continue 2
- done
-
- # split apart package filename into parts
- pkgbasename=${pkg##*/}
- pkgbasename=${pkgbasename%.pkg.tar*}
-
- arch=${pkgbasename##*-}
- pkgbasename=${pkgbasename%-"$arch"}
-
- rel=${pkgbasename##*-}
- pkgbasename=${pkgbasename%-"$rel"}
-
- ver=${pkgbasename##*-}
- name=${pkgbasename%-"$ver"}
-
- if [[ $targetname = "$name" && $targetarch = "$arch" ]] &&
- pkgver_equal "$targetver" "$ver-$rel"; then
- results+=("$pkg")
- fi
- done
- done
-
- case ${#results[*]} in
- 0)
- return 1
- ;;
- 1)
- printf '%s\n' "${results[0]}"
- return 0
- ;;
- *)
- error 'Multiple packages found:'
- printf '\t%s\n' "${results[@]}" >&2
- return 1
- esac
-}
-shopt -u extglob
-
-check_package_validity(){
- local pkgfile=$1
- if grep -q "packager = Unknown Packager" <(bsdtar -xOqf "$pkgfile" .PKGINFO); then
- die "PACKAGER was not set when building package"
- fi
- hashsum=sha256sum
- pkgbuild_hash=$(awk -v"hashsum=$hashsum" -F' = ' '$1 == "pkgbuild_"hashsum {print $2}' <(bsdtar -xOqf "$pkgfile" .BUILDINFO))
- if [[ "$pkgbuild_hash" != "$($hashsum PKGBUILD|cut -d' ' -f1)" ]]; then
- die "PKGBUILD $hashsum mismatch: expected $pkgbuild_hash"
- fi
-}
-
-
-# usage: grep_pkginfo pkgfile pattern
-grep_pkginfo() {
- local _ret=()
- mapfile -t _ret < <(bsdtar -xOqf "$1" ".PKGINFO" | grep "^${2} = ")
- printf '%s\n' "${_ret[@]#${2} = }"
-}
-
-
-# Get the package name
-getpkgname() {
- local _name
-
- _name="$(grep_pkginfo "$1" "pkgname")"
- if [[ -z $_name ]]; then
- error "Package '%s' has no pkgname in the PKGINFO. Fail!" "$1"
- exit 1
- fi
-
- echo "$_name"
-}
-
-
-# Get the package base or name as fallback
-getpkgbase() {
- local _base
-
- _base="$(grep_pkginfo "$1" "pkgbase")"
- if [[ -z $_base ]]; then
- getpkgname "$1"
- else
- echo "$_base"
- fi
-}
-
-
-getpkgdesc() {
- local _desc
-
- _desc="$(grep_pkginfo "$1" "pkgdesc")"
- if [[ -z $_desc ]]; then
- error "Package '%s' has no pkgdesc in the PKGINFO. Fail!" "$1"
- exit 1
- fi
-
- echo "$_desc"
-}
-
-
-get_tag_from_pkgver() {
- local pkgver=$1
- local tag=${pkgver}
-
- tag=${tag/:/-}
- tag=${tag//~/.}
- echo "${tag}"
-}
-
-
-is_debug_package() {
- local pkgfile=${1} pkgbase pkgname pkgdesc
- pkgbase="$(getpkgbase "${pkgfile}")"
- pkgname="$(getpkgname "${pkgfile}")"
- pkgdesc="$(getpkgdesc "${pkgfile}")"
- [[ ${pkgdesc} == "Detached debugging symbols for "* && ${pkgbase}-debug = "${pkgname}" ]]
-}
diff --git a/lib/valid-repos.sh b/lib/valid-repos.sh
deleted file mode 100644
index 9ac9639..0000000
--- a/lib/valid-repos.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/hint/bash
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-:
-
-# shellcheck disable=2034
-_repos=(
- staging
- testing
- core
- extra
- community-staging
- community-testing
- community
- multilib-staging
- multilib-testing
- multilib
- gnome-unstable
- kde-unstable
-)
-
-# shellcheck disable=2034
-_build_repos=(
- staging
- testing
- extra
- multilib-staging
- multilib-testing
- multilib
- gnome-unstable
- kde-unstable
-)
diff --git a/lib/valid-tags.sh b/lib/valid-tags.sh
deleted file mode 100644
index d628fd1..0000000
--- a/lib/valid-tags.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/hint/bash
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-:
-
-# shellcheck disable=2034
-_arch=(
- x86_64
- any
-)
-
-# shellcheck disable=2034
-_tags=(
- core-x86_64 core-any
- extra-x86_64 extra-any
- multilib-x86_64
- staging-x86_64 staging-any
- testing-x86_64 testing-any
- multilib-testing-x86_64
- multilib-staging-x86_64
- community-x86_64 community-any
- community-staging-x86_64 community-staging-any
- community-testing-x86_64 community-testing-any
- kde-unstable-x86_64 kde-unstable-any
- gnome-unstable-x86_64 gnome-unstable-any
-)