Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/package.inc.sh
diff options
context:
space:
mode:
Diffstat (limited to 'package.inc.sh')
-rw-r--r--package.inc.sh142
1 files changed, 109 insertions, 33 deletions
diff --git a/package.inc.sh b/package.inc.sh
index 360e41f..8f5032d 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() {
@@ -99,11 +122,17 @@ package_show_file() {
fi
fi
+ if ! (( OPT_UPSTREAM )); then
+ local trepo
+ read -r trepo _ < <(package_get_repos_with_arch "$pkgname" packages32)
+ [[ $trepo ]] && git show "remotes/packages32/master:$trepo/$pkgname/$file" 2>/dev/null \
+ && return
+ fi
git show "remotes/$remote/packages/$pkgname:$subtree$file"
}
package_list_files() {
- local remote subtree=trunk
+ local remote subtree=trunk trepo list_ups list_dwn
pkgname=$1
if [[ $pkgname = */* ]]; then
@@ -116,9 +145,36 @@ package_list_files() {
subtree=repos/$repo-$OPT_ARCH
fi
+ list_ups=$(git ls-tree -r --name-only "remotes/$remote/packages/$pkgname" "$subtree" \
+ 2>/dev/null | awk -v "prefix=$subtree/" 'sub(prefix, "")')
- git ls-tree -r --name-only "remotes/$remote/packages/$pkgname" "$subtree" |
- awk -v "prefix=$subtree/" 'sub(prefix, "")'
+ if ! (( OPT_UPSTREAM )); then
+ read -r trepo _ < <(package_get_repos_with_arch "$pkgname" packages32)
+ if [[ $trepo ]]; then
+ list_dwn=$(git ls-tree -r --name-only "remotes/packages32/master" "$trepo/$pkgname" |
+ awk -v "prefix=$trepo/$pkgname/" 'sub(prefix, "")')
+ [[ $list_ups ]] && printf -v list_ups "%s\n%s" "$list_ups" "$list_dwn" \
+ || printf -v list_ups "%s" "$list_dwn"
+ fi
+ fi
+ echo "$list_ups" | sort -u
+}
+
+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 pentium4 ")}; {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() {
@@ -135,24 +191,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/"
+ if ! (( OPT_UPSTREAM )); then
+ package_patch_arch32 .
+ fi
}
package_checkout() {
@@ -161,27 +223,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() {