summaryrefslogtreecommitdiff
path: root/package.inc.sh
diff options
context:
space:
mode:
Diffstat (limited to 'package.inc.sh')
-rw-r--r--package.inc.sh126
1 files changed, 90 insertions, 36 deletions
diff --git a/package.inc.sh b/package.inc.sh
index da6a253..dcdc331 100644
--- a/package.inc.sh
+++ b/package.inc.sh
@@ -31,8 +31,16 @@ package_init() {
(( do_update )) || return 0
- remote_is_tracking "${!2}" "$pkgname" ||
- remote_update_refs "${!2}" "packages/$pkgname"
+ if ! [[ ${!2} = packages32 ]]; then
+ remote_is_tracking "${!2}" "$pkgname" ||
+ remote_update_refs "${!2}" "packages/$pkgname"
+ fi
+
+ #fetch packages32/master
+ #test if master exists, if not, then fetch(very slow first time)
+ if ! (( OPT_UPSTREAM )); then
+ git show-ref -q packages32/master || quiet_git fetch packages32 master
+ fi
}
package_find_remote() {
@@ -54,6 +62,15 @@ package_find_remote() {
fi
done
+ # arch32-only packages
+ if ! (( OPT_UPSTREAM )); then
+ printf -v "$2" %s "$(git ls-tree -r --name-only packages32/master \
+ | awk -F/ -v pkg="${pkgname}" ' $0 ~ "/"pkg"/PKGBUILD" {print "packages32";exit}')"
+ if [[ ${!2} ]]; then
+ return 0
+ fi
+ fi
+
return 1
}
@@ -78,7 +95,13 @@ package_log() {
;;
esac
- git log "${logargs[@]}" "$remote/packages/$pkgname" -- trunk/
+ if ! (( OPT_UPSTREAM )); then
+ repo=$(package_get_repos_with_arch "$pkgname" packages32|awk '{print $1}')
+ [[ $repo ]] && git log "${logargs[@]}" "packages32/master" -- "$repo/$pkgname" \
+ || log_info 'There is no Arch32 patch for %s' "$pkgname"
+ else
+ git log "${logargs[@]}" "$remote/packages/$pkgname" -- trunk/
+ fi
}
package_show_file() {
@@ -121,6 +144,23 @@ package_list_files() {
awk -v "prefix=$subtree/" 'sub(prefix, "")'
}
+package_patch_arch32() {
+ local arch repo subtree
+ read -r repo arch < <(package_get_repos_with_arch "$pkgname" "$remote" \
+ | awk '!/testing/ && (/x86_64/ || /arch32/ || /any/) {print $1" "$2; exit}')
+ subtree=${1:-repos/${repo}-${arch}}
+ mkdir -p ${pkgname}/${subtree} && touch ${pkgname}/${subtree}/PKGBUILD
+ awk -i inplace '!/^arch=[^#]*any/ {gsub(/^arch=\(/,"arch=(i486 i686 pentium3 ")}; {print}' \
+ "$pkgname/${subtree}/PKGBUILD"
+ for line in $(git ls-tree -r --name-only remotes/packages32/master ${repo}/${pkgname}); do
+ if [[ "${line##*/}" = "PKGBUILD" ]]; then
+ git show remotes/packages32/master:${line} >> ${pkgname}/${subtree}/PKGBUILD
+ else
+ git show remotes/packages32/master:${line} > ${pkgname}/${subtree}/${line##*/}
+ fi
+ done
+}
+
package_export() {
local remote repo arch path subtree=trunk
pkgname=$1
@@ -135,30 +175,30 @@ package_export() {
subtree=repos/$repo-$OPT_ARCH
fi
- if ! git show "remotes/$remote/packages/$pkgname:$subtree/" &>/dev/null; then
- if [[ $repo ]]; then
- log_error "package '%s' not found in repo '%s-%s'" "$pkgname" "$repo" "$OPT_ARCH"
- return 1
- else
- log_error "package '%s' has no trunk directory!" "$pkgname"
- return 1
+ if ! [[ $remote = packages32 ]]; then
+ if ! git show "remotes/$remote/packages/$pkgname:$subtree/" &>/dev/null; then
+ if [[ $repo ]]; then
+ log_error "package '%s' not found in repo '%s-%s'" "$pkgname" "$repo" "$OPT_ARCH"
+ return 1
+ else
+ log_error "package '%s' has no trunk directory!" "$pkgname"
+ return 1
+ fi
+ fi
+
+ if (( ! OPT_FORCE )); then
+ # shellcheck disable=SC2154
+ mkdir "$pkgname" || return
fi
- fi
- if (( ! OPT_FORCE )); then
- # shellcheck disable=SC2154
- mkdir "$pkgname" || return
+ log_info 'exporting %s:%s' "$pkgname" "$subtree"
+ git archive --format=tar "remotes/$remote/packages/$pkgname" "$subtree/" |
+ tar --transform "s,^$subtree,$pkgname," -xf - "$subtree/"
fi
- log_info 'exporting %s:%s' "$pkgname" "$subtree"
- git archive --format=tar "remotes/$remote/packages/$pkgname" "$subtree/" |
- tar --transform "s,^$subtree,$pkgname," -xf - "$subtree/"
- # borrowed from archlinux32/builder/lib/common-functions' mangle_pkgbuild()
- sed -i '
- /^arch=[^#]*any/!{
- /^arch=(/s/(/(i486 i686 pentium3 /
- }
- ' "$pkgname/PKGBUILD"
+ if ! (( OPT_UPSTREAM )); then
+ package_patch_arch32 .
+ fi
}
package_checkout() {
@@ -167,27 +207,41 @@ package_checkout() {
package_init "$pkgname" remote || return
- git show-ref -q "refs/heads/$remote/packages/$pkgname" ||
- git branch -qf --no-track {,}"$remote/packages/$pkgname"
+ if ! [[ $remote = packages32 ]]; then
+ git show-ref -q "refs/heads/$remote/packages/$pkgname" ||
+ git branch -qf --no-track {,}"$remote/packages/$pkgname"
+
+ quiet_git clone \
+ --shared \
+ --single-branch \
+ --branch "$remote/packages/$pkgname" \
+ --config "pull.rebase=true" \
+ "$ASPROOT" "$pkgname" || return
+ fi
- quiet_git clone \
- --shared \
- --single-branch \
- --branch "$remote/packages/$pkgname" \
- --config "pull.rebase=true" \
- "$ASPROOT" "$pkgname" || return
+ if ! (( OPT_UPSTREAM )); then
+ package_patch_arch32
+ fi
}
package_get_repos_with_arch() {
local remote=$2 path arch repo
pkgname=$1
- while read -r path; do
- path=${path##*/}
- repo=${path%-*}
- arch=${path##*-}
+ if [[ $remote == packages32 ]]; then
+ repo="$(git ls-tree -r --name-only packages32/master \
+ | awk -F/ -v pkg="${pkgname}" ' $0 ~ "/"pkg"/PKGBUILD" {print $1;exit}')"
+ [[ $repo ]] && arch=arch32
printf '%s %s\n' "$repo" "$arch"
- done < <(git ls-tree --name-only "remotes/$remote/packages/$pkgname" repos/)
+ else
+ while read -r path; do
+ path=${path##*/}
+ repo=${path%-*}
+ arch=${path##*-}
+ printf '%s %s\n' "$repo" "$arch"
+ done < <(git ls-tree --name-only "remotes/$remote/packages/$pkgname" repos/)
+ fi
+
}
package_get_arches() {