From 8e921e37a99cc7e9f40e7e9e76847d72f55cb0b1 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Thu, 28 Feb 2019 21:17:35 +0100 Subject: [PATCH] factor out common binary/retroplayer addon update functions Signed-off-by: Matthias Reichl --- tools/mkpkg/update_binary-addons | 153 +++------------------ tools/mkpkg/update_common_functions | 188 ++++++++++++++++++++++++++ tools/mkpkg/update_retroplayer-addons | 88 +----------- 3 files changed, 207 insertions(+), 222 deletions(-) create mode 100644 tools/mkpkg/update_common_functions diff --git a/tools/mkpkg/update_binary-addons b/tools/mkpkg/update_binary-addons index bd47f38d33..de4926c0d8 100755 --- a/tools/mkpkg/update_binary-addons +++ b/tools/mkpkg/update_binary-addons @@ -13,141 +13,19 @@ fi # KEEP_GIT_DIRS: don't delete cloned git directories after update check # BUMP_PKG_REV: bump PKG_REV if PKG_VERSION has changed -ROOT=$(cd $(dirname $0)/../.. && pwd) +MY_DIR="$(dirname "$0")" +ROOT="$(cd "${MY_DIR}"/../.. && pwd)" +TMPDIR="$(pwd)/.update-binary-addons-tmp" +TMP_PKG_FILE="${TMPDIR}/package.tar.gz" +TMP_PKG_DIR="${TMPDIR}/package" + +rm -rf "${TMPDIR}" +mkdir -p "${TMPDIR}" KODI_BRANCH="$1" KODI_DIR="kodi-${KODI_BRANCH}.git" -git_clone() { - # git_clone https://repo.url branch ./target_dir [githash] - echo "[mkpkg] Checking out $1 ..." - if [ ! -d "$3" ]; then - git clone "$1" "$3" - # Try to switch to specified branch if it exist, if not then use default branch - if [ -n "$2" ]; then - cd "$3" - git checkout $2 >/dev/null 2>/dev/null - cd .. - fi - else - if [ -d "$3" ] ; then - cd "$3" - git checkout $2 >/dev/null 2>/dev/null - git pull - cd .. - fi - fi - - if [ ! -z "$4" ] ; then - cd "$3" - git fetch >/dev/null 2>/dev/null - git branch -D $4 >/dev/null 2>/dev/null - git checkout $4 >/dev/null 2>/dev/null - git checkout -b ref-$4 >/dev/null 2>/dev/null - cd .. - fi -} - -resolve_hash() { - if [ -d "$1" ] ; then - cd "$1" - git rev-parse $2 2>/dev/null - fi -} - -resolve_tag() { - if [ -d "$1" ] ; then - cd "$1" - git describe --abbrev=0 --tags $2 2>/dev/null - fi -} - -# Get url in git:// notation for a package.mk, assuming it is a github.com url -# Return 1 if not a github domain -geturl() { - local addon="$1" - local domain owner repo PKG_URL - - PKG_URL="$(get_pkg_var ${addon} PKG_URL)" - - domain="$(echo "${PKG_URL}" | cut -d/ -f3)" - [ "${domain}" = "github.com" ] || return 1 - - owner="$(echo "${PKG_URL}" | cut -d/ -f4)" - repo="$(echo "${PKG_URL}" | cut -d/ -f5)" - - echo "git://${domain}/${owner}/${repo}.git" - return 0 -} - -# For the specified addon, verify that the package url -# matches the url retrieved from Kodi -validate_pkg_url() { - local addon="$1" url1="$2" - local domain owner repo url2 - - domain="$(echo "${url1}" | cut -d/ -f3)" - owner="$(echo "${url1}" | cut -d/ -f4)" - repo="$(echo "${url1}" | cut -d/ -f5)" - - url1="git://${domain}/${owner}/${repo}.git" - url2="$(geturl "${addon}")" - - [ "${url1}" = "${url2}" ] && return 0 || return 1 -} - -get_pkg_var() { - local pkg_name="$1" pkg_var="$2" - cd "${ROOT}" - PROJECT=Generic ARCH=x86_64 source config/options ${pkg_name} &>/dev/null - echo "${!pkg_var}" -} - -update_pkg() { - local pkg_path="$1" pkg_name="$2" pkg_version="$3" - local old_version pkg_url new_sha256 pkg_rev - - old_version=$(get_pkg_var "${pkg_name}" PKG_VERSION) - - if [ "${old_version}" != "${pkg_version}" ]; then - [ -n "$pkg_version}" ] && sed -e "s|PKG_VERSION=.*|PKG_VERSION=\"${pkg_version}\"|g" -i "${pkg_path}" - - pkg_url=$(get_pkg_var "${pkg_name}" PKG_URL) - - new_sha256="$(wget -q ${pkg_url} -O- | sha256sum | awk '{print $1}')" || exit 1 - sed -e "s|PKG_SHA256=.*|PKG_SHA256=\"${new_sha256}\"|g" -i "${pkg_path}" - - if [ "${BUMP_PKG_REV}" = "yes" ]; then - pkg_rev=$(get_pkg_var "${pkg_name}" PKG_REV) - pkg_rev=$((${pkg_rev}+1)) - sed -e "s|PKG_REV=.*|PKG_REV=\"${pkg_rev}\"|" -i "${pkg_path}" - fi - fi -} - -update_to_latest_tag() { - local package_mk="$1" pkg_name="$2" repo="$3" branch="$4" ref="$5" - local gitdir=${pkg_name}.git - local resolved_version - - git_clone ${repo} ${branch} ${gitdir} ${ref} - - resolved_version=$(resolve_tag ${gitdir} ${ref}) - if [ -z "${resolved_version}" ]; then - echo "========================================================================" - echo "WARNING: no tag found for package ${pkg_name}, falling back to HEAD" - echo "========================================================================" - resolved_version=$(resolve_hash ${gitdir} ${ref}) - fi - - echo "Resolved version for ${pkg_name}: ${ref} => ${resolved_version}" - - update_pkg "${package_mk}" ${pkg_name} ${resolved_version} - - if [ "${KEEP_GIT_DIRS}" != "yes" ]; then - rm -rf ${gitdir} - fi -} +. "${MY_DIR}/update_common_functions" if [ ! -d ${KODI_DIR} ] ; then git_clone https://github.com/xbmc/xbmc ${KODI_BRANCH} ${KODI_DIR} @@ -178,7 +56,7 @@ git_clone $REPO master $PKG_NAME.git $GIT_HASH if [ -f "${ROOT}/packages/mediacenter/kodi-platform/package.mk" ] ; then # update package.mk RESOLVED_HASH=$(resolve_hash $PKG_NAME.git $GIT_HASH) - update_pkg "${ROOT}/packages/mediacenter/kodi-platform/package.mk" ${PKG_NAME} ${RESOLVED_HASH} + update_pkg "${ROOT}/packages/mediacenter/kodi-platform" ${PKG_NAME} ${RESOLVED_HASH} fi if [ "${KEEP_GIT_DIRS}" != "yes" ]; then rm -rf $PKG_NAME.git @@ -208,10 +86,9 @@ for addontxt in $KODI_DIR/cmake/addons/bootstrap/repositories/*-addons.txt ; do continue fi - if [ -f "${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/package.mk" ] ; then - update_to_latest_tag \ - "${ROOT}/packages/mediacenter/kodi-binary-addons/${ADDON}/package.mk" \ - ${ADDON} ${REPO} ${KODI_BRANCH} ${GIT_HASH} + ADDON_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/" + if [ -f "${ADDON_PATH}/package.mk" ] ; then + update_to_latest_tag "${ADDON_PATH}" ${ADDON} ${REPO} ${KODI_BRANCH} ${GIT_HASH} else echo "[mkpkg] Skipped $ADDON" SKIPPED_ADDONS="$SKIPPED_ADDONS $ADDON" @@ -239,9 +116,11 @@ for ADDON in $(ls -1 "${ROOT}/packages/mediacenter/kodi-binary-addons"); do # update package.mk for stale github.com packages RESOLVED_HASH=$(resolve_hash ${ADDON}.git HEAD) || continue echo "Resolving hash for ${ADDON}: HEAD => ${RESOLVED_HASH}" - update_pkg "${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/package.mk" ${ADDON} ${RESOLVED_HASH} + update_pkg "${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON" ${ADDON} ${RESOLVED_HASH} if [ "${KEEP_GIT_DIRS}" != "yes" ]; then rm -rf $ADDON.git fi done + +rm -rf "${TMPDIR}" diff --git a/tools/mkpkg/update_common_functions b/tools/mkpkg/update_common_functions new file mode 100644 index 0000000000..be6e650171 --- /dev/null +++ b/tools/mkpkg/update_common_functions @@ -0,0 +1,188 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) + +msg_color() { + echo $( + cd "${ROOT}" + PROJECT=Generic ARCH=x86_64 . config/options "" + echo $(print_color "$1" "$2") + ) +} + +msg_warn() { + msg_color CLR_WARNING "$1" +} + +msg_error() { + msg_color CLR_ERROR "$1" +} + +msg_info() { + echo "$1" +} + +git_clone() { + # git_clone https://repo.url branch ./target_dir [githash] + echo "[mkpkg] Checking out $1 ..." + if [ ! -d "$3" ]; then + git clone "$1" "$3" + # Try to switch to specified branch if it exist, if not then use default branch + if [ -n "$2" ]; then + cd "$3" + git checkout $2 >/dev/null 2>/dev/null + cd .. + fi + else + if [ -d "$3" ] ; then + cd "$3" + git checkout $2 >/dev/null 2>/dev/null + git pull + cd .. + fi + fi + + if [ ! -z "$4" ] ; then + cd "$3" + git fetch >/dev/null 2>/dev/null + git branch -D $4 >/dev/null 2>/dev/null + git checkout $4 >/dev/null 2>/dev/null + git checkout -b ref-$4 >/dev/null 2>/dev/null + cd .. + fi +} + +get_pkg_var() { + local pkg_name="$1" pkg_var="$2" + cd "${ROOT}" + PROJECT=Generic ARCH=x86_64 source config/options ${pkg_name} &>/dev/null + echo "${!pkg_var}" +} + +resolve_hash() { + if [ -d "$1" ] ; then + cd "$1" + git rev-parse $2 2>/dev/null + fi +} + +resolve_tag() { + if [ -d "$1" ] ; then + cd "$1" + git describe --abbrev=0 --tags $2 2>/dev/null + fi +} + +set_pkg_version() { + local package_mk="$1/package.mk" pkg_version="$2" + sed -e "s|PKG_VERSION=.*|PKG_VERSION=\"${pkg_version}\"|g" -i "${package_mk}" +} + +download_pkg_file() { + local pkg_name="$1" + local pkg_url=$(get_pkg_var "${pkg_name}" PKG_URL) + wget -q -O "${TMP_PKG_FILE}" "${pkg_url}" +} + +extract_pkg_file() { + mkdir -p "${TMP_PKG_DIR}" + tar xf "${TMP_PKG_FILE}" --strip-components=1 -C "${TMP_PKG_DIR}" +} + +cleanup_pkg_tmp() { + rm -rf "${TMP_PKG_FILE}" "${TMP_PKG_DIR}" +} + +set_pkg_sha256() { + local package_mk="$1/package.mk" + local new_sha256=$(sha256sum < "${TMP_PKG_FILE}" | awk '{print $1}') + sed -e "s|PKG_SHA256=.*|PKG_SHA256=\"${new_sha256}\"|g" -i "${package_mk}" +} + +bump_pkg_rev() { + local package_mk="$1/package.mk" pkg_name="$2" + local pkg_rev=$(get_pkg_var "${pkg_name}" PKG_REV) + local new_pkg_rev=$((${pkg_rev}+1)) + + sed -e "s|PKG_REV=.*|PKG_REV=\"${new_pkg_rev}\"|" -i "${package_mk}" + msg_info "BUMPED ${pkg_name} PKG_REV from ${pkg_rev} to ${new_pkg_rev}" +} + +update_pkg() { + local pkg_path="$1" pkg_name="$2" pkg_version="$3" + + local old_version pkg_url new_sha256 pkg_rev + + old_version=$(get_pkg_var "${pkg_name}" PKG_VERSION) + + if [ "${old_version}" != "${pkg_version}" ]; then + [ -n "${pkg_version}" ] && set_pkg_version "${pkg_path}" "${pkg_version}" + + download_pkg_file "${pkg_name}" + set_pkg_sha256 "${pkg_path}" + + if [ "${BUMP_PKG_REV}" = "yes" ]; then + bump_pkg_rev "${pkg_path}" "${pkg_name}" + fi + fi +} + +update_to_latest_tag() { + local pkg_path="$1" pkg_name="$2" repo="$3" branch="$4" ref="$5" + local gitdir=${pkg_name}.git + local resolved_version + + git_clone "${repo}" "${branch}" "${gitdir}" "${ref}" + + resolved_version=$(resolve_tag "${gitdir}" "${ref}") + if [ -z "${resolved_version}" ]; then + echo "========================================================================" + msg_warn "WARNING: no tag found for package ${pkg_name}, falling back to HEAD" + echo "========================================================================" + resolved_version=$(resolve_hash "${gitdir}" "${ref}") + fi + + echo "Resolved version for ${pkg_name}: ${ref} => ${resolved_version}" + + update_pkg "${pkg_path}" "${pkg_name}" "${resolved_version}" + + if [ "${KEEP_GIT_DIRS}" != "yes" ]; then + rm -rf "${gitdir}" + fi +} + +# Get url in git:// notation for a package.mk, assuming it is a github.com url +# Return 1 if not a github domain +geturl() { + local addon="$1" + local domain owner repo PKG_URL + + PKG_URL="$(get_pkg_var ${addon} PKG_URL)" + + domain="$(echo "${PKG_URL}" | cut -d/ -f3)" + [ "${domain}" = "github.com" ] || return 1 + + owner="$(echo "${PKG_URL}" | cut -d/ -f4)" + repo="$(echo "${PKG_URL}" | cut -d/ -f5)" + + echo "git://${domain}/${owner}/${repo}.git" + return 0 +} + +# For the specified addon, verify that the package url +# matches the url retrieved from Kodi +validate_pkg_url() { + local addon="$1" url1="$2" + local domain owner repo url2 + + domain="$(echo "${url1}" | cut -d/ -f3)" + owner="$(echo "${url1}" | cut -d/ -f4)" + repo="$(echo "${url1}" | cut -d/ -f5)" + + url1="git://${domain}/${owner}/${repo}.git" + url2="$(geturl "${addon}")" + + [ "${url1}" = "${url2}" ] && return 0 || return 1 +} + + diff --git a/tools/mkpkg/update_retroplayer-addons b/tools/mkpkg/update_retroplayer-addons index 16c7596116..96bda46bf7 100755 --- a/tools/mkpkg/update_retroplayer-addons +++ b/tools/mkpkg/update_retroplayer-addons @@ -10,7 +10,8 @@ if [ "$1" == "-f" ]; then shift fi -ROOT=$(cd $(dirname $0)/../.. && pwd) +MY_DIR="$(dirname "$0")" +ROOT="$(cd "${MY_DIR}"/../.. && pwd)" TMPDIR="$(pwd)/.update-retroplayer-tmp" TMP_PKG_FILE="${TMPDIR}/package.tar.gz" TMP_PKG_DIR="${TMPDIR}/package" @@ -18,90 +19,7 @@ TMP_PKG_DIR="${TMPDIR}/package" rm -rf "${TMPDIR}" mkdir -p "${TMPDIR}" -git_clone() { - # git_clone https://repo.url branch ./target_dir [githash] - echo "[mkpkg] Checking out $1 ..." - if [ ! -d "$3" ]; then - git clone --single-branch --depth=1 --recursive "$1" -b $2 "$3" - else - if [ -d "$3" ] ; then - cd "$3" - git checkout $2 >/dev/null 2>/dev/null - git pull - cd .. - fi - fi - if [ ! -z "$4" ] ; then - cd "$3" - git fetch >/dev/null 2>/dev/null - git branch -D $4 >/dev/null 2>/dev/null - git checkout $4 >/dev/null 2>/dev/null - git checkout -b ref-$4 >/dev/null 2>/dev/null - cd .. - fi -} - -get_pkg_var() { - local pkg_name="$1" pkg_var="$2" - cd ${ROOT} - PROJECT=Generic ARCH=x86_64 source config/options ${pkg_name} &>/dev/null - echo "${!pkg_var}" -} - -set_pkg_version() { - local package_mk="$1/package.mk" pkg_version="$2" - sed -e "s|PKG_VERSION=.*|PKG_VERSION=\"${pkg_version}\"|g" -i "${package_mk}" -} - -download_pkg_file() { - local pkg_name="$1" - local pkg_url=$(get_pkg_var "${pkg_name}" PKG_URL) - wget -q -O "${TMP_PKG_FILE}" "${pkg_url}" -} - -extract_pkg_file() { - mkdir -p "${TMP_PKG_DIR}" - tar xf "${TMP_PKG_FILE}" --strip-components=1 -C "${TMP_PKG_DIR}" -} - -cleanup_pkg_tmp() { - rm -rf "${TMP_PKG_FILE}" "${TMP_PKG_DIR}" -} - -msg_color() { - echo $( - cd "${ROOT}" - PROJECT=Generic ARCH=x86_64 . config/options "" - echo $(print_color "$1" "$2") - ) -} - -msg_warn() { - msg_color CLR_WARNING "$1" -} - -msg_error() { - msg_color CLR_ERROR "$1" -} - -msg_info() { - echo "$1" -} - -set_pkg_sha256() { - local package_mk="$1/package.mk" - local new_sha256=$(sha256sum < "${TMP_PKG_FILE}" | awk '{print $1}') - sed -e "s|PKG_SHA256=.*|PKG_SHA256=\"${new_sha256}\"|g" -i "${package_mk}" -} - -bump_pkg_rev() { - local package_mk="$1/package.mk" pkg_name="$2" - local pkg_rev=$(get_pkg_var "${pkg_name}" PKG_REV) - local new_pkg_rev=$((${pkg_rev}+1)) - - sed -e "s|PKG_REV=.*|PKG_REV=\"${new_pkg_rev}\"|" -i "${package_mk}" - msg_info "BUMPED ${pkg_name} PKG_REV from ${pkg_rev} to ${new_pkg_rev}" -} +. "${MY_DIR}/update_common_functions" # addons for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-addons.git retroplayer" ; do