summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rwxr-xr-xany-to-ours5
-rw-r--r--config7
-rw-r--r--config.local.svn-community11
-rw-r--r--config.local.svn-packages11
-rw-r--r--config.orig54
-rwxr-xr-xcreate-repo8
-rwxr-xr-xcreaterepos6
-rwxr-xr-xcron-jobs/ftpdir-cleanup40
-rwxr-xr-xcron-jobs/integrity-check6
-rwxr-xr-xcron-jobs/repo-sanity-check4
-rwxr-xr-xcron-jobs/sourceballs41
-rw-r--r--cron-jobs/sourceballs.skip24
-rwxr-xr-xcron-jobs/sourceballs24
-rwxr-xr-xcron-jobs/update-abs-tarballs2
-rwxr-xr-xcron-jobs/update-web-db6
-rwxr-xr-xdb-check-nonfree6
-rwxr-xr-xdb-cleanup5
-rw-r--r--db-functions193
-rwxr-xr-xdb-list-unsigned-packages8
-rwxr-xr-xdb-move46
-rwxr-xr-xdb-remove25
-rwxr-xr-xdb-repo-add6
-rwxr-xr-xdb-repo-remove6
-rwxr-xr-xdb-sync270
-rwxr-xr-xdb-update38
-rwxr-xr-xget-repos17
-rwxr-xr-xgit-pbs44
-rwxr-xr-xlibremessages77
-rw-r--r--local_config33
-rwxr-xr-xmigrate-repo2
-rwxr-xr-xmkrepo4
-rwxr-xr-xrepo-remove561
-rwxr-xr-xrepo-restore-to-normal4
-rw-r--r--test/lib/common.inc143
-rwxr-xr-xtest/test.d/create-filelists.sh18
-rwxr-xr-xtest/test.d/db-move.sh12
-rwxr-xr-xtest/test.d/db-remove.sh4
-rwxr-xr-xtest/test.d/db-repo-add.sh4
-rwxr-xr-xtest/test.d/db-repo-remove.sh4
-rwxr-xr-xtest/test.d/db-update.sh32
-rwxr-xr-xtest/test.d/ftpdir-cleanup.sh8
-rwxr-xr-xtest/test.d/pool-transition.sh152
-rwxr-xr-xtest/test.d/signed-packages.sh25
-rwxr-xr-xtest/test.d/sourceballs.sh6
-rwxr-xr-xtest/test.d/testing2x.sh4
-rwxr-xr-xtesting2x32
-rwxr-xr-xyf-update12
48 files changed, 584 insertions, 1448 deletions
diff --git a/TODO b/TODO
index 3219b1c..9dd4b52 100644
--- a/TODO
+++ b/TODO
@@ -7,4 +7,4 @@
* Fix db-move
- - Make it use abslibre \ No newline at end of file
+ - Make it use abslibre
diff --git a/any-to-ours b/any-to-ours
index a1d6686..a1697c7 100755
--- a/any-to-ours
+++ b/any-to-ours
@@ -7,9 +7,8 @@ trap_exit() {
exit 1
}
-source $(dirname $0)/config
-source $(dirname $0)/local_config
-source $(dirname $0)/libremessages
+source "$(dirname "$(readlink -e "$0")")/config"
+source "$(dirname "$(readlink -e "$0")")/libremessages"
# From makepkg
set -E
diff --git a/config b/config
index 8b8117f..3b7c13a 100644
--- a/config
+++ b/config
@@ -1,6 +1,5 @@
-#!/bin/bash
+#/bin/bash # as a hint to text editors
FTP_BASE="/srv/http/repo/public"
-ARCH_BASE="/srv/http/repo/public"
SVNREPO="/var/abs"
# Repos from Arch
@@ -12,7 +11,7 @@ USERREPOS=('~smv' '~xihh' '~brendan' '~lukeshu' '~emulatorman' '~aurelien' '~jor
# Community project repos
PROJREPOS=('pcr' 'kernels' 'cross' 'java' 'java-ugly' 'nonprism')
# Remote repos
-PKGREPOS=(${ARCHREPOS[@]} ${OURREPOS[@]} ${USERREPOS[@]} ${PROJREPOS[@]})
+PKGREPOS=("${ARCHREPOS[@]}" "${OURREPOS[@]}" "${USERREPOS[@]}" "${PROJREPOS[@]}")
PKGPOOL='pool/packages'
SRCPOOL='sources/packages'
@@ -37,7 +36,7 @@ REQUIRE_SIGNATURE=true
LOCK_DELAY=10
LOCK_TIMEOUT=300
-[ -n "${STAGING:-}" ] || STAGING="$FTP_BASE/staging"
+[ -n "${STAGING:-}" ] || STAGING="$HOME/staging"
TMPDIR="/tmp"
ARCHARCHES=(i686 x86_64)
OURARCHES=(mips64el)
diff --git a/config.local.svn-community b/config.local.svn-community
new file mode 100644
index 0000000..105ea66
--- /dev/null
+++ b/config.local.svn-community
@@ -0,0 +1,11 @@
+PKGREPOS=('community' 'community-testing' 'community-staging' 'multilib' 'multilib-testing' 'multilib-staging')
+PKGPOOL='pool/community'
+SRCPOOL='sources/community'
+SVNREPO='file:///srv/repos/svn-community/svn'
+SVNUSER='svn-community'
+TESTING_REPO='community-testing'
+STABLE_REPOS=('community')
+
+CLEANUP_DESTDIR="/srv/repos/svn-community/package-cleanup"
+SOURCE_CLEANUP_DESTDIR="/srv/repos/svn-community/source-cleanup"
+TMPDIR="/srv/repos/svn-community/tmp"
diff --git a/config.local.svn-packages b/config.local.svn-packages
new file mode 100644
index 0000000..958a483
--- /dev/null
+++ b/config.local.svn-packages
@@ -0,0 +1,11 @@
+PKGREPOS=('core' 'extra' 'testing' 'staging' 'kde-unstable' 'gnome-unstable')
+PKGPOOL='pool/packages'
+SRCPOOL='sources/packages'
+SVNREPO='file:///srv/repos/svn-packages/svn'
+SVNUSER='svn-packages'
+TESTING_REPO='testing'
+STABLE_REPOS=('core' 'extra')
+
+CLEANUP_DESTDIR="/srv/repos/svn-packages/package-cleanup"
+SOURCE_CLEANUP_DESTDIR="/srv/repos/svn-packages/source-cleanup"
+TMPDIR="/srv/repos/svn-packages/tmp"
diff --git a/config.orig b/config.orig
deleted file mode 100644
index a32f82f..0000000
--- a/config.orig
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-<<<<<<< HEAD
-FTP_BASE="/srv/http/repo/public"
-ARCH_BASE="/srv/http/repo/public"
-SVNREPO="/srv/http/repo/abslibre"
-=======
-FTP_BASE="/srv/http/repo/public/temprepo"
-ARCH_BASE="/srv/http/repo/public/temprepo"
-SVNREPO="/var/abs"
->>>>>>> 801ea2c927ace5ee892209dd8e3c1044e1b3842e
-
-# Repos from Arch
-ARCHREPOS=('core' 'testing') #'extra' 'community' 'testing' 'multilib')
-# Official Parabola repos
-OURREPOS=('libre' 'libre-testing')
-# User repos
-USERREPOS=('~fauno' '~smv' '~xihh' '~mtjm' '~brendan')
-# Community project repos
-PROJREPOS=('social' 'elementary' 'kernels' 'radio' 'security' 'sugar')
-PKGREPOS=(${ARCHREPOS[@]} ${OURREPOS[@]} ${USERREPOS[@]} ${PROJREPOS[@]})
-PKGPOOL='pool/packages'
-SRCPOOL='sources/packages'
-
-CLEANUP_DESTDIR="$FTP_BASE/old/packages"
-CLEANUP_DRYRUN=true
-# Time in days to keep moved packages
-CLEANUP_KEEP=30
-
-SOURCE_CLEANUP_DESTDIR="$FTP_BASE/old/sources"
-SOURCE_CLEANUP_DRYRUN=true
-# Time in days to keep moved sourcepackages
-SOURCE_CLEANUP_KEEP=30
-
-REQUIRE_SIGNATURE=true
-
-LOCK_DELAY=10
-LOCK_TIMEOUT=300
-
-STAGING="$FTP_BASE/staging"
-TMPDIR="/tmp"
-ARCHARCHES=(i686 x86_64)
-OURARCHES=(mips64el)
-ARCHES=(${ARCHARCHES[@]} ${OURARCHES[@]})
-DBEXT=".db.tar.gz"
-FILESEXT=".files.tar.gz"
-PKGEXT=".pkg.tar.?z"
-SRCEXT=".src.tar.gz"
-
-<<<<<<< HEAD
-MAKEPKGCONF="~/.makepkg.conf"
-=======
-MAKEPKGCONF="/etc/makepkg.conf"
->>>>>>> 801ea2c927ace5ee892209dd8e3c1044e1b3842e
-BLACKLIST_FILE="$HOME/blacklist/blacklist.txt"
diff --git a/create-repo b/create-repo
index 58842c3..24b890d 100755
--- a/create-repo
+++ b/create-repo
@@ -1,11 +1,11 @@
#!/bin/bash
# Creates repository structure
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
+. "$(dirname "$(readlink -e "$0")")/config"
if [ $# -eq 0 ]; then
- msg "Usage: $0 repo1 [repo2 ... repoX]"
+ msg "Usage: ${0##*/} repo1 [repo2 ... repoX]"
exit 1
fi
@@ -21,4 +21,4 @@ for _repo in $@; do
done
done
-msg "Don't forget to add them to the PKGREPOS array on $(dirname $0)/config"
+msg "Don't forget to add them to the PKGREPOS array on %s/config" "$(dirname "$(readlink -e "$0")")"
diff --git a/createrepos b/createrepos
index 4ee057b..cd17e4e 100755
--- a/createrepos
+++ b/createrepos
@@ -1,8 +1,8 @@
#!/bin/bash
# Creates the repo structure defined in config
-source $(dirname $0)/config
+source "$(dirname "$(readlink -e "$0")")/config"
-mkdir -p ${FTP_BASE}/{${PKGPOOL},${SRCPOOL}} ${ARCH_BASE} ${CLEANUP_DESTDIR} ${SOURCE_CLEANUP_DESTDIR} ${STAGING}
+mkdir -p -- "${FTP_BASE}"/{"${PKGPOOL}","${SRCPOOL}"} "${CLEANUP_DESTDIR}" "${SOURCE_CLEANUP_DESTDIR} ${STAGING}"
-$(dirname $0)/create-repo ${PKGREPOS[@]}
+"$(dirname "$(readlink -e "$0")")/create-repo" "${PKGREPOS[@]}"
diff --git a/cron-jobs/ftpdir-cleanup b/cron-jobs/ftpdir-cleanup
index 83e6e17..e42a1a8 100755
--- a/cron-jobs/ftpdir-cleanup
+++ b/cron-jobs/ftpdir-cleanup
@@ -1,7 +1,7 @@
#!/bin/bash
-. "$(dirname $0)/../db-functions"
-. "$(dirname $0)/../config"
+. "$(dirname "$(readlink -e "$0")")/../config"
+. "$(dirname "$(readlink -e "$0")")/../db-functions"
clean_pkg() {
local pkg
@@ -12,16 +12,23 @@ clean_pkg() {
if [ -h "$pkg" ]; then
rm -f "$pkg" "$pkg.sig"
else
- mv -f "$pkg" "$CLEANUP_DESTDIR"
+ mv_acl "$pkg" "$CLEANUP_DESTDIR/${pkg##*/}"
if [ -e "$pkg.sig" ]; then
- mv -f "$pkg.sig" "$CLEANUP_DESTDIR"
+ mv_acl "$pkg.sig" "$CLEANUP_DESTDIR/${pkg##*/}.sig"
fi
- touch "${CLEANUP_DESTDIR}/$(basename ${pkg})"
+ touch "${CLEANUP_DESTDIR}/${pkg##*/}"
fi
done
fi
}
+script_lock
+
+for repo in ${PKGREPOS[@]}; do
+ for arch in ${ARCHES[@]}; do
+ repo_lock ${repo} ${arch} || exit 1
+ done
+done
${CLEANUP_DRYRUN} && warning 'dry run mode is active'
@@ -68,29 +75,6 @@ if [ ${#old_pkgs[@]} -ge 1 ]; then
done
fi
-# cleanup of legacy $repo/os/any directories
-for repo in ${PKGREPOS[@]}; do
- if [ ! -d "${FTP_BASE}/${repo}/os/any" ]; then
- continue
- fi
- if [ -n "$(find "${FTP_BASE}/${repo}/os/any" -type d -empty)" ]; then
- msg "Removing empty legacy directory ${repo}/os/any"
- ${CLEANUP_DRYRUN} || rmdir "${FTP_BASE}/${repo}/os/any"
- continue
- fi
- find "${FTP_BASE}/${repo}/os/any" -name "*${PKGEXT}" -printf '%f\n' | sort > "${WORKDIR}/any-${repo}"
- cat "${WORKDIR}/db-${repo}-"* | sort -u > "${WORKDIR}/all-${repo}"
-
- old_pkgs=($(comm -23 "${WORKDIR}/any-${repo}" "${WORKDIR}/all-${repo}"))
- if [ ${#old_pkgs[@]} -ge 1 ]; then
- msg "Removing old packages from [${repo}] (any)..."
- for old_pkg in ${old_pkgs[@]}; do
- msg2 "${old_pkg}"
- clean_pkg "${FTP_BASE}/${repo}/os/any/${old_pkg}"
- done
- fi
-done
-
old_pkgs=($(find ${CLEANUP_DESTDIR} -type f -name "*${PKGEXT}" -mtime +${CLEANUP_KEEP} -printf '%f\n'))
if [ ${#old_pkgs[@]} -ge 1 ]; then
msg "Removing old packages from the cleanup directory..."
diff --git a/cron-jobs/integrity-check b/cron-jobs/integrity-check
index d4f9694..86a8f1d 100755
--- a/cron-jobs/integrity-check
+++ b/cron-jobs/integrity-check
@@ -1,14 +1,14 @@
#!/bin/bash
-dirname="$(dirname $0)"
+dirname="$(dirname "$(readlink -e "$0")")"
-. "${dirname}/../db-functions"
. "${dirname}/../config"
+. "${dirname}/../db-functions"
script_lock
if [ $# -ne 1 ]; then
- die "usage: $(basename $0) <mailto>"
+ die "usage: ${0##*/} <mailto>"
fi
mailto=$1
diff --git a/cron-jobs/repo-sanity-check b/cron-jobs/repo-sanity-check
index 1ba90a6..2aa7892 100755
--- a/cron-jobs/repo-sanity-check
+++ b/cron-jobs/repo-sanity-check
@@ -1,8 +1,8 @@
#!/bin/bash
# Solves issue165
-. "$(dirname $0)/../db-functions"
-. "$(dirname $0)/../config"
+. "$(dirname "$(readlink -e "$0")")/../db-functions"
+. "$(dirname "$(readlink -e "$0")")/../config"
# Traverse all repos
for _repo in ${PKGREPOS[@]}; do
diff --git a/cron-jobs/sourceballs b/cron-jobs/sourceballs
index ee074bd..1542499 100755
--- a/cron-jobs/sourceballs
+++ b/cron-jobs/sourceballs
@@ -1,8 +1,8 @@
#!/bin/bash
-dirname="$(dirname $(readlink -e $0))"
-. "${dirname}/../db-functions"
+dirname="$(dirname "$(readlink -e "$0")")"
. "${dirname}/../config"
+. "${dirname}/../db-functions"
pushd "${WORKDIR}" >/dev/null
script_lock
@@ -21,10 +21,10 @@ renice +10 -p $$ > /dev/null
for repo in ${PKGREPOS[@]}; do
for arch in ${ARCHES[@]}; do
# Repo does not exist; skip it
- if [ ! -f "${ARCH_BASE}/${repo}/os/${arch}/${repo}${DBEXT}" ]; then
+ if [ ! -f "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT}" ]; then
continue
fi
- bsdtar -xOf "${ARCH_BASE}/${repo}/os/${arch}/${repo}${DBEXT}" \
+ bsdtar -xOf "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT}" \
| awk '/^%NAME%/ { getline b };
/^%BASE%/ { getline b };
/^%VERSION%/ { getline v };
@@ -46,7 +46,7 @@ for repo in ${PKGREPOS[@]}; do
done
# Create a list of all available source package file names
-find "${ARCH_BASE}/${SRCPOOL}" -xtype f -name "*${SRCEXT}" -printf '%f\n' | sort -u > "${WORKDIR}/available-src-pkgs"
+find "${FTP_BASE}/${SRCPOOL}" -xtype f -name "*${SRCEXT}" -printf '%f\n' | sort -u > "${WORKDIR}/available-src-pkgs"
# Check for all packages if we need to build a source package
for repo in ${PKGREPOS[@]}; do
@@ -59,11 +59,11 @@ for repo in ${PKGREPOS[@]}; do
pkgarch=${pkginfo[2]}
pkglicense=(${pkginfo[@]:3})
- # Should this packages be skipped?
+ # Should this package be skipped?
if grep -Fqx "${pkgbase}" "${dirname}/sourceballs.skip"; then
continue
fi
- # Commenting out, we'll sourceball everything
+ # Commenting out, we'll sourceball everything
# Check if the license or .force file does not enforce creating a source package
# if ! (chk_license ${pkglicense[@]} || grep -Fqx "${pkgbase}" "${dirname}/sourceballs.force"); then
# continue
@@ -78,15 +78,10 @@ for repo in ${PKGREPOS[@]}; do
continue
fi
- # Get the sources from svn
- mkdir -p "${WORKDIR}/pkgbuilds/${repo}-${pkgarch}"
- #svn export -q "${SVNREPO}/${pkgbase}/repos/${repo}-${pkgarch}" \
- # "${WORKDIR}/pkgbuilds/${repo}-${pkgarch}/${pkgbase}" >/dev/null 2>&1
-
- # If it's on official repos, nor [libre], nor [libre-testing]
- cp -r "${SVNREPO}/$repo/${pkgbase}" "${WORKDIR}/pkgbuilds/${repo}-${pkgarch}/" >/dev/null 2>&1 || \
- cp -r "${SVNREPO}/libre/${pkgbase}" "${WORKDIR}/pkgbuilds/${repo}-${pkgarch}/" >/dev/null 2>&1 || \
- cp -r "${SVNREPO}/libre-testing/${pkgbase}" "${WORKDIR}/pkgbuilds/${repo}-${pkgarch}/" >/dev/null 2>&1
+ # Get the sources from xbs
+ mkdir -p -m0770 "${WORKDIR}/pkgbuilds/${repo}-${pkgarch}"
+ cp -a "$(xbs releasepath "${pkgbase}" "${repo}" "${pkgarch}")" \
+ "${WORKDIR}/pkgbuilds/${repo}-${pkgarch}/${pkgbase}" >/dev/null 2>&1
if [ $? -ge 1 ]; then
failedpkgs[${#failedpkgs[*]}]="${pkgbase}-${pkgver}${SRCEXT}"
continue
@@ -94,14 +89,15 @@ for repo in ${PKGREPOS[@]}; do
# Build the actual source package
pushd "${WORKDIR}/pkgbuilds/${repo}-${pkgarch}/${pkgbase}" >/dev/null
- makepkg --nocolor --allsource --ignorearch # >/dev/null 2>&1
+ SRCPKGDEST=. makepkg --nocolor --allsource --ignorearch --skippgpcheck >"${WORKDIR}/${pkgbase}.log" 2>&1
if [ $? -eq 0 ] && [ -f "${pkgbase}-${pkgver}${SRCEXT}" ]; then
- mv "${pkgbase}-${pkgver}${SRCEXT}" "${ARCH_BASE}/${SRCPOOL}"
+ mv_acl "${pkgbase}-${pkgver}${SRCEXT}" "${FTP_BASE}/${SRCPOOL}/${pkgbase}-${pkgver}${SRCEXT}"
# Avoid creating the same source package for every arch
echo "${pkgbase}-${pkgver}${SRCEXT}" >> "${WORKDIR}/available-src-pkgs"
newpkgs[${#newpkgs[*]}]="${pkgbase}-${pkgver}${SRCEXT}"
else
- failedpkgs[${#failedpkgs[*]}]="${pkgbase}-${pkgver}${SRCEXT}"
+ failedpkgs+=("${pkgbase}-${pkgver}${SRCEXT}")
+ cat "${WORKDIR}/${pkgbase}.log" >> "${WORKDIR}/makepkg-fail.log"
fi
popd >/dev/null
fi
@@ -132,7 +128,7 @@ if [ ${#old_pkgs[@]} -ge 1 ]; then
for old_pkg in ${old_pkgs[@]}; do
msg2 "${old_pkg}"
if ! ${SOURCE_CLEANUP_DRYRUN}; then
- mv "$ARCH_BASE/${SRCPOOL}/${old_pkg}" "${SOURCE_CLEANUP_DESTDIR}"
+ mv_acl "$FTP_BASE/${SRCPOOL}/${old_pkg}" "${SOURCE_CLEANUP_DESTDIR}/${old_pkg}"
touch "${SOURCE_CLEANUP_DESTDIR}/${old_pkg}"
fi
done
@@ -147,4 +143,9 @@ if [ ${#old_pkgs[@]} -ge 1 ]; then
done
fi
+if [ -f "${WORKDIR}/makepkg-fail.log" ]; then
+ msg "Log of failed packages"
+ cat "${WORKDIR}/makepkg-fail.log"
+fi
+
script_unlock
diff --git a/cron-jobs/sourceballs.skip b/cron-jobs/sourceballs.skip
index 14d6f4b..0e1731c 100644
--- a/cron-jobs/sourceballs.skip
+++ b/cron-jobs/sourceballs.skip
@@ -1,14 +1,28 @@
-nexuiz-data
+0ad-data
+alienarena-data
+blobwars-data
+btanks-data
+dangerdeep-data
+egoboo-data
+fillets-ng-data
+flightgear-data
+frogatto-data
+gcompris-data
+naev-data
+openarena-data
+rocksndiamonds-data
+smc-data
+speed-dreams-data
torcs-data
tremulous-data
ufoai-data
-frogatto-data
vdrift-data
-naev-data
-btanks-data
+warmux-data
wesnoth-data
-texlive-bin
+widelands-data
+xonotic-data
texlive-bibtexextra
+texlive-bin
texlive-core
texlive-fontsextra
texlive-formatsextra
diff --git a/cron-jobs/sourceballs2 b/cron-jobs/sourceballs2
index 5644268..bbe227d 100755
--- a/cron-jobs/sourceballs2
+++ b/cron-jobs/sourceballs2
@@ -4,7 +4,7 @@
# Makepkg --allsource every package
# Remove the old sourceballs
-dirname="$(dirname $(readlink -e $0))"
+dirname="$(dirname "$(readlink -e "$0")")"
. "${dirname}/../db-functions"
. "${dirname}/../config"
. "${MAKEPKGCONF}"
@@ -17,7 +17,7 @@ script_lock
renice +10 -p $$ > /dev/null
# Create a list of all available source package file names
-find "${ARCH_BASE}/${SRCPOOL}" -xtype f -name "*${SRCEXT}" -printf '%f\n' | sort -u > "${WORKDIR}/available-src-pkgs"
+find "${FTP_BASE}/${SRCPOOL}" -xtype f -name "*${SRCEXT}" -printf '%f\n' | sort -u > "${WORKDIR}/available-src-pkgs"
pushd "${SVNREPO}" >/dev/null
diff --git a/cron-jobs/update-abs-tarballs b/cron-jobs/update-abs-tarballs
index 824ac34..901cc4b 100755
--- a/cron-jobs/update-abs-tarballs
+++ b/cron-jobs/update-abs-tarballs
@@ -1,6 +1,6 @@
#!/bin/bash
-. "$(dirname $0)/../config"
+. "$(dirname "$(readlink -e "$0")")/../config"
rsync -av --exclude=staging/ parabolagnulinux.org::abstar/ ${FTP_BASE}/
diff --git a/cron-jobs/update-web-db b/cron-jobs/update-web-db
index 6ced4c1..713e75e 100755
--- a/cron-jobs/update-web-db
+++ b/cron-jobs/update-web-db
@@ -1,7 +1,7 @@
#!/bin/bash
-. "$(dirname $0)/../db-functions"
-. "$(dirname $0)/../config"
+. "$(dirname "$(readlink -e "$0")")/../config"
+. "$(dirname "$(readlink -e "$0")")/../db-functions"
# setup paths
SPATH="/srv/http/archweb"
@@ -14,7 +14,7 @@ REPOS=('community-testing' 'multilib-testing' 'multilib' 'community' 'extra' 'te
LOGOUT="/tmp/archweb_update.log"
# figure out what operation to perform
-cmd="$(basename $0)"
+cmd="${0##*/}"
if [[ $cmd != "update-web-db" && $cmd != "update-web-files-db" ]]; then
die "Invalid command name '$cmd' specified!"
fi
diff --git a/db-check-nonfree b/db-check-nonfree
index ecad3b9..661daa6 100755
--- a/db-check-nonfree
+++ b/db-check-nonfree
@@ -1,10 +1,10 @@
#!/bin/bash
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
+. "$(dirname "$(readlink -e "$0")")/config"
if [ $# -ge 1 ]; then
- warning "Calling $(basename $0) with a specific repository is not supported"
+ warning "Calling ${0##*/} with a specific repository is not supported"
exit 1
fi
diff --git a/db-cleanup b/db-cleanup
index 841800b..57ef36e 100755
--- a/db-cleanup
+++ b/db-cleanup
@@ -15,9 +15,8 @@ trap_exit() {
exit 1
}
-source $(dirname $0)/config
-source $(dirname $0)/local_config
-source $(dirname $0)/libremessages
+source "$(dirname "$(readlink -e "$0")")/config"
+source "$(dirname "$(readlink -e "$0")")/libremessages"
# From makepkg
set -E
diff --git a/db-functions b/db-functions
index 4c247a7..0b59a53 100644
--- a/db-functions
+++ b/db-functions
@@ -1,7 +1,7 @@
#!/bin/bash
# Some PKGBUILDs need CARCH to be set
-CARCH="x86_64"
+CARCH=$(. $(librelib conf.sh); load_files makepkg; echo $CARCH)
# Useful functions
UMASK=""
@@ -15,80 +15,32 @@ restore_umask () {
umask $UMASK >/dev/null
}
-# set up general environment
-WORKDIR=$(mktemp -d /tmp/$(basename $0).XXXXXXXXXX)
-LOCKS=()
-
-# check if messages are to be printed using color
-unset ALL_OFF BOLD BLUE GREEN RED YELLOW
-if [[ -t 2 ]]; then
- ALL_OFF="$(tput sgr0)"
- BOLD="$(tput bold)"
- BLUE="${BOLD}$(tput setaf 4)"
- GREEN="${BOLD}$(tput setaf 2)"
- RED="${BOLD}$(tput setaf 1)"
- YELLOW="${BOLD}$(tput setaf 3)"
-fi
-readonly ALL_OFF BOLD BLUE GREEN RED YELLOW
-
-plain() {
- local mesg=$1; shift
- printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@"
-}
-
-msg() {
- local mesg=$1; shift
- printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@"
+# just like mv -f, but we touch the file and then copy the content so
+# default ACLs in the target dir will be applied
+mv_acl() {
+ rm -f "$2"
+ touch "$2"
+ cat "$1" >"$2" || return 1
+ rm -f "$1"
}
-msg2() {
- local mesg=$1; shift
- printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@"
-}
-
-warning() {
- local mesg=$1; shift
- printf "${YELLOW}==> WARNING:${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-error() {
- local mesg=$1; shift
- printf "${RED}==> ERROR${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
+# set up general environment
+WORKDIR=$(mktemp -dt "${0##*/}.XXXXXXXXXX")
+LOCKS=()
+REPO_MODIFIED=0
-##
-# usage : in_array( $needle, $haystack )
-# return : 0 - found
-# 1 - not found
-##
-in_array() {
- local needle=$1; shift
- [[ -z $1 ]] && return 1 # Not Found
- local item
- for item in "$@"; do
- [[ $item = $needle ]] && return 0 # Found
- done
- return 1 # Not Found
-}
-
-##
-# usage : get_full_version( $epoch, $pkgver, $pkgrel )
-# return : full version spec, including epoch (if necessary), pkgver, pkgrel
-##
-get_full_version() {
- if [[ $1 -eq 0 ]]; then
- # zero epoch case, don't include it in version
- echo $2-$3
- else
- echo $1:$2-$3
- fi
-}
+# Used: plain, msg, msg2, warning, error, in_array, get_full_version
+# Overwritten: cleanup, abort, die
+# Ignored: stat_busy, stat_done,
+# setup_workdir, trab_abort, trap_exit,
+# lock, slock, lock_close
+. $(librelib common)
script_lock() {
- local LOCKDIR="$TMPDIR/.scriptlock.$(basename $0)"
+ local LOCKDIR="$TMPDIR/.scriptlock.${0##*/}"
if ! mkdir "$LOCKDIR" >/dev/null 2>&1 ; then
- local _owner="$(stat -c %U $LOCKDIR)"
- error "Script $(basename $0) is already locked by $_owner."
+ local _owner="$(/usr/bin/stat -c %U $LOCKDIR)"
+ error "Script ${0##*/} is already locked by $_owner."
exit 1
else
set_umask
@@ -97,9 +49,9 @@ script_lock() {
}
script_unlock() {
- local LOCKDIR="$TMPDIR/.scriptlock.$(basename $0)"
+ local LOCKDIR="$TMPDIR/.scriptlock.${0##*/}"
if [ ! -d "$LOCKDIR" ]; then
- warning "Script $(basename $0) was not locked!"
+ warning "Script ${0##*/} was not locked!"
restore_umask
return 1
else
@@ -123,11 +75,16 @@ cleanup() {
repo_unlock $repo $arch
fi
done
- if [ -d "$TMPDIR/.scriptlock.$(basename $0)" ]; then
- msg "Removing left over lock from $(basename $0)"
+ if [ -d "$TMPDIR/.scriptlock.${0##*/}" ]; then
+ msg "Removing left over lock from ${0##*/}"
script_unlock
fi
rm -rf "$WORKDIR"
+
+ if (( REPO_MODIFIED )); then
+ date +%s > "${FTP_BASE}/lastupdate"
+ fi
+
[ "$1" ] && exit $1
}
@@ -178,7 +135,7 @@ repo_lock () {
_count=0
while [ $_count -le $_trial ] || $_lockblock ; do
if ! mkdir "$LOCKDIR" >/dev/null 2>&1 ; then
- _owner="$(stat -c %U $LOCKDIR)"
+ _owner="$(/usr/bin/stat -c %U $LOCKDIR)"
warning "Repo [${1}] (${2}) is already locked by $_owner. "
msg2 "Retrying in $LOCK_DELAY seconds..."
else
@@ -211,7 +168,7 @@ repo_unlock () { #repo_unlock <repo-name> <arch>
_grep_pkginfo() {
local _ret
- _ret="$(bsdtar -xOqf "$1" .PKGINFO | grep -m 1 "^${2} = ")"
+ _ret="$(/usr/bin/bsdtar -xOqf "$1" .PKGINFO | grep -m 1 "^${2} = ")"
echo "${_ret#${2} = }"
}
@@ -293,9 +250,6 @@ getpkgfile() {
}
getpkgfiles() {
-# Ignore anything that doesn't glob to PKGEXT
- shopt -s nullglob
-
local f
if [ ! -z "$(echo ${@%\.*} | sed "s/ /\n/g" | sort | uniq -D)" ]; then
error 'Duplicate packages found!'
@@ -313,8 +267,6 @@ getpkgfiles() {
done
echo ${@}
-
- shopt -u nullglob
}
check_pkgfile() {
@@ -329,14 +281,14 @@ check_pkgfile() {
in_array "${pkgarch}" ${ARCHES[@]} 'any' || return 1
- if echo "$(basename ${pkgfile})" | grep -q "${pkgname}-${pkgver}-${pkgarch}"; then
+ if echo "${pkgfile##*/}" | grep -q "${pkgname}-${pkgver}-${pkgarch}"; then
return 0
else
return 1
fi
}
-check_pkgsvn() {
+check_pkgxbs() {
local pkgfile="${1}"
local _pkgbase="$(getpkgbase ${pkgfile})"
[ $? -ge 1 ] && return 1
@@ -350,18 +302,11 @@ check_pkgsvn() {
in_array "${repo}" ${PKGREPOS[@]} || return 1
- if [ ! -f "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/${_pkgbase}" ]; then
- mkdir -p "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}"
- svn export -q "${SVNREPO}/${_pkgbase}/repos/${repo}-${_pkgarch}/PKGBUILD" \
- "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/${_pkgbase}" >/dev/null
- [ $? -ge 1 ] && return 1
- fi
+ local xbsver="$(. "`xbs releasepath ${_pkgbase} ${repo} ${_pkgarch}`/PKGBUILD"; get_full_version "${_pkgname}")"
+ [ "${xbsver}" == "${_pkgver}" ] || return 1
- local svnver="$(. "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/${_pkgbase}"; echo $(get_full_version ${epoch:-0} ${pkgver} ${pkgrel}) )"
- [ "${svnver}" == "${_pkgver}" ] || return 1
-
- local svnnames=($(. "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/${_pkgbase}"; echo ${pkgname[@]}))
- in_array "${_pkgname}" ${svnnames[@]} || return 1
+ local xbsnames=($(. "`xbs releasepath ${_pkgbase} ${repo} ${_pkgarch}`/PKGBUILD"; echo ${pkgname[@]}))
+ in_array "${_pkgname}" ${xbsnames[@]} || return 1
return 0
}
@@ -372,7 +317,7 @@ check_splitpkgs() {
local pkgfiles=(${@})
local pkgfile
local pkgdir
- local svnname
+ local xbsname
mkdir -p "${WORKDIR}/check_splitpkgs/"
pushd "${WORKDIR}/check_splitpkgs" >/dev/null
@@ -380,28 +325,15 @@ check_splitpkgs() {
for pkgfile in ${pkgfiles[@]}; do
issplitpkg "${pkgfile}" || continue
local _pkgbase="$(getpkgbase ${pkgfile})"
- msg2 "Checking $_pkgbase"
+ msg2 "Checking %s" "$_pkgbase"
local _pkgname="$(getpkgname ${pkgfile})"
local _pkgarch="$(getpkgarch ${pkgfile})"
mkdir -p "${repo}/${_pkgarch}/${_pkgbase}"
echo "${_pkgname}" >> "${repo}/${_pkgarch}/${_pkgbase}/staging"
- if [ ! -f "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/${_pkgbase}" ]; then
- mkdir -p "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}"
-
- cp -r ${SVNREPO}/$repo/$_pkgbase/PKGBUILD "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/${_pkgbase}" >/dev/null 2>&1 || \
- cp -r ${SVNREPO}/libre/$_pkgbase/PKGBUILD "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/${_pkgbase}" >/dev/null 2>&1 || \
- cp -r ${SVNREPO}/libre-testing/$_pkgbase/PKGBUILD "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/$_pkgbase">/dev/null 2>&1
-
- [[ $? -ge 1 ]] && {
- echo "Failed $_pkgbase-$_pkgver-$_pkgarch"
- return 1
- }
- fi
-
- local svnnames=($(. "${WORKDIR}/pkgbuilds/${repo}-${_pkgarch}/${_pkgbase}"; echo ${pkgname[@]}))
- for svnname in ${svnnames[@]}; do
- echo "${svnname}" >> "${repo}/${_pkgarch}/${_pkgbase}/svn"
+ local xbsnames=($(. "`xbs releasepath ${_pkgbase} ${repo} ${_pkgarch}`/PKGBUILD"; echo ${pkgname[@]}))
+ for xbsname in ${xbsnames[@]}; do
+ echo "${xbsname}" >> "${repo}/${_pkgarch}/${_pkgbase}/xbs"
done
done
popd >/dev/null
@@ -409,8 +341,8 @@ check_splitpkgs() {
for pkgdir in "${WORKDIR}/check_splitpkgs/${repo}"/*/*; do
[ ! -d "${pkgdir}" ] && continue
sort -u "${pkgdir}/staging" -o "${pkgdir}/staging"
- sort -u "${pkgdir}/svn" -o "${pkgdir}/svn"
- if [ ! -z "$(comm -13 "${pkgdir}/staging" "${pkgdir}/svn")" ]; then
+ sort -u "${pkgdir}/xbs" -o "${pkgdir}/xbs"
+ if [ ! -z "$(comm -13 "${pkgdir}/staging" "${pkgdir}/xbs")" ]; then
return 1
fi
done
@@ -430,19 +362,8 @@ check_pkgrepos() {
[ -f "${FTP_BASE}/${PKGPOOL}/${pkgname}-${pkgver}-${pkgarch}"${PKGEXT} ] && return 1
[ -f "${FTP_BASE}/${PKGPOOL}/${pkgname}-${pkgver}-${pkgarch}"${PKGEXT}.sig ] && return 1
- [ -f "${FTP_BASE}/${PKGPOOL}/$(basename ${pkgfile})" ] && return 1
- [ -f "${FTP_BASE}/${PKGPOOL}/$(basename ${pkgfile}).sig" ] && return 1
-
- local repo
- local arch
- for repo in ${PKGREPOS[@]}; do
- for arch in ${ARCHES[@]}; do
- [ -f "${FTP_BASE}/${repo}/os/${arch}/${pkgname}-${pkgver}-${pkgarch}"${PKGEXT} ] && return 1
- [ -f "${FTP_BASE}/${repo}/os/${arch}/${pkgname}-${pkgver}-${pkgarch}"${PKGEXT}.sig ] && return 1
- [ -f "${FTP_BASE}/${repo}/os/${arch}/$(basename ${pkgfile})" ] && return 1
- [ -f "${FTP_BASE}/${repo}/os/${arch}/$(basename ${pkgfile}).sig" ] && return 1
- done
- done
+ [ -f "${FTP_BASE}/${PKGPOOL}/${pkgfile##*/}" ] && return 1
+ [ -f "${FTP_BASE}/${PKGPOOL}/${pkgfile##*/}.sig" ] && return 1
return 0
}
@@ -450,8 +371,8 @@ check_pkgrepos() {
#usage: chk_license ${license[@]}"
chk_license() {
local l
- for l in ${@}; do
- in_array ${l} ${ALLOWED_LICENSES[@]} && return 0
+ for l in "${@}"; do
+ in_array "${l}" "${ALLOWED_LICENSES[@]}" && return 0
done
return 1
@@ -463,7 +384,7 @@ check_repo_permission() {
[ ${#PKGREPOS[@]} -eq 0 ] && return 1
[ -z "${PKGPOOL}" ] && return 1
- in_array "${repo}" ${PKGREPOS[@]} || return 1
+ in_array "${repo}" "${PKGREPOS[@]}" || return 1
[ -w "$FTP_BASE/${PKGPOOL}" ] || return 1
@@ -485,7 +406,7 @@ set_repo_permission() {
local filesfile="${FTP_BASE}/${repo}/os/${arch}/${repo}${FILESEXT}"
if [ -w "${dbfile}" ]; then
- local group=$(stat --printf='%G' "$(dirname "${dbfile}")")
+ local group=$(/usr/bin/stat --printf='%G' "$(dirname "${dbfile}")")
chgrp $group "${dbfile}" || error "Could not change group of ${dbfile} to $group"
chgrp $group "${filesfile}" || error "Could not change group of ${filesfile} to $group"
chmod g+w "${dbfile}" || error "Could not set write permission for group $group to ${dbfile}"
@@ -502,12 +423,14 @@ arch_repo_add() {
# package files might be relative to repo dir
pushd "${FTP_BASE}/${repo}/os/${arch}" >/dev/null
- repo-add -q "${repo}${DBEXT}" ${pkgs[@]} >/dev/null \
+ /usr/bin/repo-add -q "${repo}${DBEXT}" ${pkgs[@]} >/dev/null \
|| error "repo-add ${repo}${DBEXT} ${pkgs[@]}"
- repo-add -f -q "${repo}${FILESEXT}" ${pkgs[@]} \
+ /usr/bin/repo-add -f -q "${repo}${FILESEXT}" ${pkgs[@]} \
|| error "repo-add -f ${repo}${FILESEXT} ${pkgs[@]}"
popd >/dev/null
set_repo_permission "${repo}" "${arch}"
+
+ REPO_MODIFIED=1
}
arch_repo_remove() {
@@ -521,9 +444,11 @@ arch_repo_remove() {
error "No database found at '${dbfile}'"
return 1
fi
- repo-remove -q "${dbfile}" ${pkgs[@]} >/dev/null \
+ /usr/bin/repo-remove -q "${dbfile}" ${pkgs[@]} >/dev/null \
|| error "repo-remove ${dbfile} ${pkgs[@]}"
- repo-remove -q "${filesfile}" ${pkgs[@]} \
+ /usr/bin/repo-remove -q "${filesfile}" ${pkgs[@]} \
|| error "repo-remove ${filesfile} ${pkgs[@]}"
set_repo_permission "${repo}" "${arch}"
+
+ REPO_MODIFIED=1
}
diff --git a/db-list-unsigned-packages b/db-list-unsigned-packages
index 3b5a5bd..985d1c0 100755
--- a/db-list-unsigned-packages
+++ b/db-list-unsigned-packages
@@ -20,11 +20,11 @@ set -e
# unsigned packages available for architecture $1 and specified for
# architecture $2 (usually $1 or any, default is to list all).
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
+. "$(dirname "$(readlink -e "$0")")/config"
if [ $# -lt 1 ]; then
- msg "usage: $(basename $0) <architecture>"
+ msg "usage: ${0##*/} <architecture>"
exit 1
fi
@@ -34,5 +34,5 @@ shift
for repo in ${PKGREPOS[@]}
do
db="${FTP_BASE}/${repo}/os/${arch}/${repo}.db"
- [ -f "$db" ] && "$(dirname $0)/db-list-unsigned-packages.py" "$repo" "$@" < "$db"
+ [ -f "$db" ] && "$(dirname "$(readlink -e "$0")")/db-list-unsigned-packages.py" "$repo" "$@" < "$db"
done
diff --git a/db-move b/db-move
index 010d941..1b34404 100755
--- a/db-move
+++ b/db-move
@@ -1,10 +1,10 @@
#!/bin/bash
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
if [ $# -lt 3 ]; then
- msg "usage: $(basename $0) <repo-from> <repo-to> <pkgname|pkgbase> ..."
+ msg "usage: ${0##*/} <repo-from> <repo-to> <pkgname|pkgbase> ..."
exit 1
fi
@@ -24,20 +24,16 @@ for pkgarch in ${ARCHES[@]}; do
repo_lock ${repo_from} ${pkgarch} || exit 1
done
-# No idea why we loop twice... -- fauno
+# check if packages to be moved exist in xbs and ftp dir
for pkgbase in ${args[@]:2}; do
for pkgarch in ${ARCHES[@]} 'any'; do
- svnrepo_from="${SVNREPO}/${repo_from}/${pkgbase}"
- if [ -r "${svnrepo_from}/PKGBUILD" ]; then
- pkgnames=($(. "${svnrepo_from}/PKGBUILD"; echo ${pkgname[@]}))
+ xbsrepo_from="$(xbs releasepath ${pkgbase} ${repo_from} ${pkgarch})"
+ if [ -r "${xbsrepo_from}/PKGBUILD" ]; then
+ pkgnames=($(. "${xbsrepo_from}/PKGBUILD"; echo ${pkgname[@]}))
if [ ${#pkgnames[@]} -lt 1 ]; then
die "Could not read pkgname"
fi
- pkgver=$(. "${svnrepo_from}/PKGBUILD"; echo $(get_full_version ${epoch:-0} ${pkgver} ${pkgrel}))
- if [ -z "${pkgver}" ]; then
- die "Could not read pkgver"
- fi
if [ "${pkgarch}" == 'any' ]; then
tarches=(${ARCHES[@]})
@@ -46,6 +42,10 @@ for pkgbase in ${args[@]:2}; do
fi
for pkgname in ${pkgnames[@]}; do
+ pkgver=$(. "${xbsrepo_from}/PKGBUILD"; get_full_version ${pkgname})
+ if [ -z "${pkgver}" ]; then
+ die "Could not read pkgver"
+ fi
for tarch in ${tarches[@]}; do
getpkgfile "${ftppath_from}/${tarch}/"${pkgname}-${pkgver}-${pkgarch}${PKGEXT} >/dev/null
done
@@ -61,29 +61,25 @@ msg "Moving packages from [${repo_from}] to [${repo_to}]..."
declare -A add_pkgs
declare -A remove_pkgs
for pkgbase in ${args[@]:2}; do
- for pkgarch in ${ARCHES[@]} 'any'; do
- svnrepo_from="${SVNREPO}/${repo_from}/${pkgbase}"
-
- if [ -f "${svnrepo_from}/PKGBUILD" ]; then
+ # move the package in xbs
+ arches=($(xbs move ${repo_from} ${repo_to} ${pkgbase}))
+ # move the package in ftp
+ for pkgarch in ${arches[@]}; do
+ dir_to="$(xbs releasepath $pkgbase $repo_to $pkgarch)"
+ if true; then # to add in indent level to make merging easier
if [ "${pkgarch}" == 'any' ]; then
- tarches=(${ARCHES[@]})
+ tarches=("${ARCHES[@]}")
else
tarches=("${pkgarch}")
fi
- msg2 "${pkgbase} ($(echo ${tarches[@]}))"
- pkgnames=($(. "${svnrepo_from}/PKGBUILD"; echo ${pkgname[@]}))
- pkgver=$(. "${svnrepo_from}/PKGBUILD"; echo $(get_full_version ${epoch:-0} ${pkgver} ${pkgrel}))
+ pkgnames=($(. "${dir_to}/PKGBUILD"; echo ${pkgname[@]}))
for pkgname in ${pkgnames[@]}; do
+ pkgver=$(. "${dir_to}/PKGBUILD"; get_full_version ${pkgname})
for tarch in ${tarches[@]}; do
pkgpath=$(getpkgfile "${ftppath_from}/${tarch}/"${pkgname}-${pkgver}-${pkgarch}${PKGEXT})
- pkgfile=$(basename "${pkgpath}")
+ pkgfile="${pkgpath##*/}"
- # copy package to pool if needed
- # TODO: can be removed once every package has been moved to the package pool
- if [ ! -f ${FTP_BASE}/${PKGPOOL}/${pkgfile} ]; then
- cp ${pkgpath} ${FTP_BASE}/${PKGPOOL}
- fi
ln -s "../../../${PKGPOOL}/${pkgfile}" ${ftppath_to}/${tarch}/
if [ -f ${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig ]; then
ln -s "../../../${PKGPOOL}/${pkgfile}.sig" ${ftppath_to}/${tarch}/
diff --git a/db-remove b/db-remove
index f0785e5..1c25e5c 100755
--- a/db-remove
+++ b/db-remove
@@ -1,10 +1,10 @@
#!/bin/bash
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
if [ $# -lt 3 ]; then
- msg "usage: $(basename $0) <repo> <arch> <pkgname|pkgbase> ..."
+ msg "usage: ${0##*/} <repo> <arch> <pkgname|pkgbase> ..."
exit 1
fi
@@ -17,30 +17,31 @@ if ! check_repo_permission $repo; then
fi
if [ "$arch" == "any" ]; then
- tarches=(${ARCHES[@]})
+ tarches=("${ARCHES[@]}")
else
tarches=("$arch")
fi
-for tarch in ${tarches[@]}; do
+for tarch in "${tarches[@]}"; do
repo_lock $repo $tarch || exit 1
done
remove_pkgs=()
for pkgbase in ${pkgbases[@]}; do
msg "Removing $pkgbase from [$repo]..."
-
- if [ -d "${SVNREPO}/$repo/$pkgbase" ]; then
- remove_pkgs=($(. "${SVNREPO}/$repo/$pkgbase/PKGBUILD"; echo ${pkgname[@]}))
+ path="$(xbs releasepath "$pkgbase" "$repo" "$arch")"
+ if [ -d "$path" ]; then
+ remove_pkgs+=($(. "$path/PKGBUILD"; echo ${pkgname[@]}))
+ xbs unrelease "$pkgbase" "$repo" "$arch"
else
- warning "$pkgbase not found in ABS(libre)"
+ warning "$pkgbase not found in XBS $repo-$arch"
warning "Removing only $pkgbase from the repo"
warning "If it was a split package you have to remove the others yourself!"
- remove_pkgs[${#remove_pkgs[*]}]=$pkgbase
+ remove_pkgs+=($pkgbase)
fi
done
-for tarch in ${tarches[@]}; do
- arch_repo_remove "${repo}" "${tarch}" ${remove_pkgs[@]}
+for tarch in "${tarches[@]}"; do
+ arch_repo_remove "${repo}" "${tarch}" "${remove_pkgs[@]}"
repo_unlock $repo $tarch
done
diff --git a/db-repo-add b/db-repo-add
index b83fb77..a6355a1 100755
--- a/db-repo-add
+++ b/db-repo-add
@@ -1,10 +1,10 @@
#!/bin/bash
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
if [ $# -lt 3 ]; then
- msg "usage: $(basename $0) <repo> <arch> <pkgfile> ..."
+ msg "usage: ${0##*/} <repo> <arch> <pkgfile> ..."
exit 1
fi
diff --git a/db-repo-remove b/db-repo-remove
index 4f04ed1..7077d62 100755
--- a/db-repo-remove
+++ b/db-repo-remove
@@ -1,10 +1,10 @@
#!/bin/bash
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
if [ $# -lt 3 ]; then
- msg "usage: $(basename $0) <repo> <arch> <pkgname> ..."
+ msg "usage: ${0##*/} <repo> <arch> <pkgname> ..."
exit 1
fi
diff --git a/db-sync b/db-sync
index e8481d6..e4b6966 100755
--- a/db-sync
+++ b/db-sync
@@ -19,166 +19,168 @@
VERBOSE=${V}
${VERBOSE} && extra="-v"
+WORKDIR=$(mktemp -dt "${0##*/}.XXXXXXXXXX")
+trap "rm -rf -- $(printf '%q' "${WORKDIR}")" EXIT
+
# Returns contents of a repo
get_repos() {
- mkdir -p ${TMPDIR}/$0.$$.cache
-# Exclude everything but db files
- rsync ${extra} -mrtlH --no-p --include="*/" \
- --include="*.db" \
- --include="*${DBEXT}" \
- --include="*.files" \
- --include="*${FILESEXT}" \
- --exclude="*" \
- --delete-after \
- rsync://${mirror}/${mirrorpath}/ ${TMPDIR}/$0.$$.cache
+ # Exclude everything but db files
+ rsync ${extra} -mrtlH --no-p --include="*/" \
+ --include="*.db" \
+ --include="*${DBEXT}" \
+ --include="*.files" \
+ --include="*${FILESEXT}" \
+ --exclude="*" \
+ --delete-after \
+ rsync://${mirror}/${mirrorpath}/ "$WORKDIR"
}
get_repo_content() {
-# Return all contents
- bsdtar tf ${1} | \
- cut -d "/" -f 1 | \
- sort -u
+ # Return all contents
+ bsdtar tf ${1} | \
+ cut -d "/" -f 1 | \
+ sort -u
}
# Prints blacklisted packages
get_blacklist() {
- cut -d ':' -f 1 "${BLACKLIST_FILE}"
+ cut -d ':' -f 1 "${BLACKLIST_FILE}"
}
# repo
# arch
get_repo_file() {
- echo "${TMPDIR}/$0.$$.cache/${1}/os/${2}/${1}"
+ echo "${WORKDIR}/${1}/os/${2}/${1}"
}
# Process the databases and get the libre packages
init() {
-# Get the blacklisted packages
- blacklist=($(get_blacklist))
-# Store all the whitelist files
- whitelists=()
-
- msg "${#blacklist[@]} packages in blacklist"
-
-# Sync the repos databases
- get_repos
-
-# Traverse all repo-arch pairs
- for _repo in ${ARCHREPOS[@]}; do
- for _arch in ${ARCHARCHES[@]}; do
- msg "Processing ${_repo}-${_arch}"
-
- db_file=$(get_repo_file ${_repo} ${_arch})${DBEXT}
- files_file=$(get_repo_file ${_repo} ${_arch})${FILESEXT}
-
- if [ ! -f "${db_file}" ]; then
- warning "%s doesn't exist, skipping this repo-arch" "${db_file}"
- continue
- fi
- if [ ! -f "${files_file}" ]; then
- warning "%s doesn't exist, skipping this repo-arch" "${files_file}"
- continue
- fi
-
-# Remove blacklisted packages and count them
-# TODO capture all removed packages for printing on debug mode
- msg2 "Removing blacklisted packages from .db database..."
- LC_ALL=C repo-remove "${db_file}" "${blacklist[@]}"
- msg2 "Removing blacklisted packages from .files database..."
- LC_ALL=C repo-remove "${files_file}" "${blacklist[@]}"
-
-# Get db contents
- db=($(get_repo_content ${db_file}))
-
- msg2 "Process clean db for syncing..."
-
-# Create a whitelist, add * wildcard to end
-# TODO due to lack of -arch suffix, the pool sync retrieves every arch even if
-# we aren't syncing them
- echo ${db[@]} | tr ' ' "\n" | sed "s|$|*|g" > /tmp/${_repo}-${_arch}.whitelist
-
- msg2 "$(wc -l /tmp/${_repo}-${_arch}.whitelist | cut -d' ' -f1) packages in whitelist"
-
-# Sync excluding everything but whitelist
-# We delete here for cleanup
- rsync ${extra} -rtlH \
- --delete-after \
- --delete-excluded \
- --delay-updates \
- --include-from=/tmp/${_repo}-${_arch}.whitelist \
- --exclude="*" \
- rsync://${mirror}/${mirrorpath}/${_repo}/os/${_arch}/ \
- ${FTP_BASE}/${_repo}/os/${_arch}/
-
-# Add a new whitelist
- whitelists+=(/tmp/${_repo}-${_arch}.whitelist)
-
- msg "Putting databases back in place"
- rsync ${extra} -rtlH \
- --delay-updates \
- --safe-links \
- ${TMPDIR}/$0.$$.cache/${_repo}/os/${_arch}/ \
- ${FTP_BASE}/${_repo}/os/${_arch}/
-
-# Cleanup
- unset db
- done
- done
-
-
- msg "Syncing package pool"
-# Concatenate all whitelists
- cat ${whitelists[@]} | sort -u > /tmp/any.whitelist
-
- msg2 "Retrieving $(wc -l /tmp/any.whitelist | cut -d' ' -f1) packages from pool"
-
-# Sync
-# *Don't delete-after*, this is the job of cleanup scripts. It will remove our
-# packages too
- for PKGPOOL in ${PKGPOOLS[@]}; do
- rsync ${extra} -rtlH \
- --delay-updates \
- --safe-links \
- --include-from=/tmp/any.whitelist \
- --exclude="*" \
- rsync://${mirror}/${mirrorpath}/${PKGPOOL}/ \
- ${FTP_BASE}/${PKGPOOL}/
- done
-
-# Sync sources
- msg "Syncing source pool"
- #sed "s|\.pkg\.tar\.|.src.tar.|" /tmp/any.whitelist > /tmp/any-src.whitelist
-
- #msg2 "Retrieving $(wc -l /tmp/any-src.whitelist | cut -d' ' -f1) sources from pool"
-# Sync
-# *Don't delete-after*, this is the job of cleanup scripts. It will remove our
-# packages too
- for SRCPOOL in ${SRCPOOLS[@]}; do
- rsync ${extra} -rtlH \
- --delay-updates \
- --safe-links \
- --include-from=/tmp/any.whitelist \
- --exclude="*" \
- rsync://${mirror}/${mirrorpath}/${SRCPOOL}/ \
- ${FTP_BASE}/${SRCPOOL}/
- done
+ # Get the blacklisted packages
+ blacklist=($(get_blacklist))
+ # Store all the whitelist files
+ whitelists=()
+
+ msg "${#blacklist[@]} packages in blacklist"
+
+ # Sync the repos databases
+ get_repos
+
+ # Traverse all repo-arch pairs
+ for _repo in ${ARCHREPOS[@]}; do
+ for _arch in ${ARCHARCHES[@]}; do
+ msg "Processing ${_repo}-${_arch}"
+
+ db_file=$(get_repo_file ${_repo} ${_arch})${DBEXT}
+ files_file=$(get_repo_file ${_repo} ${_arch})${FILESEXT}
+
+ if [ ! -f "${db_file}" ]; then
+ warning "%s doesn't exist, skipping this repo-arch" "${db_file}"
+ continue
+ fi
+ if [ ! -f "${files_file}" ]; then
+ warning "%s doesn't exist, skipping this repo-arch" "${files_file}"
+ continue
+ fi
+
+ # Remove blacklisted packages and count them
+ # TODO capture all removed packages for printing on debug mode
+ msg2 "Removing blacklisted packages from .db database..."
+ LC_ALL=C repo-remove "${db_file}" "${blacklist[@]}"
+ msg2 "Removing blacklisted packages from .files database..."
+ LC_ALL=C repo-remove "${files_file}" "${blacklist[@]}"
+
+ # Get db contents
+ db=($(get_repo_content ${db_file}))
+
+ msg2 "Process clean db for syncing..."
+
+ # Create a whitelist, add * wildcard to end
+ # TODO due to lack of -arch suffix, the pool sync retrieves every arch even if
+ # we aren't syncing them
+ echo ${db[@]} | tr ' ' "\n" | sed "s|$|*|g" > /tmp/${_repo}-${_arch}.whitelist
+
+ msg2 "$(wc -l /tmp/${_repo}-${_arch}.whitelist | cut -d' ' -f1) packages in whitelist"
+
+ # Sync excluding everything but whitelist
+ # We delete here for cleanup
+ rsync ${extra} -rtlH \
+ --delete-after \
+ --delete-excluded \
+ --delay-updates \
+ --include-from=/tmp/${_repo}-${_arch}.whitelist \
+ --exclude="*" \
+ rsync://${mirror}/${mirrorpath}/${_repo}/os/${_arch}/ \
+ ${FTP_BASE}/${_repo}/os/${_arch}/
+
+ # Add a new whitelist
+ whitelists+=(/tmp/${_repo}-${_arch}.whitelist)
+
+ msg "Putting databases back in place"
+ rsync ${extra} -rtlH \
+ --delay-updates \
+ --safe-links \
+ "${WORKDIR}/${_repo}/os/${_arch}/" \
+ ${FTP_BASE}/${_repo}/os/${_arch}/
+
+ # Cleanup
+ unset db
+ done
+ done
+
+
+ msg "Syncing package pool"
+ # Concatenate all whitelists
+ cat ${whitelists[@]} | sort -u > /tmp/any.whitelist
+
+ msg2 "Retrieving $(wc -l /tmp/any.whitelist | cut -d' ' -f1) packages from pool"
+
+ # Sync
+ # *Don't delete-after*, this is the job of cleanup scripts. It will remove our
+ # packages too
+ for PKGPOOL in ${PKGPOOLS[@]}; do
+ rsync ${extra} -rtlH \
+ --delay-updates \
+ --safe-links \
+ --include-from=/tmp/any.whitelist \
+ --exclude="*" \
+ rsync://${mirror}/${mirrorpath}/${PKGPOOL}/ \
+ ${FTP_BASE}/${PKGPOOL}/
+ done
+
+ # Sync sources
+ msg "Syncing source pool"
+ #sed "s|\.pkg\.tar\.|.src.tar.|" /tmp/any.whitelist > /tmp/any-src.whitelist
+
+ #msg2 "Retrieving $(wc -l /tmp/any-src.whitelist | cut -d' ' -f1) sources from pool"
+ # Sync
+ # *Don't delete-after*, this is the job of cleanup scripts. It will remove our
+ # packages too
+ for SRCPOOL in ${SRCPOOLS[@]}; do
+ rsync ${extra} -rtlH \
+ --delay-updates \
+ --safe-links \
+ --include-from=/tmp/any.whitelist \
+ --exclude="*" \
+ rsync://${mirror}/${mirrorpath}/${SRCPOOL}/ \
+ ${FTP_BASE}/${SRCPOOL}/
+ done
-# Cleanup
- unset blacklist whitelists _arch _repo repo_file
+ # Cleanup
+ unset blacklist whitelists _arch _repo repo_file
}
trap_exit() {
- echo
- error "$@"
- exit 1
+ echo
+ error "$@"
+ exit 1
}
-source $(dirname $0)/config
-source $(dirname $0)/local_config
-source $(dirname $0)/libremessages
+source "$(dirname "$(readlink -e "$0")")/config"
+source "$(dirname "$(readlink -e "$0")")/local_config"
+source "$(dirname "$(readlink -e "$0")")/libremessages"
# From makepkg
set -E
@@ -188,5 +190,3 @@ trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT
trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR
init
-
-rm -r ${TMPDIR}/$0.$$.cache
diff --git a/db-update b/db-update
index 1fddb8a..8cf61fc 100755
--- a/db-update
+++ b/db-update
@@ -1,19 +1,26 @@
#!/bin/bash
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
if [ $# -ge 1 ]; then
- warning "Calling $(basename $0) with a specific repository is no longer supported"
+ warning "Calling ${0##*/} with a specific repository is no longer supported"
exit 1
fi
# Find repos with packages to release
-repos=($(find "${STAGING}" -mindepth 1 -maxdepth 1 -type d ! -empty -printf '%f ' 2>/dev/null))
+staging_repos=($(find "${STAGING}" -mindepth 1 -type f -name "*${PKGEXT}" -printf '%h\n' | sort -u))
if [ $? -ge 1 ]; then
die "Could not read ${STAGING}"
fi
+repos=()
+for staging_repo in ${staging_repos[@]##*/}; do
+ if in_array ${staging_repo} ${PKGREPOS[@]}; then
+ repos+=(${staging_repo})
+ fi
+done
+
# TODO: this might lock too much (architectures)
for repo in ${repos[@]}; do
for pkgarch in ${ARCHES[@]}; do
@@ -30,19 +37,24 @@ for repo in ${repos[@]}; do
fi
for pkg in ${pkgs[@]}; do
if [ -h "${pkg}" ]; then
- die "Package ${repo}/$(basename ${pkg}) is a symbolic link"
+ die "Package ${repo}/${pkg##*/} is a symbolic link"
fi
if ! check_pkgfile "${pkg}"; then
- die "Package ${repo}/$(basename ${pkg}) is not consistent with its meta data"
+ die "Package ${repo}/${pkg##*/} is not consistent with its meta data"
+ fi
+ if ${REQUIRE_SIGNATURE} && ! pacman-key -v "${pkg}.sig" >/dev/null 2>&1; then
+ die "Package ${repo}/${pkg##*/} does not have a valid signature"
+ fi
+ if ! check_pkgxbs "${pkg}" "${repo}"; then
+ die "Package ${repo}/${pkg##*/} is not consistent with xbs"
fi
if ! check_pkgrepos "${pkg}"; then
- die "Package ${repo}/$(basename ${pkg}) already exists in another repository"
+ die "Package ${repo}/${pkg##*/} already exists in another repository"
fi
done
- # This is fucking obnoxious
- #if ! check_splitpkgs ${repo} ${pkgs[@]}; then
- # die "Missing split packages for ${repo}"
- #fi
+ if ! check_splitpkgs ${repo} ${pkgs[@]}; then
+ die "Missing split packages for ${repo}"
+ fi
else
die "Could not read ${STAGING}"
fi
@@ -55,7 +67,7 @@ for repo in ${repos[@]}; do
add_pkgs=()
arch_pkgs=($(getpkgfiles "${STAGING}/${repo}/"*-${pkgarch}${PKGEXT} 2>/dev/null))
for pkg in ${arch_pkgs[@]} ${any_pkgs[@]}; do
- pkgfile="$(basename ${pkg})"
+ pkgfile="${pkg##*/}"
msg2 "${pkgfile} (${pkgarch})"
# any packages might have been moved by the previous run
if [ -f "${pkg}" ]; then
@@ -69,7 +81,7 @@ for repo in ${repos[@]}; do
if [ -f "$FTP_BASE/${PKGPOOL}/${pkgfile}.sig" ]; then
ln -s "../../../${PKGPOOL}/${pkgfile}.sig" "$FTP_BASE/$repo/os/${pkgarch}"
fi
- add_pkgs[${#add_pkgs[*]}]=${pkgfile}
+ add_pkgs[${#add_pkgs[*]}]=${pkgfile}
done
if [ ${#add_pkgs[@]} -ge 1 ]; then
arch_repo_add "${repo}" "${pkgarch}" ${add_pkgs[@]}
diff --git a/get-repos b/get-repos
index bfc08ff..5096433 100755
--- a/get-repos
+++ b/get-repos
@@ -9,9 +9,8 @@ trap_exit() {
exit 1
}
-source $(dirname $0)/config
-source $(dirname $0)/local_config
-source $(dirname $0)/libremessages
+source "$(dirname "$(readlink -e "$0")")/config"
+source "$(dirname "$(readlink -e "$0")")/libremessages"
# From makepkg
set -E
@@ -20,7 +19,9 @@ trap 'trap_exit "$(gettext "TERM signal caught. Exiting...")"' TERM HUP QUIT
trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT
trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR
-TMPDIR="$(mktemp -d /tmp/$(basename $0).XXXX)"
+WORKDIR=$(mktemp -dt "${0##*/}.XXXXXXXXXX")
+trap "rm -rf -- $(printf '%q' "${WORKDIR}")" EXIT
+
DBLIST=()
# Repos
@@ -32,7 +33,7 @@ done
# Get them all
msg "Retrieving ${#DBLIST[@]} databases"
-wget --directory-prefix=${TMPDIR} \
+wget --directory-prefix=${WORKDIR} \
--no-verbose \
--force-directories \
--no-host-directories \
@@ -43,7 +44,7 @@ wget --directory-prefix=${TMPDIR} \
arch_re="$(echo "(${ARCHES[@]} i586)" | tr ' ' '|')"
msg "Adding to parabolaweb"
-find "${TMPDIR}" -iname "*${FILESEXT}" | while read _db; do
+find "${WORKDIR}" -iname "*${FILESEXT}" | while read _db; do
_arch=$(echo "${_db}" | egrep -o "${arch_re}")
if [ -z "${_arch}" ]; then
@@ -53,7 +54,3 @@ find "${TMPDIR}" -iname "*${FILESEXT}" | while read _db; do
"${WEB_DIR}"/manage.py reporead "${_arch}" "${_db}" || true
done
-
-rm -r ${TMPDIR}
-
-exit $?
diff --git a/git-pbs b/git-pbs
deleted file mode 100755
index b815863..0000000
--- a/git-pbs
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/bash
-
-_pkg=$1
-
-mkdir -p $_pkg
-pushd $_pkg
-
-
-if [ ! -d .git ]; then
-# Start a git repo for the package
-# Add the remote origin
-# Pull the package branch onto an unmodified branch
- git init
- git remote add arch git://projects.archlinux.org/svntogit/packages.git
-
-# Export the repository
- touch .git/git-daemon-export-ok
-
-# Pass the -b flag to checkout to create the branches
- extra="-b"
-fi
-
-git checkout ${extra} upstream
-git pull arch packages/$_pkg
-
-# Move PKGBUILD and files to the basedir
-# Remove everything else from the repo
-git checkout ${extra} master
-
-# This produces a lot of merging conflicts
-git merge upstream
-
-# This apparently solves them
-git mv trunk/* .
-git rm -rf repos
-
-# Remove the actual files
-rm -rf trunk repos
-
-# Commit everything
-git commit -a -m "Converted to PBS"
-
-# Return to the repo
-popd >/dev/null
diff --git a/libremessages b/libremessages
deleted file mode 100755
index 9fbbc2b..0000000
--- a/libremessages
+++ /dev/null
@@ -1,77 +0,0 @@
-# Copyright (c) 2006-2010 Pacman Development Team <pacman-dev@archlinux.org>
-# Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
-# Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
-# Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
-# Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
-# Copyright (c) 2006 by Alex Smith <alex@alex-smith.me.uk>
-# Copyright (c) 2006 by Andras Voroskoi <voroskoi@frugalware.org>
-# Copyright (c) 2011 by Joshua Haase <hahj87@gmail.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# gettext initialization
-export TEXTDOMAIN='libretools'
-export TEXTDOMAINDIR='/usr/share/locale'
-
-# check if messages are to be printed using color
-unset ALL_OFF BOLD BLUE GREEN RED YELLOW
-
-if tput setaf 0 &>/dev/null; then
- ALL_OFF="$(tput sgr0)"
- BOLD="$(tput bold)"
- BLUE="${BOLD}$(tput setaf 4)"
- GREEN="${BOLD}$(tput setaf 2)"
- RED="${BOLD}$(tput setaf 1)"
- YELLOW="${BOLD}$(tput setaf 3)"
- PURPLE="${ALL_OFF}$(tput setaf 5)"
-else
- ALL_OFF="\033[1;0m"
- BOLD="\033[1;1m"
- BLUE="${BOLD}\033[1;34m"
- GREEN="${BOLD}\033[1;32m"
- RED="${BOLD}\033[1;31m"
- YELLOW="${BOLD}\033[1;33m"
- PURPLE="${BOLD}\033[1;30;40m"
-fi
-
-stdnull() {
- local action=$1;
- eval "${action} >/dev/null 2>&1"
-}
-
-plain() {
- local mesg=$1; shift
- printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-msg() {
- local mesg=$1; shift
- printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-msg2() {
- local mesg=$1; shift
- printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-warning() {
- local mesg=$1; shift
- printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-error() {
- local mesg=$1; shift
- printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
diff --git a/local_config b/local_config
index 8f3946a..ec22d84 100644
--- a/local_config
+++ b/local_config
@@ -1,31 +1,20 @@
-# Mirror options
+#/bin/bash # as a hint to text editors
+_paraboladir=/srv/http/repo/public
+
+# db-sync
#mirror="mirrors.uk2.net"
mirror="mirrors.kernel.org"
#mirror="mirror.umd.edu"
#mirror="archlinux.c3sl.ufpr.br"
#mirror="mirror.us.leaseweb.net"
#mirror="mirror.de.leaseweb.net"
-mirrorpath="archlinux"
-
-# Directories: they should end without /
-paraboladir=/srv/http/repo/public
-tempdir=/tmp
-archdb=${tempdir}/db
-docs_dir=${paraboladir}/docs
-repodir=${paraboladir}
-licenses_dir=${docs_dir}/pending_licenses
-# End Directories
-
-# Files
-logname=${paraboladir}/log/$(date -u +%Y%m%d-%H:%M)-repo-maintainer.log
-rsout_file=${tempdir}/rsout
-rsync_not_needed=${tempdir}/rsync_not_needed
+mirrorpath="mirrors/archlinux"
-rsync_blacklist=${docs_dir}/rsyncBlacklist
+# mkrepo
+repodir=${_paraboladir}/repo
-blacklist=${docs_dir}/blacklist.txt
-whitelist=${docs_dir}/whitelist.txt
+# yf-update
+blacklist=${_paraboladir}/docs/blacklist.txt
+whitelist=${_paraboladir}/docs/whitelist.txt
-# Rsync commands
-rsync_list_command="rsync -rptgoL --exclude='*.abs.tar.*' --list-only --no-motd "
-rsync_update_command="rsync -vrptgoL --exclude='*.abs.tar.*' --no-motd "
+unset _paraboladir
diff --git a/migrate-repo b/migrate-repo
index 2e44adb..751d5bd 100755
--- a/migrate-repo
+++ b/migrate-repo
@@ -1,6 +1,6 @@
#!/bin/bash
-source $(dirname $0)/config
+source "$(dirname "$(readlink -e "$0")")/config"
#dryrun="--dry-run"
diff --git a/mkrepo b/mkrepo
index 5f704cc..10d014b 100755
--- a/mkrepo
+++ b/mkrepo
@@ -3,8 +3,8 @@
# License: GPLv3+
# Description: A script to quickly create new [repos]
-source $(dirname $0)/config
-source $(dirname $0)/local_config
+source "$(dirname "$(readlink -e "$0")")/config"
+source "$(dirname "$(readlink -e "$0")")/local_config"
# TODO it would be simpler to expand arrays to {element1,element2,etc}
for repo in $@; do
diff --git a/repo-remove b/repo-remove
deleted file mode 100755
index c4bf96f..0000000
--- a/repo-remove
+++ /dev/null
@@ -1,561 +0,0 @@
-#!/bin/bash
-#
-# repo-add - add a package to a given repo database file
-# repo-remove - remove a package entry from a given repo database file
-# Generated from repo-add.in; do not edit by hand.
-#
-# Copyright (c) 2006-2008 Aaron Griffin <aaron@archlinux.org>
-# Copyright (c) 2007-2008 Dan McGee <dan@archlinux.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-LICENSESDIR=/home/parabolavnx/licenses
-
-# gettext initialization
-export TEXTDOMAIN='pacman'
-export TEXTDOMAINDIR='/usr/share/locale'
-
-myver='3.5.0'
-confdir='/home/parabolavnx/etc'
-
-QUIET=0
-DELTA=0
-WITHFILES=0
-REPO_DB_FILE=
-LOCKFILE=
-CLEAN_LOCK=0
-
-# ensure we have a sane umask set
-umask 0022
-
-msg() {
- (( QUIET )) && return
- local mesg=$1; shift
- printf "==> ${mesg}\n" "$@" >&1
-}
-
-msg2() {
- (( QUIET )) && return
- local mesg=$1; shift
- printf " -> ${mesg}\n" "$@" >&1
-}
-
-warning() {
- local mesg=$1; shift
- printf "==> $(gettext "WARNING:") ${mesg}\n" "$@" >&2
-}
-
-error() {
- local mesg=$1; shift
- printf "==> $(gettext "ERROR:") ${mesg}\n" "$@" >&2
-}
-
-# print usage instructions
-usage() {
- printf "repo-add, repo-remove (pacman) %s\n\n" "$myver"
- printf "$(gettext "Usage: repo-add [-d] [-f] [-q] <path-to-db> <package|delta> ...\n")"
- printf "$(gettext "Usage: repo-remove [-q] <path-to-db> <packagename|delta> ...\n\n")"
- printf "$(gettext "\
-repo-add will update a package database by reading a package file.\n\
-Multiple packages to add can be specified on the command line.\n\n")"
- printf "$(gettext "\
-repo-remove will update a package database by removing the package name\n\
-specified on the command line from the given repo database. Multiple\n\
-packages to remove can be specified on the command line.\n\n")"
- printf "$(gettext "\
-Use the -q/--quiet flag to minimize output to basic messages, warnings,\n\
-and errors.\n\n")"
- printf "$(gettext "\
-Use the -d/--delta flag to automatically generate and add a delta file\n\
-between the old entry and the new one, if the old package file is found\n\
-next to the new one.\n\n")"
- printf "$(gettext "\
-Use the -f/--files flag to update a database including file entries.\n\n")"
- echo "$(gettext "Example: repo-add /path/to/repo.db.tar.gz pacman-3.0.0.pkg.tar.gz")"
- echo "$(gettext "Example: repo-remove /path/to/repo.db.tar.gz kernel26")"
-}
-
-version() {
- printf "repo-add, repo-remove (pacman) %s\n\n" "$myver"
- printf "$(gettext "\
-Copyright (C) 2006-2008 Aaron Griffin <aaron@archlinux.org>.\n\
-Copyright (c) 2007-2008 Dan McGee <dan@archlinux.org>.\n\n\
-This is free software; see the source for copying conditions.\n\
-There is NO WARRANTY, to the extent permitted by law.\n")"
-}
-
-# write a list entry
-# arg1 - Entry name
-# arg2 - List
-# arg3 - File to write to
-write_list_entry() {
- if [[ -n $2 ]]; then
- echo "%$1%" >>$3
- echo -e $2 >>$3
- fi
-}
-
-find_pkgentry()
-{
- local pkgname=$1
- local pkgentry
- for pkgentry in $tmpdir/$pkgname*; do
- name=${pkgentry##*/}
- if [[ ${name%-*-*} = $pkgname ]]; then
- echo $pkgentry
- return 0
- fi
- done
- return 1
-}
-
-# Get the package name from the delta filename
-get_delta_pkgname() {
- local tmp
-
- tmp=${1##*/}
- echo ${tmp%-*-*_to*}
-}
-
-# write a delta entry
-# arg1 - path to delta file
-db_write_delta()
-{
- deltafile="$1"
- pkgname="$(get_delta_pkgname $deltafile)"
-
- pkgentry=$(find_pkgentry $pkgname)
- if [[ -z $pkgentry ]]; then
- error "$(gettext "No database entry for package '%s'.")" "$pkgname"
- return 1
- fi
- deltas="$pkgentry/deltas"
- if [[ ! -f $deltas ]]; then
- echo -e "%DELTAS%" >$deltas
- fi
- # get md5sum and compressed size of package
- md5sum="$(openssl dgst -md5 "$deltafile")"
- md5sum="${md5sum##* }"
- csize=$(stat -L -c %s "$deltafile")
-
- oldfile=$(xdelta3 printhdr $deltafile | grep "XDELTA filename (source)" | sed 's/.*: *//')
- newfile=$(xdelta3 printhdr $deltafile | grep "XDELTA filename (output)" | sed 's/.*: *//')
-
- if grep -q "$oldfile.*$newfile" $deltas; then
- sed -i.backup "/$oldfile.*$newfile/d" $deltas && rm -f $deltas.backup
- fi
- msg2 "$(gettext "Adding 'deltas' entry : %s -> %s")" "$oldfile" "$newfile"
- echo ${deltafile##*/} $md5sum $csize $oldfile $newfile >> $deltas
-
- return 0
-} # end db_write_delta
-
-# remove a delta entry
-# arg1 - path to delta file
-db_remove_delta()
-{
- deltafile="$1"
- filename=${deltafile##*/}
- pkgname="$(get_delta_pkgname $deltafile)"
-
- pkgentry=$(find_pkgentry $pkgname)
- if [[ -z $pkgentry ]]; then
- return 1
- fi
- deltas="$pkgentry/deltas"
- if [[ ! -f $deltas ]]; then
- return 1
- fi
- if grep -q "$filename" $deltas; then
- sed -i.backup "/$filename/d" $deltas && rm -f $deltas.backup
- msg2 "$(gettext "Removing existing entry '%s'...")" "$filename"
- return 0
- fi
-
- return 1
-} # end db_remove_delta
-
-# write an entry to the pacman database
-# arg1 - path to package
-db_write_entry()
-{
- # blank out all variables
- local pkgfile="$1"
- local pkgname pkgver pkgdesc csize size md5sum url arch builddate packager \
- _groups _licenses _replaces _depends _conflicts _provides _optdepends
-
- local OLDIFS="$IFS"
- # IFS (field separator) is only the newline character
- IFS="
-"
-
- # read info from the zipped package
- local line var val
- for line in $(bsdtar -xOqf "$pkgfile" .PKGINFO |
- grep -v '^#' | sed 's|\(\w*\)\s*=\s*\(.*\)|\1 \2|'); do
- # bash awesomeness here- var is always one word, val is everything else
- var=${line%% *}
- val=${line#* }
- declare $var="$val"
- case "$var" in
- group) _groups="$_groups$group\n" ;;
- license) _licenses="$_licenses$license\n" ;;
- replaces) _replaces="$_replaces$replaces\n" ;;
- depend) _depends="$_depends$depend\n" ;;
- conflict) _conflicts="$_conflicts$conflict\n" ;;
- provides) _provides="$_provides$provides\n" ;;
- optdepend) _optdepends="$_optdepends$optdepend\n" ;;
- esac
- done
-
- IFS=$OLDIFS
-
- # get md5sum and compressed size of package
- md5sum="$(openssl dgst -md5 "$pkgfile")"
- md5sum="${md5sum##* }"
- csize=$(stat -L -c %s "$pkgfile")
-
- # ensure $pkgname and $pkgver variables were found
- if [[ -z $pkgname || -z $pkgver ]]; then
- error "$(gettext "Invalid package file '%s'.")" "$pkgfile"
- return 1
- fi
-
- pushd "$tmpdir" >/dev/null
- if [[ -d $pkgname-$pkgver ]]; then
- warning "$(gettext "An entry for '%s' already existed")" "$pkgname-$pkgver"
- else
- if (( DELTA )); then
- pkgentry=$(find_pkgentry $pkgname)
- if [[ -n $pkgentry ]]; then
- local oldfilename=$(grep -A1 FILENAME $pkgentry/desc | tail -n1)
- local oldfile="$(dirname $1)/$oldfilename"
- fi
- fi
- fi
-
- # remove an existing entry if it exists, ignore failures
- db_remove_entry "$pkgname"
-
- # create package directory
- mkdir "$pkgname-$pkgver"
- pushd "$pkgname-$pkgver" >/dev/null
-
- # restore an eventual deltas file
- [[ -f ../$pkgname.deltas ]] && mv "../$pkgname.deltas" deltas
-
- # create desc entry
- msg2 "$(gettext "Creating '%s' db entry...")" 'desc'
- echo -e "%FILENAME%\n$(basename "$1")\n" >>desc
- echo -e "%NAME%\n$pkgname\n" >>desc
- [[ -n $pkgbase ]] && echo -e "%BASE%\n$pkgbase\n" >>desc
- echo -e "%VERSION%\n$pkgver\n" >>desc
- [[ -n $pkgdesc ]] && echo -e "%DESC%\n$pkgdesc\n" >>desc
- write_list_entry "GROUPS" "$_groups" "desc"
- [[ -n $csize ]] && echo -e "%CSIZE%\n$csize\n" >>desc
- [[ -n $size ]] && echo -e "%ISIZE%\n$size\n" >>desc
-
- # compute checksums
- msg2 "$(gettext "Computing md5 checksums...")"
- echo -e "%MD5SUM%\n$md5sum\n" >>desc
-
- [[ -n $url ]] && echo -e "%URL%\n$url\n" >>desc
- write_list_entry "LICENSE" "$_licenses" "desc"
- [[ -n $arch ]] && echo -e "%ARCH%\n$arch\n" >>desc
- [[ -n $builddate ]] && echo -e "%BUILDDATE%\n$builddate\n" >>desc
- [[ -n $packager ]] && echo -e "%PACKAGER%\n$packager\n" >>desc
- write_list_entry "REPLACES" "$_replaces" "desc"
-
- # create depends entry
- msg2 "$(gettext "Creating '%s' db entry...")" 'depends'
- # create the file even if it will remain empty
- touch "depends"
- write_list_entry "DEPENDS" "$_depends" "depends"
- write_list_entry "CONFLICTS" "$_conflicts" "depends"
- write_list_entry "PROVIDES" "$_provides" "depends"
- write_list_entry "OPTDEPENDS" "$_optdepends" "depends"
-
- popd >/dev/null
- popd >/dev/null
-
- # create files file if wanted
- if (( WITHFILES )); then
- msg2 "$(gettext "Creating '%s' db entry...")" 'files'
- local files_path="$tmpdir/$pkgname-$pkgver/files"
- echo "%FILES%" >$files_path
- bsdtar --exclude='.*' -tf "$pkgfile" >>$files_path
- fi
-
- # create a delta file
- if (( DELTA )); then
- if [[ -n $oldfilename ]]; then
- if [[ -f $oldfile ]]; then
- delta=$(pkgdelta -q $oldfile $1)
- if [[ -f $delta ]]; then
- db_write_delta $delta
- fi
- else
- warning "$(gettext "Old package file not found: %s")" "$oldfilename"
- fi
- fi
- fi
-
- # Extracts licenses to a common license dir
- msg "Extracting license"
- if bsdtar -xOf ${pkgfile} .PKGINFO | grep "license" | grep "custom" ; then
- if [ -d ${LICENSESDIR}/${pkgname} ]; then
- rm -r ${LICENSESDIR}/${pkgname}
- fi
-
- # Change dir to licenses, and extract them stripping the first part of the path
- bsdtar -C ${LICENSESDIR}/ --include="usr/share/licenses/" \
- --strip-components 3 -xf ${pkgfile} >/dev/null 2>&1
-
- if [ $? -ne 0 ]; then
- warning "This package doesn't contain a license dir"
- fi
- fi
-
- return 0
-} # end db_write_entry
-
-# remove existing entries from the DB
-# arg1 - package name
-db_remove_entry() {
- local pkgname=$1
- local notfound=1
- local pkgentry=$(find_pkgentry $pkgname)
- while [[ -n $pkgentry ]]; do
- notfound=0
- if [[ -f $pkgentry/deltas ]]; then
- mv "$pkgentry/deltas" "$tmpdir/$pkgname.deltas"
- fi
- msg2 "$(gettext "Removing existing entry '%s'...")" \
- "$(basename $pkgentry)"
- rm -rf $pkgentry
- pkgentry=$(find_pkgentry $pkgname)
- done
-
- msg "Removing license"
- if [ -d ${LICENSESDIR}/${pkgname} ]; then
- rm -r ${LICENSESDIR}/${pkgname}
- fi
-
- return $notfound
-} # end db_remove_entry
-
-check_repo_db()
-{
- # check lock file
- if ( set -o noclobber; echo "$$" > "$LOCKFILE") 2> /dev/null; then
- CLEAN_LOCK=1
- else
- error "$(gettext "Failed to acquire lockfile: %s.")" "$LOCKFILE"
- [[ -f $LOCKFILE ]] && error "$(gettext "Held by process %s")" "$(cat $LOCKFILE)"
- exit 1
- fi
-
- if [[ -f $REPO_DB_FILE ]]; then
- # there are two situations we can have here- a DB with some entries,
- # or a DB with no contents at all.
- if ! bsdtar -tqf "$REPO_DB_FILE" '*/desc' >/dev/null 2>&1; then
- # check empty case
- if [[ -n $(bsdtar -tqf "$REPO_DB_FILE" '*' 2>/dev/null) ]]; then
- error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE"
- exit 1
- fi
- fi
- msg "$(gettext "Extracting database to a temporary location...")"
- bsdtar -xf "$REPO_DB_FILE" -C "$tmpdir"
- else
- case "$cmd" in
- repo-remove)
- error "$(gettext "Repository file '%s' was not found.")" "$REPO_DB_FILE"
- exit 1
- ;;
- repo-add)
- # check if the file can be created (write permission, directory existence, etc)
- if ! touch "$REPO_DB_FILE"; then
- error "$(gettext "Repository file '%s' could not be created.")" "$REPO_DB_FILE"
- exit 1
- fi
- rm -f "$REPO_DB_FILE"
- ;;
- esac
- fi
-}
-
-add()
-{
- if [[ ! -f $1 ]]; then
- error "$(gettext "File '%s' not found.")" "$1"
- return 1
- fi
-
- if [[ ${1##*.} == "delta" ]]; then
- deltafile=$1
- msg "$(gettext "Adding delta '%s'")" "$deltafile"
- if ! type xdelta3 &>/dev/null; then
- error "$(gettext "Cannot find the xdelta3 binary! Is xdelta3 installed?")"
- exit 1
- fi
- if db_write_delta "$deltafile"; then
- return 0
- else
- return 1
- fi
- fi
-
- pkgfile=$1
- if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then
- error "$(gettext "'%s' is not a package file, skipping")" "$pkgfile"
- return 1
- fi
-
- msg "$(gettext "Adding package '%s'")" "$pkgfile"
-
- db_write_entry "$pkgfile"
-}
-
-remove()
-{
- if [[ ${1##*.} == "delta" ]]; then
- deltafile=$1
- msg "$(gettext "Searching for delta '%s'...")" "$deltafile"
- if db_remove_delta "$deltafile"; then
- return 0
- else
- error "$(gettext "Delta matching '%s' not found.")" "$deltafile"
- return 1
- fi
- fi
-
- pkgname=$1
- msg "$(gettext "Searching for package '%s'...")" "$pkgname"
-
- if db_remove_entry "$pkgname"; then
- rm -f "$tmpdir/$pkgname.deltas"
- return 0
- else
- error "$(gettext "Package matching '%s' not found.")" "$pkgname"
- return 1
- fi
-}
-
-trap_exit()
-{
- echo
- error "$@"
- exit 1
-}
-
-clean_up() {
- local exit_code=$?
-
- [[ -d $tmpdir ]] && rm -rf "$tmpdir"
- (( CLEAN_LOCK )) && [[ -f $LOCKFILE ]] && rm -f "$LOCKFILE"
-
- exit $exit_code
-}
-
-# PROGRAM START
-
-# determine whether we have gettext; make it a no-op if we do not
-if ! type gettext &>/dev/null; then
- gettext() {
- echo "$@"
- }
-fi
-
-case "$1" in
- -h|--help) usage; exit 0;;
- -V|--version) version; exit 0;;
-esac
-
-# figure out what program we are
-cmd="$(basename $0)"
-if [[ $cmd != "repo-add" && $cmd != "repo-remove" ]]; then
- error "$(gettext "Invalid command name '%s' specified.")" "$cmd"
- exit 1
-fi
-
-tmpdir=$(mktemp -d /tmp/repo-tools.XXXXXXXXXX) || (\
- error "$(gettext "Cannot create temp directory for database building.")"; \
- exit 1)
-
-trap 'clean_up' EXIT
-trap 'trap_exit "$(gettext "TERM signal caught. Exiting...")"' TERM HUP QUIT
-trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT
-trap 'trap_exit "$(gettext "An unknown error has occured. Exiting...")"' ERR
-
-success=0
-# parse arguments
-for arg in "$@"; do
- case "$arg" in
- -q|--quiet) QUIET=1;;
- -d|--delta) DELTA=1;;
- -f|--files) WITHFILES=1;;
- *)
- if [[ -z $REPO_DB_FILE ]]; then
- REPO_DB_FILE="$arg"
- LOCKFILE="$REPO_DB_FILE.lck"
- check_repo_db
- else
- case "$cmd" in
- repo-add) add $arg && success=1 ;;
- repo-remove) remove $arg && success=1 ;;
- esac
- fi
- ;;
- esac
-done
-
-# if at least one operation was a success, re-zip database
-if (( success )); then
- msg "$(gettext "Creating updated database file '%s'")" "$REPO_DB_FILE"
-
- case "$REPO_DB_FILE" in
- *tar.gz) TAR_OPT="z" ;;
- *tar.bz2) TAR_OPT="j" ;;
- *tar.xz) TAR_OPT="J" ;;
- *) warning "$(gettext "'%s' does not have a valid archive extension.")" \
- "$REPO_DB_FILE" ;;
- esac
-
- filename=$(basename "$REPO_DB_FILE")
-
- pushd "$tmpdir" >/dev/null
- if [[ -n $(ls) ]]; then
- bsdtar -c${TAR_OPT}f "$filename" *
- else
- # we have no packages remaining? zip up some emptyness
- warning "$(gettext "No packages remain, creating empty database.")"
- bsdtar -c${TAR_OPT}f "$filename" -T /dev/null
- fi
- popd >/dev/null
-
- [[ -f $REPO_DB_FILE ]] && mv -f "$REPO_DB_FILE" "${REPO_DB_FILE}.old"
- [[ -f $tmpdir/$filename ]] && mv "$tmpdir/$filename" "$REPO_DB_FILE"
- dblink="${REPO_DB_FILE%.tar.*}"
- target=${REPO_DB_FILE##*/}
- ln -sf "$target" "$dblink" 2>/dev/null || \
- ln -f "$target" "$dblink" 2>/dev/null || \
- cp "$REPO_DB_FILE" "$dblink"
-else
- msg "$(gettext "No packages modified, nothing to do.")"
- exit 1
-fi
-
-exit 0
-# vim: set ts=2 sw=2 noet:
diff --git a/repo-restore-to-normal b/repo-restore-to-normal
index 9463731..3636920 100755
--- a/repo-restore-to-normal
+++ b/repo-restore-to-normal
@@ -1,8 +1,8 @@
#!/bin/bash
# Solves issue165
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
+. "$(dirname "$(readlink -e "$0")")/config"
CLEANUP_DESTDIR=/home/parabolavnx/repo/pool/restore
PKGREPOS=(community)
diff --git a/test/lib/common.inc b/test/lib/common.inc
index a2dee10..2f308dd 100644
--- a/test/lib/common.inc
+++ b/test/lib/common.inc
@@ -1,24 +1,60 @@
set -E
+# override the default TMPDIR
+init_tmpdir() {
+ [[ -n $MASTER_TMPDIR ]] || export MASTER_TMPDIR="$(mktemp -dqt ${0##*/}.XXXXXXXXXX)"
+ export TMPDIR=$MASTER_TMPDIR
+}
+
+_TMPDIR=$TMPDIR
. "$(dirname ${BASH_SOURCE[0]})/../../config"
+TMPDIR=$_TMPDIR
+init_tmpdir
+
. "$(dirname ${BASH_SOURCE[0]})/../../db-functions"
+arches() (
+ . $(librelib conf.sh)
+ load_files libretools
+ printf '%s\n' "${ARCHES[*]}"
+)
+
+arch_svn() {
+ /usr/bin/svn "$@"
+}
+
+signpkg() {
+ if [[ -r '/etc/makepkg.conf' ]]; then
+ source '/etc/makepkg.conf'
+ else
+ die '/etc/makepkg.conf not found!'
+ fi
+ if [[ -r ~/.makepkg.conf ]]; then
+ . ~/.makepkg.conf
+ fi
+ if [[ -n $GPGKEY ]]; then
+ SIGNWITHKEY="-u ${GPGKEY}"
+ fi
+ gpg --detach-sign --use-agent ${SIGNWITHKEY} ${@} || die
+}
+
oneTimeSetUp() {
local p
local d
local a
+ local arches=($(arches))
local pkgname
local pkgarch
local pkgversion
local build
- pkgdir="$(mktemp -d /tmp/$(basename $0).XXXXXXXXXX)"
+ pkgdir="$(mktemp -dqt ${0##*/}.XXXXXXXXXX)"
cp -Lr $(dirname ${BASH_SOURCE[0]})/../packages/* "${pkgdir}"
msg 'Building packages...'
for d in "${pkgdir}"/*; do
pushd $d >/dev/null
pkgname=($(. PKGBUILD; echo ${pkgname[@]}))
pkgarch=($(. PKGBUILD; echo ${arch[@]}))
- pkgversion=$(. PKGBUILD; echo $(get_full_version ${epoch:-0} ${pkgver} ${pkgrel}))
+ pkgversion=$(. PKGBUILD; get_full_version)
build=true
for a in ${pkgarch[@]}; do
@@ -29,17 +65,19 @@ oneTimeSetUp() {
if ! ${build}; then
if [ "${pkgarch[0]}" == 'any' ]; then
- sudo extra-x86_64-build || die 'extra-x86_64-build failed'
+ sudo libremakepkg || die 'libremakepkg failed'
else
for a in ${pkgarch[@]}; do
- sudo extra-${a}-build || die "extra-${a}-build failed"
+ if in_array $a ${arches[@]}; then
+ sudo setarch $a libremakepkg -n $a || die "setarch ${a} libremakepkg -n ${a} failed"
+ for p in ${pkgname[@]}; do
+ cp ${p}-${pkgversion}-${a}${PKGEXT} $(dirname ${BASH_SOURCE[0]})/../packages/${d##*/}
+ done
+ else
+ warning "skipping arch %s" "$a"
+ fi
done
fi
- for a in ${pkgarch[@]}; do
- for p in ${pkgname[@]}; do
- cp ${p}-${pkgversion}-${a}${PKGEXT} $(dirname ${BASH_SOURCE[0]})/../packages/$(basename ${d})
- done
- done
fi
popd >/dev/null
done
@@ -56,16 +94,18 @@ setUp() {
local a
[ -f "$(dirname ${BASH_SOURCE[0]})/../../config.local" ] && die "$(dirname ${BASH_SOURCE[0]})/../../config.local exists"
- TMP="$(mktemp -d /dev/shm/$(basename $0).XXXXXXXXXX)"
+ init_tmpdir
+ TMP="$(mktemp -dqt ${0##*/}.XXXXXXXXXX)"
#msg "Using ${TMP}"
PKGREPOS=('core' 'extra' 'testing')
PKGPOOL='pool/packages'
+ SRCPOOL='pool/sources'
mkdir -p "${TMP}/"{ftp,tmp,staging,{package,source}-cleanup,svn-packages-{copy,repo}}
for r in ${PKGREPOS[@]}; do
mkdir -p "${TMP}/staging/${r}"
- for a in ${ARCHES[@]} any; do
+ for a in ${ARCHES[@]}; do
mkdir -p "${TMP}/ftp/${r}/os/${a}"
done
done
@@ -74,21 +114,33 @@ setUp() {
msg 'Creating svn repository...'
svnadmin create "${TMP}/svn-packages-repo"
- svn checkout -q "file://${TMP}/svn-packages-repo" "${TMP}/svn-packages-copy"
+ arch_svn checkout -q "file://${TMP}/svn-packages-repo" "${TMP}/svn-packages-copy"
for p in "${pkgdir}"/*; do
- pkg=$(basename $p)
+ pkg=${p##*/}
mkdir -p "${TMP}/svn-packages-copy/${pkg}"/{trunk,repos}
cp "${p}"/* "${TMP}/svn-packages-copy"/${pkg}/trunk/
- svn add -q "${TMP}/svn-packages-copy"/${pkg}
- svn commit -q -m"initial commit of ${pkg}" "${TMP}/svn-packages-copy"
+ arch_svn add -q "${TMP}/svn-packages-copy"/${pkg}
+ arch_svn commit -q -m"initial commit of ${pkg}" "${TMP}/svn-packages-copy"
done
+ mkdir -p "${TMP}/home/.config/libretools"
+ export XDG_CONFIG_HOME="${TMP}/home/.config"
+ printf '%s\n' \
+ 'SVNURL=foo' \
+ "SVNREPO=\"${TMP}/svn-packages-copy\"" \
+ "ARCHES=($(arches))" \
+ > $XDG_CONFIG_HOME/libretools/xbs-abs.conf
+ printf '%s\n' 'BUILDSYSTEM=abs' > $XDG_CONFIG_HOME/xbs.conf
+
cat <<eot > "$(dirname ${BASH_SOURCE[0]})/../../config.local"
FTP_BASE="${TMP}/ftp"
- SVNREPO="file://${TMP}/svn-packages-repo"
+ SVNREPO="${TMP}/svn-packages-copy"
PKGREPOS=(${PKGREPOS[@]})
PKGPOOL="${PKGPOOL}"
+ SRCPOOL="${SRCPOOL}"
+ TESTING_REPO='testing'
+ STABLE_REPOS=('core' 'extra')
CLEANUP_DESTDIR="${TMP}/package-cleanup"
SOURCE_CLEANUP_DESTDIR="${TMP}/source-cleanup"
STAGING="${TMP}/staging"
@@ -110,18 +162,24 @@ releasePackage() {
local repo=$1
local pkgbase=$2
local arch=$3
+ local a
+ local p
+ local pkgver
+ local pkgname
pushd "${TMP}/svn-packages-copy"/${pkgbase}/trunk/ >/dev/null
- archrelease ${repo}-${arch} >/dev/null 2&>1
- pkgver=$(. PKGBUILD; echo $(get_full_version ${epoch:-0} ${pkgver} ${pkgrel}))
+ xbs release ${repo} ${arch} >/dev/null 2>&1
+ pkgver=$(. PKGBUILD; get_full_version)
+ pkgname=($(. PKGBUILD; echo ${pkgname[@]}))
popd >/dev/null
cp "${pkgdir}/${pkgbase}"/*-${pkgver}-${arch}${PKGEXT} "${STAGING}"/${repo}/
if ${REQUIRE_SIGNATURE}; then
- # TODO: really sign the packages with a valid key
- find "${STAGING}"/${repo}/ -type f \
- -name "*-${pkgver}-${arch}${PKGEXT}" \
- -exec touch {}.sig \;
+ for a in ${arch[@]}; do
+ for p in ${pkgname[@]}; do
+ signpkg "${STAGING}"/${repo}/${p}-${pkgver}-${a}${PKGEXT}
+ done
+ done
fi
}
@@ -136,28 +194,25 @@ checkAnyPackageDB() {
[ -r "${FTP_BASE}/${PKGPOOL}/${pkg}.sig" ] || fail "${PKGPOOL}/${pkg}.sig not found"
fi
- for arch in i686 x86_64; do
+ for arch in $(arches); do
[ -L "${FTP_BASE}/${repo}/os/${arch}/${pkg}" ] || fail "${repo}/os/${arch}/${pkg} is not a symlink"
- [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}")" == "${FTP_BASE}/${PKGPOOL}/${pkg}" ] \
+ [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}")" ] \
|| fail "${repo}/os/${arch}/${pkg} does not link to ${PKGPOOL}/${pkg}"
if ${REQUIRE_SIGNATURE}; then
[ -L "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig" ] || fail "${repo}/os/${arch}/${pkg}.sig is not a symlink"
- [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig")" == "${FTP_BASE}/${PKGPOOL}/${pkg}.sig" ] \
+ [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}.sig")" ] \
|| fail "${repo}/os/${arch}/${pkg}.sig does not link to ${PKGPOOL}/${pkg}.sig"
fi
+
+ for db in ${DBEXT} ${FILESEXT}; do
+ ( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
+ && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep ${pkg} &>/dev/null) \
+ || fail "${pkg} not in ${repo}/os/${arch}/${repo}${db%.tar.*}"
+ done
done
[ -r "${STAGING}"/${repo}/${pkg} ] && fail "${repo}/${pkg} found in staging dir"
[ -r "${STAGING}"/${repo}/${pkg}.sig ] && fail "${repo}/${pkg}.sig found in staging dir"
-
- for db in ${DBEXT} ${FILESEXT}; do
- ( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
- && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep -q ${pkg}) \
- || fail "${pkg} not in ${repo}/os/${arch}/${repo}${db%.tar.*}"
- done
-
- [ -r "${FTP_BASE}/${repo}/os/any/${pkg}" ] && fail "${repo}/os/any/${pkg} should not exist"
- [ -r "${FTP_BASE}/${repo}/os/any/${pkg}.sig" ] && fail "${repo}/os/any/${pkg}.sig should not exist"
}
checkAnyPackage() {
@@ -167,7 +222,7 @@ checkAnyPackage() {
checkAnyPackageDB $repo $pkg
local pkgbase=$(getpkgbase "${FTP_BASE}/${PKGPOOL}/${pkg}")
- svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
+ arch_svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
[ -d "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-any" ] \
|| fail "svn-packages-copy/${pkgbase}/repos/${repo}-any does not exist"
}
@@ -182,7 +237,7 @@ checkPackageDB() {
[ -L "${FTP_BASE}/${repo}/os/${arch}/${pkg}" ] || fail "${repo}/os/${arch}/${pkg} not a symlink"
[ -r "${STAGING}"/${repo}/${pkg} ] && fail "${repo}/${pkg} found in staging dir"
- [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}")" == "${FTP_BASE}/${PKGPOOL}/${pkg}" ] \
+ [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}")" ] \
|| fail "${repo}/os/${arch}/${pkg} does not link to ${PKGPOOL}/${pkg}"
if ${REQUIRE_SIGNATURE}; then
@@ -190,13 +245,13 @@ checkPackageDB() {
[ -L "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig" ] || fail "${repo}/os/${arch}/${pkg}.sig is not a symlink"
[ -r "${STAGING}"/${repo}/${pkg}.sig ] && fail "${repo}/${pkg}.sig found in staging dir"
- [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig")" == "${FTP_BASE}/${PKGPOOL}/${pkg}.sig" ] \
+ [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}.sig")" ] \
|| fail "${repo}/os/${arch}/${pkg}.sig does not link to ${PKGPOOL}/${pkg}.sig"
fi
for db in ${DBEXT} ${FILESEXT}; do
( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
- && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep -q ${pkg}) \
+ && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep ${pkg} &>/dev/null) \
|| fail "${pkg} not in ${repo}/os/${arch}/${repo}${db%.tar.*}"
done
}
@@ -209,7 +264,7 @@ checkPackage() {
checkPackageDB $repo $pkg $arch
local pkgbase=$(getpkgbase "${FTP_BASE}/${PKGPOOL}/${pkg}")
- svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
+ arch_svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
[ -d "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-${arch}" ] \
|| fail "svn-packages-copy/${pkgbase}/repos/${repo}-${arch} does not exist"
}
@@ -222,7 +277,7 @@ checkRemovedPackageDB() {
for db in ${DBEXT} ${FILESEXT}; do
( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
- && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep -q ${pkgbase}) \
+ && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep ${pkgbase} &>/dev/null) \
&& fail "${pkgbase} should not be in ${repo}/os/${arch}/${repo}${db%.tar.*}"
done
}
@@ -234,7 +289,7 @@ checkRemovedPackage() {
checkRemovedPackageDB $repo $pkgbase $arch
- svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
+ arch_svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
[ -d "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-${arch}" ] \
&& fail "svn-packages-copy/${pkgbase}/repos/${repo}-${arch} should not exist"
}
@@ -246,9 +301,9 @@ checkRemovedAnyPackageDB() {
local db
for db in ${DBEXT} ${FILESEXT}; do
- for arch in i686 x86_64; do
+ for arch in $(arches); do
( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
- && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep -q ${pkgbase}) \
+ && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep ${pkgbase} &>/dev/null) \
&& fail "${pkgbase} should not be in ${repo}/os/${arch}/${repo}${db%.tar.*}"
done
done
@@ -260,7 +315,7 @@ checkRemovedAnyPackage() {
checkRemovedAnyPackageDB $repo $pkgbase
- svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
+ arch_svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
[ -d "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-any" ] \
&& fail "svn-packages-copy/${pkgbase}/repos/${repo}-any should not exist"
}
diff --git a/test/test.d/create-filelists.sh b/test/test.d/create-filelists.sh
index 49734c4..e78bde8 100755
--- a/test/test.d/create-filelists.sh
+++ b/test/test.d/create-filelists.sh
@@ -4,7 +4,7 @@ curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
testCreateSimpleFileLists() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-simple-epoch')
local pkgbase
local arch
@@ -18,7 +18,7 @@ testCreateSimpleFileLists() {
for pkgbase in ${pkgs[@]}; do
for arch in ${arches[@]}; do
- if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep -q "usr/bin/${pkgbase}"; then
+ if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/bin/${pkgbase}" &>/dev/null; then
fail "usr/bin/${pkgbase} not found in ${arch}/extra${FILESEXT}"
fi
done
@@ -26,7 +26,7 @@ testCreateSimpleFileLists() {
}
testCreateAnyFileLists() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-any-a' 'pkg-any-b')
local pkgbase
local arch
@@ -38,7 +38,7 @@ testCreateAnyFileLists() {
for pkgbase in ${pkgs[@]}; do
for arch in ${arches[@]}; do
- if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep -q "usr/share/${pkgbase}/test"; then
+ if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/share/${pkgbase}/test" &>/dev/null; then
fail "usr/share/${pkgbase}/test not found in ${arch}/extra${FILESEXT}"
fi
done
@@ -46,7 +46,7 @@ testCreateAnyFileLists() {
}
testCreateSplitFileLists() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-split-a' 'pkg-split-b')
local pkg
local pkgbase
@@ -65,7 +65,7 @@ testCreateSplitFileLists() {
pkgnames=($(source "${TMP}/svn-packages-copy/${pkgbase}/trunk/PKGBUILD"; echo ${pkgname[@]}))
for pkgname in ${pkgnames[@]}; do
for arch in ${arches[@]}; do
- if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep -q "usr/bin/${pkgname}"; then
+ if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/bin/${pkgname}" &>/dev/null; then
fail "usr/bin/${pkgname} not found in ${arch}/extra${FILESEXT}"
fi
done
@@ -75,7 +75,7 @@ testCreateSplitFileLists() {
testCleanupFileLists() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b')
local pkgbase
local arch
@@ -92,10 +92,10 @@ testCleanupFileLists() {
done
for arch in ${arches[@]}; do
- if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep -q "usr/bin/pkg-simple-b"; then
+ if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/bin/pkg-simple-b" &>/dev/null; then
fail "usr/bin/pkg-simple-b not found in ${arch}/extra${FILESEXT}"
fi
- if bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep -q "usr/bin/pkg-simple-a"; then
+ if bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/bin/pkg-simple-a" &>/dev/null; then
fail "usr/bin/pkg-simple-a still found in ${arch}/extra${FILESEXT}"
fi
done
diff --git a/test/test.d/db-move.sh b/test/test.d/db-move.sh
index 9d7c1f6..3cf355b 100755
--- a/test/test.d/db-move.sh
+++ b/test/test.d/db-move.sh
@@ -4,7 +4,7 @@ curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
testMoveSimplePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b')
local pkgbase
local arch
@@ -28,7 +28,7 @@ testMoveSimplePackages() {
}
testMoveMultiplePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b')
local pkgbase
local arch
@@ -52,7 +52,7 @@ testMoveMultiplePackages() {
}
testMoveEpochPackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-epoch')
local pkgbase
local arch
@@ -90,7 +90,7 @@ testMoveAnyPackages() {
}
testMoveSplitPackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-split-a' 'pkg-split-b')
local pkg
local pkgbase
@@ -107,12 +107,12 @@ testMoveSplitPackages() {
for arch in ${arches[@]}; do
for pkg in "${pkgdir}/pkg-split-a"/*-${arch}${PKGEXT}; do
- checkPackage extra $(basename ${pkg}) ${arch}
+ checkPackage extra ${pkg##*/} ${arch}
done
done
for arch in ${arches[@]}; do
for pkg in "${pkgdir}/pkg-split-b"/*-${arch}${PKGEXT}; do
- checkPackage testing $(basename ${pkg}) ${arch}
+ checkPackage testing ${pkg##*/} ${arch}
done
done
diff --git a/test/test.d/db-remove.sh b/test/test.d/db-remove.sh
index 416e693..d79605e 100755
--- a/test/test.d/db-remove.sh
+++ b/test/test.d/db-remove.sh
@@ -4,7 +4,7 @@ curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
testRemovePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-split-a' 'pkg-split-b' 'pkg-simple-epoch')
local pkgbase
local arch
@@ -31,7 +31,7 @@ testRemovePackages() {
}
testRemoveMultiplePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-split-a' 'pkg-split-b' 'pkg-simple-epoch')
local pkgbase
local arch
diff --git a/test/test.d/db-repo-add.sh b/test/test.d/db-repo-add.sh
index 8603104..09fc52f 100755
--- a/test/test.d/db-repo-add.sh
+++ b/test/test.d/db-repo-add.sh
@@ -4,7 +4,7 @@ curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
testAddSimplePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b')
local pkgbase
local arch
@@ -27,7 +27,7 @@ testAddSimplePackages() {
}
testAddMultiplePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b')
local pkgbase
local arch
diff --git a/test/test.d/db-repo-remove.sh b/test/test.d/db-repo-remove.sh
index 315d63d..eec0109 100755
--- a/test/test.d/db-repo-remove.sh
+++ b/test/test.d/db-repo-remove.sh
@@ -4,7 +4,7 @@ curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
testRemovePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-simple-epoch')
local pkgbase
local arch
@@ -31,7 +31,7 @@ testRemovePackages() {
}
testRemoveMultiplePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-simple-epoch')
local pkgbase
local arch
diff --git a/test/test.d/db-update.sh b/test/test.d/db-update.sh
index e38c328..7f1874b 100755
--- a/test/test.d/db-update.sh
+++ b/test/test.d/db-update.sh
@@ -4,7 +4,7 @@ curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
testAddSimplePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b')
local pkgbase
local arch
@@ -52,7 +52,7 @@ testAddAnyPackages() {
}
testAddSplitPackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-split-a' 'pkg-split-b')
local pkg
local pkgbase
@@ -69,7 +69,7 @@ testAddSplitPackages() {
for pkgbase in ${pkgs[@]}; do
for arch in ${arches[@]}; do
for pkg in "${pkgdir}/${pkgbase}"/*-${arch}${PKGEXT}; do
- checkPackage extra $(basename ${pkg}) ${arch}
+ checkPackage extra ${pkg##*/} ${arch}
done
done
done
@@ -81,8 +81,8 @@ testUpdateAnyPackage() {
pushd "${TMP}/svn-packages-copy/pkg-any-a/trunk/" >/dev/null
sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD
- svn commit -q -m"update pkg to pkgrel=2" >/dev/null
- sudo extra-i686-build >/dev/null 2>&1
+ arch_svn commit -q -m"update pkg to pkgrel=2" >/dev/null
+ sudo libremakepkg
mv pkg-any-a-1-2-any.pkg.tar.xz "${pkgdir}/pkg-any-a/"
popd >/dev/null
@@ -99,8 +99,8 @@ testUpdateAnyPackageToDifferentRepositoriesAtOnce() {
pushd "${TMP}/svn-packages-copy/pkg-any-a/trunk/" >/dev/null
sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD
- svn commit -q -m"update pkg to pkgrel=2" >/dev/null
- sudo extra-i686-build >/dev/null 2>&1
+ arch_svn commit -q -m"update pkg to pkgrel=2" >/dev/null
+ sudo libremakepkg
mv pkg-any-a-1-2-any.pkg.tar.xz "${pkgdir}/pkg-any-a/"
popd >/dev/null
@@ -132,16 +132,16 @@ testUpdateSameAnyPackageToDifferentRepositories() {
../db-update >/dev/null 2>&1 && (fail 'Adding an existing package to another repository should fail'; return 1)
local arch
- for arch in i686 x86_64; do
+ for arch in $(arches); do
( [ -r "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" ] \
- && bsdtar -xf "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" -O | grep -q ${pkgbase}) \
+ && bsdtar -xf "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" -O | grep ${pkgbase} &>/dev/null) \
&& fail "${pkgbase} should not be in testing/os/${arch}/testing${DBEXT%.tar.*}"
done
}
testAddIncompleteSplitPackage() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local repo='extra'
local pkgbase='pkg-split-a'
local arch
@@ -157,9 +157,19 @@ testAddIncompleteSplitPackage() {
for arch in ${arches[@]}; do
( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT%.tar.*}" ] \
- && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT%.tar.*}" -O | grep -q ${pkgbase}) \
+ && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT%.tar.*}" -O | grep ${pkgbase} &>/dev/null) \
&& fail "${pkgbase} should not be in ${repo}/os/${arch}/${repo}${DBEXT%.tar.*}"
done
}
+testUnknownRepo() {
+ mkdir "${STAGING}/unknown/"
+ releasePackage extra 'pkg-simple-a' 'i686'
+ releasePackage unknown 'pkg-simple-b' 'i686'
+ ../db-update
+ checkPackage extra 'pkg-simple-a-1-1-i686.pkg.tar.xz' 'i686'
+ [ -e "${FTP_BASE}/unknown" ] && fail "db-update pushed a package into an unknown repository"
+ rm -rf "${STAGING}/unknown/"
+}
+
. "${curdir}/../lib/shunit2"
diff --git a/test/test.d/ftpdir-cleanup.sh b/test/test.d/ftpdir-cleanup.sh
index 20026b4..630b88f 100755
--- a/test/test.d/ftpdir-cleanup.sh
+++ b/test/test.d/ftpdir-cleanup.sh
@@ -4,7 +4,7 @@ curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
testCleanupSimplePackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b')
local pkgbase
local arch
@@ -35,7 +35,7 @@ testCleanupSimplePackages() {
}
testCleanupEpochPackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-epoch')
local pkgbase
local arch
@@ -85,7 +85,7 @@ testCleanupAnyPackages() {
}
testCleanupSplitPackages() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-split-a' 'pkg-split-b')
local pkg
local pkgbase
@@ -113,7 +113,7 @@ testCleanupSplitPackages() {
done
for pkg in "${pkgdir}/${pkgs[1]}"/*-${arch}${PKGEXT}; do
- checkPackage extra $(basename ${pkg}) ${arch}
+ checkPackage extra ${pkg##*/} ${arch}
done
done
}
diff --git a/test/test.d/pool-transition.sh b/test/test.d/pool-transition.sh
deleted file mode 100755
index 5873f00..0000000
--- a/test/test.d/pool-transition.sh
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/bin/bash
-
-curdir=$(readlink -e $(dirname $0))
-. "${curdir}/../lib/common.inc"
-
-testMovePackagesWithoutPool() {
- local arches=('i686' 'x86_64')
- local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-split-a' 'pkg-split-b')
- local pkgbase
- local arch
- local pkg
- local old
-
- for pkgbase in ${pkgs[@]}; do
- for arch in ${arches[@]}; do
- releasePackage testing ${pkgbase} ${arch}
- done
- done
-
- ../db-update
-
- # transform two packages to old style layout
- for arch in ${arches[@]}; do
- for old in 0 2; do
- for pkg in "${pkgdir}/${pkgs[${old}]}"/*-${arch}${PKGEXT}; do
- pkg=$(basename $pkg)
- mv -f "${FTP_BASE}/${PKGPOOL}/${pkg}" "${FTP_BASE}/testing/os/${arch}/${pkg}"
- done
- done
- done
-
- ../cron-jobs/ftpdir-cleanup >/dev/null
-
- ../db-move testing extra ${pkgs[@]}
-
- ../cron-jobs/ftpdir-cleanup >/dev/null
-
- for pkgbase in ${pkgs[@]}; do
- for arch in ${arches[@]}; do
- for pkg in "${pkgdir}/${pkgbase}"/*-${arch}${PKGEXT}; do
- checkPackage extra $(basename ${pkg}) ${arch}
- done
- checkRemovedPackage testing ${pkgbase} ${arch}
- done
- done
-}
-
-testUpdateAnyPackageWithoutPool() {
- local pkgname='pkg-any-a'
- local pkg1='pkg-any-a-1-1-any.pkg.tar.xz'
- local pkg2='pkg-any-a-1-2-any.pkg.tar.xz'
- local arch
-
-
- releasePackage extra pkg-any-a any
- ../db-update
- # transform two packages to old style layout
- mv -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" "${FTP_BASE}/extra/os/any"
- for arch in i686 x86_64; do
- ln -sf "../any/${pkg1}" "${FTP_BASE}/extra/os/${arch}"
- done
-
- pushd "${TMP}/svn-packages-copy/${pkgname}/trunk/" >/dev/null
- sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD
- svn commit -q -m"update pkg to pkgrel=2" >/dev/null
- sudo extra-i686-build >/dev/null 2>&1
- mv "${pkg2}" "${pkgdir}/${pkgname}/"
- popd >/dev/null
-
- releasePackage extra ${pkgname} any
- ../db-update
- rm -f "${pkgdir}/${pkgname}/${pkg2}"
-
- ../cron-jobs/ftpdir-cleanup >/dev/null
-
- checkAnyPackage extra "${pkg2}"
-
- [ -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" ] && fail "${PKGPOOL}/${pkg1} found"
- for arch in any i686 x86_64; do
- [ -f "${FTP_BASE}/extra/os/${arch}/${pkg1}" ] && fail "extra/os/${arch}/${pkg1} found"
- done
-}
-
-testMoveAnyPackagesWithoutPool() {
- local pkgs=('pkg-any-a' 'pkg-any-b')
- local pkgbase
- local arch
- local pkg
-
- for pkgbase in ${pkgs[@]}; do
- releasePackage testing ${pkgbase} any
- done
-
- ../db-update
-
- # transform a package to old style layout
- for pkg in "${pkgdir}/${pkgs[0]}"/*-any${PKGEXT}; do
- pkg=$(basename $pkg)
- mv -f "${FTP_BASE}/${PKGPOOL}/${pkg}" "${FTP_BASE}/testing/os/any/${pkg}"
- for arch in i686 x86_64; do
- ln -sf "../any/${pkg}" "${FTP_BASE}/testing/os/${arch}/${pkg}"
- done
- done
-
- ../cron-jobs/ftpdir-cleanup >/dev/null
-
- ../db-move testing extra ${pkgs[@]}
-
- ../cron-jobs/ftpdir-cleanup >/dev/null
-
- for pkgbase in ${pkgs[@]}; do
- for pkg in "${pkgdir}/${pkgbase}"/*-any${PKGEXT}; do
- checkAnyPackage extra $(basename ${pkg})
- done
- checkRemovedAnyPackage testing ${pkgbase}
- done
-
- for pkg in "${pkgdir}/${pkgs[0]}"/*-any${PKGEXT}; do
- pkg=$(basename $pkg)
- for arch in any i686 x86_64; do
- [ -f "${FTP_BASE}/testing/os/${arch}/${pkg}" ] && fail "testing/os/${arch}/${pkg} found"
- done
- done
-}
-
-testUpdateSameAnyPackageToDifferentRepositoriesWithoutPool() {
- local pkg
- local arch
-
- releasePackage extra pkg-any-a any
- ../db-update
-
- # transform a package to old style layout
- for pkg in "${pkgdir}/pkg-any-a"/*-any${PKGEXT}; do
- pkg=$(basename $pkg)
- mv -f "${FTP_BASE}/${PKGPOOL}/${pkg}" "${FTP_BASE}/extra/os/any/${pkg}"
- for arch in i686 x86_64; do
- ln -sf "../any/${pkg}" "${FTP_BASE}/extra/os/${arch}/${pkg}"
- done
- done
-
- releasePackage testing pkg-any-a any
- ../db-update >/dev/null 2>&1 && (fail 'Adding an existing package to another repository should fail'; return 1)
-
- for arch in i686 x86_64; do
- ( [ -r "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" ] \
- && bsdtar -xf "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" -O | grep -q pkg-any-a) \
- && fail "pkg-any-a should not be in testing/os/${arch}/testing${DBEXT%.tar.*}"
- done
-}
-
-. "${curdir}/../lib/shunit2"
diff --git a/test/test.d/signed-packages.sh b/test/test.d/signed-packages.sh
index 5d6f4ff..03566ef 100755
--- a/test/test.d/signed-packages.sh
+++ b/test/test.d/signed-packages.sh
@@ -3,11 +3,34 @@
curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
+testAddSignedPackage() {
+ releasePackage extra 'pkg-simple-a' 'i686'
+ ../db-update || fail "db-update failed!"
+}
+
testAddUnsignedPackage() {
releasePackage extra 'pkg-simple-a' 'i686'
- # remove any signature
rm "${STAGING}"/extra/*.sig
../db-update >/dev/null 2>&1 && fail "db-update should fail when a signature is missing!"
}
+testAddInvalidSignedPackage() {
+ local p
+ releasePackage extra 'pkg-simple-a' 'i686'
+ for p in "${STAGING}"/extra/*${PKGEXT}; do
+ unxz $p
+ xz -0 ${p%%.xz}
+ done
+ ../db-update >/dev/null 2>&1 && fail "db-update should fail when a signature is invalid!"
+}
+
+testAddBrokenSignature() {
+ local s
+ releasePackage extra 'pkg-simple-a' 'i686'
+ for s in "${STAGING}"/extra/*.sig; do
+ echo 0 > $s
+ done
+ ../db-update >/dev/null 2>&1 && fail "db-update should fail when a signature is broken!"
+}
+
. "${curdir}/../lib/shunit2"
diff --git a/test/test.d/sourceballs.sh b/test/test.d/sourceballs.sh
index fdcf08c..472cb30 100755
--- a/test/test.d/sourceballs.sh
+++ b/test/test.d/sourceballs.sh
@@ -4,7 +4,7 @@ curdir=$(readlink -e $(dirname $0))
. "${curdir}/../lib/common.inc"
testSourceballs() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-simple-epoch')
local pkgbase
local arch
@@ -38,7 +38,7 @@ testAnySourceballs() {
}
testSplitSourceballs() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-split-a' 'pkg-split-b')
local pkg
local pkgbase
@@ -59,7 +59,7 @@ testSplitSourceballs() {
}
testSourceballsCleanup() {
- local arches=('i686' 'x86_64')
+ local arches=(`arches`)
local pkgs=('pkg-simple-a' 'pkg-simple-b')
local pkgbase
local arch
diff --git a/test/test.d/testing2x.sh b/test/test.d/testing2x.sh
index eda6cd6..0c2fa83 100755
--- a/test/test.d/testing2x.sh
+++ b/test/test.d/testing2x.sh
@@ -9,8 +9,8 @@ testTesting2xAnyPackage() {
pushd "${TMP}/svn-packages-copy/pkg-any-a/trunk/" >/dev/null
sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD
- svn commit -q -m"update pkg to pkgrel=2" >/dev/null
- sudo extra-i686-build >/dev/null 2>&1
+ arch_svn commit -q -m"update pkg to pkgrel=2" >/dev/null
+ sudo libremakepkg
mv pkg-any-a-1-2-any.pkg.tar.xz "${pkgdir}/pkg-any-a/"
popd >/dev/null
diff --git a/testing2x b/testing2x
index 54cae11..6646179 100755
--- a/testing2x
+++ b/testing2x
@@ -1,16 +1,16 @@
#!/bin/bash
-. "$(dirname $0)/db-functions"
-. "$(dirname $0)/config"
+. "$(dirname "$(readlink -e "$0")")/config"
+. "$(dirname "$(readlink -e "$0")")/db-functions"
if [ $# -lt 1 ]; then
- msg "usage: $(basename $0) <pkgname|pkgbase> ..."
+ msg "usage: ${0##*/} <pkgname|pkgbase> ..."
exit 1
fi
-# Lock everything to reduce possibility of interfering task between the different repo-updates
+# Lock everything to reduce possibility of interfering task between the different repo-updates
script_lock
-for repo in 'core' 'extra' 'testing'; do
+for repo in ${TESTING_REPO} ${STABLE_REPOS[@]}; do
for pkgarch in ${ARCHES[@]}; do
repo_lock ${repo} ${pkgarch} || exit 1
done
@@ -20,41 +20,39 @@ declare -A pkgs
for pkgbase in $*; do
if [ ! -d "${WORKDIR}/${pkgbase}" ]; then
- /usr/bin/svn export -q "${SVNREPO}/${pkgbase}/repos" "${WORKDIR}/${pkgbase}" >/dev/null
-
found_source=false
for pkgarch in ${ARCHES[@]} 'any'; do
- svnrepo_from="${WORKDIR}/${pkgbase}/testing-${pkgarch}"
- if [ -r "${svnrepo_from}/PKGBUILD" ]; then
+ xbsrepo_from="$(xbs releasepath ${pkgbase} ${TESTING_REPO} ${pkgarch})"
+ if [ -r "${xbsrepo_from}/PKGBUILD" ]; then
found_source=true
break
fi
done
- ${found_source} || die "${pkgbase} not found in [testing]"
+ ${found_source} || die "${pkgbase} not found in [${TESTING_REPO}]"
found_target=false
for pkgarch in ${ARCHES[@]} 'any'; do
- for repo in 'core' 'extra'; do
- svnrepo_to="${WORKDIR}/${pkgbase}/${repo}-${pkgarch}"
- if [ -r "${svnrepo_to}/PKGBUILD" ]; then
+ for repo in ${STABLE_REPOS[@]}; do
+ xbsrepo_to="$(xbs releasepath ${pkgbase} ${repo} ${pkgarch})"
+ if [ -r "${xbsrepo_to}/PKGBUILD" ]; then
found_target=true
pkgs[${repo}]+="${pkgbase} "
break 2
fi
done
done
- ${found_target} || die "${pkgbase} neither found in [core] nor [extra]"
+ ${found_target} || die "${pkgbase} not found in any of these repos: ${STABLE_REPOS[@]}"
fi
done
for pkgarch in ${ARCHES[@]}; do
- repo_unlock 'testing' ${pkgarch}
+ repo_unlock ${TESTING_REPO} ${pkgarch}
done
-for repo in 'core' 'extra'; do
+for repo in ${STABLE_REPOS[@]}; do
for pkgarch in ${ARCHES[@]}; do
repo_unlock ${repo} ${pkgarch}
done
if [ -n "${pkgs[${repo}]}" ]; then
- "$(dirname $0)/db-move" 'testing' "${repo}" ${pkgs[${repo}]}
+ "$(dirname "$(readlink -e "$0")")/db-move" ${TESTING_REPO} "${repo}" ${pkgs[${repo}]}
fi
done
diff --git a/yf-update b/yf-update
index 9c2131e..ee5d3eb 100755
--- a/yf-update
+++ b/yf-update
@@ -1,17 +1,17 @@
#!/bin/bash
-source $(dirname $0)/local_config
-source $(dirname $0)/config
-source $(dirname $0)/libremessages
+source "$(dirname "$(readlink -e "$0")")/local_config"
+source "$(dirname "$(readlink -e "$0")")/config"
+source "$(dirname "$(readlink -e "$0")")/libremessages"
blacklist_mtime=$(printf "%.0f" $(find ${blacklist} -printf "%T@"))
-last_bl_mtime=$(cat $(dirname $0)/yftime)
+last_bl_mtime=$(< "$(dirname "$(readlink -e "$0")")/yftime")
if [ $blacklist_mtime -gt $last_bl_mtime ]; then
- pushd $(dirname $0)/yf
+ pushd "$(dirname "$(readlink -e "$0")")/yf"
makepkg -f
find . -name "*${PKGEXT}" -exec mv {} ${STAGING}/libre \;
popd
- echo ${blacklist_mtime} > $(dirname $0)/yftime
+ echo ${blacklist_mtime} > "$(dirname "$(readlink -e "$0")")/yftime"
msg2 "built and staged"
else
msg2 "nothing to do"