#!/usr/bin/env bash ## ## Package update helper script which sets new SHA-256 for source bundle. ## ## Licensed under the Apache License, Version 2.0 (the "License"); ## you may not use this file except in compliance with the License. ## You may obtain a copy of the License at ## ## http://www.apache.org/licenses/LICENSE-2.0 ## ## Unless required by applicable law or agreed to in writing, software ## distributed under the License is distributed on an "AS IS" BASIS, ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ## See the License for the specific language governing permissions and ## limitations under the License. ## set -e if [ "${#}" = "0" ]; then echo echo "Usage: update-sha256 [package name] ..." echo echo "Update TERMUX_PKG_SHA256 of package and optionally commit changes." echo exit 1 fi REPO_ROOT=$(realpath "$(dirname "$0")/../../") IS_GIT_REPOSITORY=false if git status >/dev/null 2>&1; then IS_GIT_REPOSITORY=true fi for package in "${@}"; do buildsh_path= repo= if [ -d "${package}" ] && [ -f "${package}/build.sh" ]; then buildsh_path="${package}/build.sh" package=$(basename ${package}) else for repo_path in $(jq --raw-output 'keys | .[]' $REPO_ROOT/repo.json); do if [ -d "${repo_path}/${package}" ] && [ -f "${repo_path}/${package}/build.sh" ]; then repo=$(jq --raw-output '.["'$repo_path'"].name' $REPO_ROOT/repo.json) repo=${repo#"termux-"} buildsh_path="${repo_path}/${package}/build.sh" package=$(basename ${package}) fi done fi if [ ! -f "${buildsh_path}" ]; then echo "${package}: skipping as no build.sh found" continue fi # Calculate new checksum in subshell. echo new_checksum=$( source "${buildsh_path}" 2>/dev/null dl_tmpdir=$(mktemp -d "${TMPDIR-/tmp}/termux.src.dl.XXXXXXXX") if [ -n "${dl_tmpdir}" ] && [ -d "${dl_tmpdir}" ]; then if ! curl --fail --location --retry 3 --output "${dl_tmpdir}/source-bundle" \ "${TERMUX_PKG_SRCURL[0]}"; then rm -rf "${dl_tmpdir}" fi if [ -f "${dl_tmpdir}/source-bundle" ]; then sha256sum "${dl_tmpdir}/source-bundle" | awk '{ print $1 }' fi rm -rf "${dl_tmpdir}" fi ) if [ -n "${new_checksum}" ]; then # Replace old SHA-256. # Note that this will not work properly if SHA-256 is an array. sed -i "s/^\(TERMUX_PKG_SHA256=\)\(.*\)\$/\1${new_checksum}/g" "${buildsh_path}" # Delete revision as it shouldn't be present if package was updated. sed -i "/TERMUX_PKG_REVISION=/d" "${buildsh_path}" # If we are on Git repository, prompt for committing changes. if ${IS_GIT_REPOSITORY}; then echo echo "You are about to commit these changes:" echo echo "--------------------" git --no-pager diff --patch "${buildsh_path}" echo "--------------------" echo echo "upgpkg(${repo}/${package}): $(. "${buildsh_path}"; echo "${TERMUX_PKG_VERSION}" | cut -d: -f2-)" echo read -re -p "Do you want to commit changes ? (y/n) " CHOICE echo if [[ ${CHOICE} =~ (Y|y) ]]; then git add "${buildsh_path}" git commit -m "upgpkg(${repo}/${package}): $(. "${buildsh_path}"; echo "${TERMUX_PKG_VERSION}" | cut -d: -f2-)" else echo "Not committing to Git!" fi echo fi else echo echo "${package}: failed to calculate the new checksum" exit 1 fi done