diff options
Diffstat (limited to 'package.inc.sh')
-rw-r--r-- | package.inc.sh | 142 |
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() { |