summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@parabola.nu>2018-06-17 13:22:45 -0400
committerLuke Shumaker <lukeshu@parabola.nu>2018-06-22 11:37:26 -0400
commit2fdf0f2a61615c14597e24d89263b7897c599610 (patch)
tree64c36bcf7ab6a10b6f23c66043a9150c440f753c
parentb954d619658ba55385d75b4c5d543de6db6904a7 (diff)
db-move, db-abs: Simplify calling the abs_move_* functionslukeshu/to-upstream/2018-06-22-dont-parse-pkgbuild-v2
Currently, abs_move_preflight_check and abs_move_arch require the exact pkgarch (i.e. "any" or "x86_64"). Modify them so that they take the tarch (i.e. "x86_64") and figure out themselves if it needs to set pkgarch=$tarch or pkgarch=any. abs_export could probably stand to be modified to do something similar, but it's more work to adjust its callers. "Ignore space change" might be useful when viewing this diff.
-rw-r--r--db-abs56
-rwxr-xr-xdb-move15
2 files changed, 39 insertions, 32 deletions
diff --git a/db-abs b/db-abs
index 5a34b84..c510bad 100644
--- a/db-abs
+++ b/db-abs
@@ -20,12 +20,12 @@ _abs_checkout() {
abs_move_preflight_check() {
local repo_from=$1
- local pkgarch=$2
+ local tarch=$2
local pkgbase=$3
_abs_checkout "$pkgbase"
- local svnrepo_from="${WORKDIR}/svn/${pkgbase}/repos/${repo_from}-${pkgarch}"
- [[ -r ${svnrepo_from}/PKGBUILD ]]
+ local reposdir="${WORKDIR}/svn/${pkgbase}/repos"
+ [[ -r ${reposdir}/${repo_from}-${tarch}/PKGBUILD || -r ${reposdir}/${repo_from}-any/PKGBUILD ]]
}
abs_move_start() {
@@ -37,37 +37,45 @@ abs_move_start() {
}
# If the "from" PKGBUILD doesn't exist, this is a no-op (not an
-# error), so that it can be run for each arch, and the invoker doesn't
-# need to worry about hoisting it out of the loop if arch=(any). If
-# the nonexistence is such that it should be an error, we count on
-# abs_move_preflight_check having already caught that.
+# error). This is because we expect to be called exactly once for
+# each tarch (eg: x86_64, i686), but if arch=(any) then we only need
+# do the work once; on the subsequent calls the "from" PKGBUILD won't
+# exist anymore. If the source PKGBUILD never existed, we expect that
+# to have already been caught by abs_move_preflight_check.
abs_move_arch() {
- local pkgarch=$1
+ local tarch=$1
local repo_from=$abs_move_repo_from
local repo_to=$abs_move_repo_to
local pkgbase=$abs_move_pkgbase
+ local pkgarch
+ if [[ -r "${WORKDIR}/svn/${pkgbase}/repos/${repo_from}-${tarch}/PKGBUILD" ]]; then
+ pkgarch=$tarch
+ elif [[ -r "${WORKDIR}/svn/${pkgbase}/repos/${repo_from}-any/PKGBUILD" ]]; then
+ pkgarch=any
+ else
+ return 0
+ fi
+
local svnrepo_from="${WORKDIR}/svn/${pkgbase}/repos/${repo_from}-${pkgarch}"
local svnrepo_to="${WORKDIR}/svn/${pkgbase}/repos/${repo_to}-${pkgarch}"
- if [[ -f ${svnrepo_from}/PKGBUILD ]]; then
- msg2 "%s (%s)" "$pkgbase" "$pkgarch"
-
- if [[ -d ${svnrepo_to} ]]; then
- for file in $(arch_svn ls "${svnrepo_to}"); do
- arch_svn rm -q "${svnrepo_to}/$file@"
- done
- else
- mkdir "${svnrepo_to}"
- arch_svn add -q "${svnrepo_to}"
- fi
-
- for file in $(arch_svn ls "${svnrepo_from}"); do
- arch_svn mv -q -r HEAD "${svnrepo_from}/$file@" "${svnrepo_to}/"
+ msg2 "%s (%s)" "$pkgbase" "$pkgarch"
+
+ if [[ -d ${svnrepo_to} ]]; then
+ for file in $(arch_svn ls "${svnrepo_to}"); do
+ arch_svn rm -q "${svnrepo_to}/$file@"
done
- arch_svn rm --force -q "${svnrepo_from}"
- abs_move_tag_list+=", $pkgarch"
+ else
+ mkdir "${svnrepo_to}"
+ arch_svn add -q "${svnrepo_to}"
fi
+
+ for file in $(arch_svn ls "${svnrepo_from}"); do
+ arch_svn mv -q -r HEAD "${svnrepo_from}/$file@" "${svnrepo_to}/"
+ done
+ arch_svn rm --force -q "${svnrepo_from}"
+ abs_move_tag_list+=", $pkgarch"
}
abs_move_finish() {
diff --git a/db-move b/db-move
index 94e6352..40af7c5 100755
--- a/db-move
+++ b/db-move
@@ -28,10 +28,10 @@ done
for pkgbase in "${args[@]:2}"; do
found=false
for tarch in "${ARCHES[@]}"; do
- while read -r pkgarch pkgfile; do
+ while read -r pkgfile; do
- if ! abs_move_preflight_check "$repo_from" "$pkgarch" "$pkgbase"; then
- die "%s not found in %s-%s" "$pkgbase" "$repo_from" "$pkgarch"
+ if ! abs_move_preflight_check "$repo_from" "$tarch" "$pkgbase"; then
+ die "%s not found in %s-%s" "$pkgbase" "$repo_from" "$tarch"
fi
# getpkgfile will `exit` for us if it fails;
@@ -39,7 +39,7 @@ for pkgbase in "${args[@]:2}"; do
getpkgfile "${ftppath_from}/${tarch}/${pkgfile}" >/dev/null
found=true
- done < <(getdbinfo "$repo_from" "$tarch" "$pkgbase" ARCH,FILENAME)
+ done < <(getdbinfo "$repo_from" "$tarch" "$pkgbase" FILENAME)
done
[[ $found = true ]] || die "%s not found in %s" "$pkgbase" "$repo_from"
done
@@ -51,16 +51,15 @@ declare -A remove_pkgs
for pkgbase in "${args[@]:2}"; do
abs_move_start "$repo_from" "$repo_to" "$pkgbase"
for tarch in "${ARCHES[@]}"; do
- while read -r pkgname pkgver pkgarch pkgfile; do
- abs_move_arch "$pkgarch"
-
+ abs_move_arch "$tarch"
+ while read -r pkgname pkgver pkgfile; do
ln -s "../../../${PKGPOOL}/${pkgfile}" "${ftppath_to}/${tarch}/"
if [[ -f ${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig ]]; then
ln -s "../../../${PKGPOOL}/${pkgfile}.sig" "${ftppath_to}/${tarch}/"
fi
add_pkgs[${tarch}]+="${FTP_BASE}/${PKGPOOL}/${pkgfile} "
remove_pkgs[${tarch}]+="${pkgname} "
- done < <(getdbinfo "$repo_from" "$tarch" "$pkgbase" NAME,VERSION,ARCH,FILENAME)
+ done < <(getdbinfo "$repo_from" "$tarch" "$pkgbase" NAME,VERSION,FILENAME)
done
abs_move_finish
done