From 212c181de6ac5700f5318635bc65d197b9147d61 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Thu, 11 Jul 2019 16:35:32 +0200 Subject: [PATCH 1/5] addon update scripts: set modes via command line options Use command line options to select PKG_REV bump and deleting cloned git dis after update. git dirs are now kept by default, deleting them has to be explicitly enabled via "-d". Signed-off-by: Matthias Reichl --- tools/mkpkg/update_binary-addons | 46 +++++++++++++++++---- tools/mkpkg/update_retroplayer-addons | 59 +++++++++++++++++++++++---- 2 files changed, 90 insertions(+), 15 deletions(-) diff --git a/tools/mkpkg/update_binary-addons b/tools/mkpkg/update_binary-addons index 27b1244ebe..fadf909c0e 100755 --- a/tools/mkpkg/update_binary-addons +++ b/tools/mkpkg/update_binary-addons @@ -4,18 +4,50 @@ # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) -if [ -z "$1" ]; then - echo "Usage: $0 " - exit 0 +BUMP_PKG_REV="" +KEEP_GIT_DIRS="yes" + +usage() { + echo "Usage: $0 [options] " + echo " -b, --bump-pkg-rev: bump PKG_REV if package was not updated" + echo " -d, --delete-git-dirs: delete cloned git dirs after update" + echo " -h, --help: display help and exit" + exit 1 +} + +while [ $# -ne 0 ]; do + case "$1" in + -b|--bump-pkg-rev) + BUMP_PKG_REV="yes" + shift + ;; + -d|--delete-git-dirs) + KEEP_GIT_DIRS="" + shift + ;; + -h|--help) + usage + exit 1 + ;; + -*) + echo "illegal option $1" + usage + exit 1 + ;; + *) + break + ;; + esac +done + +if [ $# -ne 1 ]; then + usage + exit 1 fi # list of packages to exclude from update EXCLUDED_PACKAGES="vfs.nfs vfs.sacd" -# the following environment variables can be set to "yes" to enable optional features: -# KEEP_GIT_DIRS: don't delete cloned git directories after update check -# BUMP_PKG_REV: bump PKG_REV if PKG_VERSION has changed - MY_DIR="$(dirname "$0")" ROOT="$(cd "${MY_DIR}"/../.. && pwd)" TMPDIR="$(pwd)/.update-binary-addons-tmp" diff --git a/tools/mkpkg/update_retroplayer-addons b/tools/mkpkg/update_retroplayer-addons index 80f01b10d3..d29a4d039c 100755 --- a/tools/mkpkg/update_retroplayer-addons +++ b/tools/mkpkg/update_retroplayer-addons @@ -3,16 +3,59 @@ # SPDX-License-Identifier: GPL-2.0 # Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) +BUMP_PKG_REV="" FORCE_LIBRETRO_BUMP="" +KEEP_GIT_DIRS="yes" -if [ "$1" == "-f" ]; then - FORCE_LIBRETRO_BUMP="yes" - shift +usage() { + echo "Usage: $0 [options] []" + echo " -b, --bump-pkg-rev: bump PKG_REV if package was not updated" + echo " -d, --delete-git-dirs: delete cloned git dirs after update" + echo " -f, --force-libretro-bump: check for new libretro package" + echo " even if kodi game package version has not changed" + echo " -h, --help: display help" +} + +while [ $# -ne 0 ]; do + case "$1" in + -b|--bump-pkg-rev) + BUMP_PKG_REV="yes" + shift + ;; + -d|--delete-git-dirs) + KEEP_GIT_DIRS="" + shift + ;; + -f|--force-libretro-bump) + FORCE_LIBRETRO_BUMP="yes" + shift + ;; + -h|--help) + usage + exit 1 + ;; + -*) + echo "illegal option $1" + usage + exit 1 + ;; + *) + break + ;; + esac +done + + +if [ $# -gt 1 ]; then + usage + exit 1 +fi +if [ $# -eq 0 ]; then + KODI_BRANCH="retroplayer" + echo "using default branch ${KODI_BRANCH}" +else + KODI_BRANCH="$1" fi - -# the following environment variables can be set to "yes" to enable optional features: -# KEEP_GIT_DIRS: don't delete cloned git directories after update check -# BUMP_PKG_REV: bump PKG_REV if PKG_VERSION has changed # list of packages to exclude from update EXCLUDED_PACKAGES="game.libretro.chailove @@ -36,7 +79,7 @@ mkdir -p "${TMPDIR}" . "${MY_DIR}/update_common_functions" # addons -for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-addons.git retroplayer" ; do +for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-addons.git ${KODI_BRANCH}" ; do ADDONS=$(echo $addontxt | awk '{print $1}') ADDONREPO=$(echo $addontxt | awk '{print $2}') GIT_HASH=$(echo $addontxt | awk '{print $3}') From 43e58805d75d9941692a991df7175352e2ea583d Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Thu, 11 Jul 2019 19:11:45 +0200 Subject: [PATCH 2/5] addon update scripts: change PKG_REV update logic When updating versioned / tagged addons reset PKG_REV to 1. When updating unversioned / untagged addons always bump PKG_REV as we don't know if the version has been changed or not. If the "-b/--bump-pkg-rev" option is used PKG_REV will be bumped on all addons that weren't updated. Use this to ensure all addons will have a newer version than before. Signed-off-by: Matthias Reichl --- tools/mkpkg/update_binary-addons | 7 ++++-- tools/mkpkg/update_common_functions | 28 ++++++++++++++++++++---- tools/mkpkg/update_retroplayer-addons | 31 ++++++++++++++++++++------- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/tools/mkpkg/update_binary-addons b/tools/mkpkg/update_binary-addons index fadf909c0e..0565548943 100755 --- a/tools/mkpkg/update_binary-addons +++ b/tools/mkpkg/update_binary-addons @@ -75,7 +75,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" ${PKG_NAME} ${RESOLVED_HASH} + update_pkg "${ROOT}/packages/mediacenter/kodi-platform" ${PKG_NAME} ${RESOLVED_HASH} || true fi if [ "${KEEP_GIT_DIRS}" != "yes" ]; then rm -rf $PKG_NAME.git @@ -138,7 +138,10 @@ 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" ${ADDON} ${RESOLVED_HASH} + if update_pkg "${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON" ${ADDON} ${RESOLVED_HASH}; then + # always bump PKG_REV when updating untagged addons + bump_pkg_rev "${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON" ${ADDON} + fi if [ "${KEEP_GIT_DIRS}" != "yes" ]; then rm -rf $ADDON.git diff --git a/tools/mkpkg/update_common_functions b/tools/mkpkg/update_common_functions index 1f37736a99..2d0e124446 100644 --- a/tools/mkpkg/update_common_functions +++ b/tools/mkpkg/update_common_functions @@ -118,6 +118,15 @@ bump_pkg_rev() { msg_info "BUMPED ${pkg_name} PKG_REV from ${pkg_rev} to ${new_pkg_rev}" } +reset_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="1" + + sed -e "s|PKG_REV=.*|PKG_REV=\"${new_pkg_rev}\"|" -i "${package_mk}" + msg_info "RESET ${pkg_name} PKG_REV from ${pkg_rev} to ${new_pkg_rev}" +} + update_pkg() { local pkg_path="$1" pkg_name="$2" pkg_version="$3" @@ -131,9 +140,9 @@ update_pkg() { download_pkg_file "${pkg_name}" set_pkg_sha256 "${pkg_path}" - if [ "${BUMP_PKG_REV}" = "yes" ]; then - bump_pkg_rev "${pkg_path}" "${pkg_name}" - fi + return 0 + else + return 1 fi } @@ -141,11 +150,13 @@ 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 + local no_tag="" git_clone "${repo}" "${branch}" "${gitdir}" "${ref}" resolved_version=$(resolve_tag "${gitdir}" "${ref}") if [ -z "${resolved_version}" ]; then + no_tag="yes" echo "========================================================================" msg_warn "WARNING: no tag found for package ${pkg_name}, falling back to HEAD" echo "========================================================================" @@ -154,7 +165,16 @@ update_to_latest_tag() { echo "Resolved version for ${pkg_name}: ${ref} => ${resolved_version}" - update_pkg "${pkg_path}" "${pkg_name}" "${resolved_version}" + if update_pkg "${pkg_path}" "${pkg_name}" "${resolved_version}"; then + if [ -n "${no_tag}" ]; then + # always bump PKG_REV on updates as we have no info if version changed + bump_pkg_rev "${pkg_path}" "${pkg_name}" + else + reset_pkg_rev "${pkg_path}" "${pkg_name}" + fi + else + [ "${BUMP_PKG_REV}" = "yes" ] && bump_pkg_rev "${pkg_path}" "${pkg_name}" + fi if [ "${KEEP_GIT_DIRS}" != "yes" ]; then rm -rf "${gitdir}" diff --git a/tools/mkpkg/update_retroplayer-addons b/tools/mkpkg/update_retroplayer-addons index d29a4d039c..48e7ca224f 100755 --- a/tools/mkpkg/update_retroplayer-addons +++ b/tools/mkpkg/update_retroplayer-addons @@ -116,12 +116,15 @@ for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-add RETRO_PATH="" fi - BUMPED="" + BUMPED_ADDON="" + BUMPED_RETRO="" + NO_TAG="" CHECK_RETRO="" git_clone "${GAME_GIT_REPO}" "${GAME_GIT_BRANCH}" "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}" GAME_NEW_VERSION=$(resolve_tag "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") if [ -z "${GAME_NEW_VERSION}" ]; then + NO_TAG="yes" echo "========================================================================" msg_warn "WARNING: no tag found for addon ${GAME_ADDON}, falling back to HEAD" echo "========================================================================" @@ -135,9 +138,7 @@ for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-add GAME_VERSION=$(get_pkg_var "${GAME_ADDON}" PKG_VERSION) if [ "${GAME_VERSION}" != "${GAME_NEW_VERSION}" ]; then - if [ "${BUMP_PKG_REV}" = "yes" ]; then - BUMPED="yes" - fi + BUMPED_ADDON="yes" [ -n "${RETRO_NAME}" ] && CHECK_RETRO="yes" set_pkg_version "${GAME_PATH}" "${GAME_NEW_VERSION}" download_pkg_file "${GAME_ADDON}" @@ -181,7 +182,7 @@ for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-add fi if [ "${RETRO_VERSION}" != "${RETRO_NEW_HASH}" ]; then - BUMPED="yes" + BUMPED_RETRO="yes" set_pkg_version "${RETRO_PATH}" "${RETRO_NEW_HASH}" download_pkg_file "${RETRO_ADDON}" set_pkg_sha256 "${RETRO_PATH}" @@ -189,10 +190,24 @@ for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-add fi fi - if [ -n "${BUMPED}" ]; then - bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" - cleanup_pkg_tmp + if [ -n "${NO_TAG}" ]; then + # always bump PKG_REV on updates as we have no info if version changed + if [ -n "${BUMPED_ADDON}" -o -n "${BUMPED_RETRO}" -o -n "${BUMP_PKG_REV}" ]; then + bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" + fi + else + if [ -n "${BUMPED_ADDON}" ]; then + # reset PKG_REV if version changed + reset_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" + else + # if addon version is unchanged but libretro changed bump PKG_REV + if [ -n "${BUMPED_RETRO}" -o -n "${BUMP_PKG_REV}" ]; then + bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" + fi + fi fi + + cleanup_pkg_tmp done done From 2ae4537216390e4354502027c466482cd19b48ca Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Fri, 12 Jul 2019 11:53:47 +0200 Subject: [PATCH 3/5] addon update scripts: refactor repo fetching and package updating Kodi binary and game addons always reference branches in the addon repo. The only exception is the kodi-platform package which references a githash. This allows us to simplify remote repo fetch and tag / branch HEAD resolving: we don't need named branches in the working copy but can simply query remote branches or use a detached branch if we need the actual contents. With this change the same (out-of-tree) directory containing cloned repos can be used to update both kodi Leia and master addon versions, without needing another clone. Also refactor the package update code, drop update_to_latest_tag from common functions (it was only used by update_binary-addons, update_retroplayer-addons needs slightly different logic) and use update_pkg function. update_retroplayer-addons now also uses update_pkg instead of duplicating nearly identical code. Several variable names have been cleaned up to follow a common naming pattern. Signed-off-by: Matthias Reichl --- tools/mkpkg/update_binary-addons | 69 ++++++++++++++++------- tools/mkpkg/update_common_functions | 79 +++++++-------------------- tools/mkpkg/update_retroplayer-addons | 43 ++++++--------- 3 files changed, 86 insertions(+), 105 deletions(-) diff --git a/tools/mkpkg/update_binary-addons b/tools/mkpkg/update_binary-addons index 0565548943..59f50fee56 100755 --- a/tools/mkpkg/update_binary-addons +++ b/tools/mkpkg/update_binary-addons @@ -58,20 +58,18 @@ rm -rf "${TMPDIR}" mkdir -p "${TMPDIR}" KODI_BRANCH="$1" -KODI_DIR="kodi-${KODI_BRANCH}.git" +KODI_DIR="kodi.git" . "${MY_DIR}/update_common_functions" -if [ ! -d ${KODI_DIR} ] ; then - git_clone https://github.com/xbmc/xbmc ${KODI_BRANCH} ${KODI_DIR} -fi +git_clone https://github.com/xbmc/xbmc ${KODI_DIR} ${KODI_BRANCH} -# kodi-platform +# kodi-platform, points to repo+githash REPO=$(cat $KODI_DIR/cmake/addons/depends/common/kodi-platform/kodi-platform.txt | awk '{print $2}') GIT_HASH=$(cat $KODI_DIR/cmake/addons/depends/common/kodi-platform/kodi-platform.txt | awk '{print $3}') PKG_NAME="kodi-platform" -git_clone $REPO master $PKG_NAME.git $GIT_HASH +git_clone $REPO $PKG_NAME.git if [ -f "${ROOT}/packages/mediacenter/kodi-platform/package.mk" ] ; then # update package.mk RESOLVED_HASH=$(resolve_hash $PKG_NAME.git $GIT_HASH) @@ -84,30 +82,60 @@ fi # addons for addontxt in $KODI_DIR/cmake/addons/bootstrap/repositories/*-addons.txt ; do ADDONS=$(cat $addontxt | awk '{print $1}') - ADDONREPO=$(cat $addontxt | awk '{print $2}') - GIT_HASH=$(cat $addontxt | awk '{print $3}') - git_clone $ADDONREPO ${KODI_BRANCH} $ADDONS.git $GIT_HASH - for addon in $ADDONS.git/*.*/ ; do + ADDONS_GIT_DIR="${ADDONS}.git" + ADDONS_GIT_REPO=$(cat $addontxt | awk '{print $2}') + ADDONS_GIT_BRANCH=$(cat $addontxt | awk '{print $3}') + git_clone $ADDONS_GIT_REPO $ADDONS_GIT_DIR ${ADDONS_GIT_BRANCH} + + for addon in $ADDONS_GIT_DIR/*.*/ ; do ADDON=$(basename $addon) [[ ${ADDON} =~ ^game.* ]] && continue # ignore game.* addons - handled by update_retroplayer-addons check_package_excluded "${ADDON}" "${EXCLUDED_PACKAGES}" && continue - REPO=$(cat $addon/$ADDON.txt | awk '{print $2}') - GIT_HASH=$(cat $addon/$ADDON.txt | awk '{print $3}') + GIT_DIR="${ADDON}.git" + GIT_REPO=$(cat ${addon}/${ADDON}.txt | awk '{print $2}') + GIT_BRANCH=$(cat ${addon}/${ADDON}.txt | awk '{print $3}') - if ! grep -q all $addon/platforms.txt && ! grep -q linux $addon/platforms.txt && ! grep -q ! $addon/platforms.txt; then + if ! grep -q all ${addon}/platforms.txt && ! grep -q linux ${addon}/platforms.txt && ! grep -q ! ${addon}/platforms.txt; then continue fi - ADDON_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON/" + ADDON_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${ADDON}/" if [ -f "${ADDON_PATH}/package.mk" ] ; then # Verify the Kodi repo matches our package repo # If different, ignore the addon and process it later as an "unofficial" addon - validate_pkg_url "$ADDON" "$REPO" || continue + validate_pkg_url "${ADDON}" "${GIT_REPO}" || continue - update_to_latest_tag "${ADDON_PATH}" ${ADDON} ${REPO} ${KODI_BRANCH} ${GIT_HASH} + git_clone ${GIT_REPO} ${GIT_DIR} ${GIT_BRANCH} + + NO_TAG="" + NEW_VERSION=$(resolve_tag_in_branch ${GIT_DIR} ${GIT_BRANCH}) + if [ -z "${NEW_VERSION}" ]; then + NO_TAG="yes" + echo "========================================================================" + msg_warn "WARNING: no tag found for addon ${ADDON}, falling back to HEAD" + echo "========================================================================" + NEW_VERSION=$(resolve_hash_in_branch "${GIT_DIR}" "${GIT_BRANCH}") + fi + + echo "Resolved version for ${ADDON}: ${GIT_BRANCH} => ${NEW_VERSION}" + + if update_pkg "${ADDON_PATH}" ${ADDON} ${NEW_VERSION}; then + if [ -n "${NO_TAG}" ]; then + # always bump PKG_REV on updates as we have no info if version changed + bump_pkg_rev "${ADDON_PATH}" "${ADDON}" + else + reset_pkg_rev "${ADDON_PATH}" "${ADDON}" + fi + else + [ "${BUMP_PKG_REV}" = "yes" ] && bump_pkg_rev "${ADDON_PATH}" "${ADDON}" + fi + + if [ "${KEEP_GIT_DIRS}" != "yes" ]; then + rm -rf "${GIT_DIR}" + fi else echo "[mkpkg] Skipped $ADDON" SKIPPED_ADDONS="$SKIPPED_ADDONS $ADDON" @@ -131,12 +159,13 @@ for ADDON in $(ls -1 "${ROOT}/packages/mediacenter/kodi-binary-addons"); do check_package_excluded "${ADDON}" "${EXCLUDED_PACKAGES}" && continue # Obtain git url - ignore if not a suitable repo - REPO="$(geturl "${ADDON}")" || continue + GIT_DIR="${ADDON}.git" + GIT_REPO="$(geturl "${ADDON}")" || continue - git_clone $REPO ${KODI_BRANCH} $ADDON.git HEAD + git_clone ${GIT_REPO} ${GIT_DIR} # update package.mk for stale github.com packages - RESOLVED_HASH=$(resolve_hash ${ADDON}.git HEAD) || continue + RESOLVED_HASH=$(resolve_hash_in_branch ${ADDON}.git HEAD) || continue echo "Resolving hash for ${ADDON}: HEAD => ${RESOLVED_HASH}" if update_pkg "${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON" ${ADDON} ${RESOLVED_HASH}; then # always bump PKG_REV when updating untagged addons @@ -144,7 +173,7 @@ for ADDON in $(ls -1 "${ROOT}/packages/mediacenter/kodi-binary-addons"); do fi if [ "${KEEP_GIT_DIRS}" != "yes" ]; then - rm -rf $ADDON.git + rm -rf ${GIT_DIR} fi done diff --git a/tools/mkpkg/update_common_functions b/tools/mkpkg/update_common_functions index 2d0e124446..3f59569ee2 100644 --- a/tools/mkpkg/update_common_functions +++ b/tools/mkpkg/update_common_functions @@ -23,31 +23,18 @@ msg_info() { } git_clone() { - # git_clone https://repo.url branch ./target_dir [githash] + # git_clone https://repo.url target_dir [branch] 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 + if [ ! -d "$2" ]; then + git clone "$1" "$2" else - if [ -d "$3" ] ; then - cd "$3" - git checkout $2 >/dev/null 2>/dev/null - git pull - cd .. - fi + cd "$2" + git fetch + cd .. 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 + if [ -n "$3" ]; then + cd "$2" + git checkout -q origin/"$3"; cd .. fi } @@ -66,10 +53,17 @@ resolve_hash() { fi } -resolve_tag() { +resolve_hash_in_branch() { if [ -d "$1" ] ; then cd "$1" - git describe --abbrev=0 --tags $2 2>/dev/null + git rev-parse origin/$2 2>/dev/null + fi +} + +resolve_tag_in_branch() { + if [ -d "$1" ] ; then + cd "$1" + git describe --abbrev=0 --tags origin/$2 2>/dev/null fi } @@ -140,47 +134,14 @@ update_pkg() { download_pkg_file "${pkg_name}" set_pkg_sha256 "${pkg_path}" + msg_info "UPDATED ${pkg_name} from ${old_version} to ${pkg_version}" + return 0 else return 1 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 - local no_tag="" - - git_clone "${repo}" "${branch}" "${gitdir}" "${ref}" - - resolved_version=$(resolve_tag "${gitdir}" "${ref}") - if [ -z "${resolved_version}" ]; then - no_tag="yes" - 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}" - - if update_pkg "${pkg_path}" "${pkg_name}" "${resolved_version}"; then - if [ -n "${no_tag}" ]; then - # always bump PKG_REV on updates as we have no info if version changed - bump_pkg_rev "${pkg_path}" "${pkg_name}" - else - reset_pkg_rev "${pkg_path}" "${pkg_name}" - fi - else - [ "${BUMP_PKG_REV}" = "yes" ] && bump_pkg_rev "${pkg_path}" "${pkg_name}" - fi - - 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() { diff --git a/tools/mkpkg/update_retroplayer-addons b/tools/mkpkg/update_retroplayer-addons index 48e7ca224f..160c8c48d1 100755 --- a/tools/mkpkg/update_retroplayer-addons +++ b/tools/mkpkg/update_retroplayer-addons @@ -81,11 +81,12 @@ mkdir -p "${TMPDIR}" # addons for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-addons.git ${KODI_BRANCH}" ; do ADDONS=$(echo $addontxt | awk '{print $1}') - ADDONREPO=$(echo $addontxt | awk '{print $2}') - GIT_HASH=$(echo $addontxt | awk '{print $3}') - git_clone $ADDONREPO retroplayer $ADDONS.git $GIT_HASH + ADDONS_DIR="${ADDONS}.git" + ADDONS_REPO=$(echo $addontxt | awk '{print $2}') + ADDONS_BRANCH=$(echo $addontxt | awk '{print $3}') + git_clone ${ADDONS_REPO} ${ADDONS_DIR} ${ADDONS_BRANCH} - for addon in $ADDONS.git/*.*/ ; do + for addon in ${ADDONS_DIR}/*.*/ ; do GAME_ADDON=$(basename ${addon}) [[ "${GAME_ADDON}" =~ ^game. ]] || continue @@ -121,34 +122,28 @@ for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-add NO_TAG="" CHECK_RETRO="" - git_clone "${GAME_GIT_REPO}" "${GAME_GIT_BRANCH}" "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}" - GAME_NEW_VERSION=$(resolve_tag "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") + git_clone "${GAME_GIT_REPO}" "${GAME_GIT_DIR}" + GAME_NEW_VERSION=$(resolve_tag_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") if [ -z "${GAME_NEW_VERSION}" ]; then NO_TAG="yes" echo "========================================================================" msg_warn "WARNING: no tag found for addon ${GAME_ADDON}, falling back to HEAD" echo "========================================================================" - GAME_NEW_VERSION=$(resolve_hash "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") + GAME_NEW_VERSION=$(resolve_hash_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") fi if [ "${KEEP_GIT_DIRS}" != "yes" ]; then rm -rf "${GAME_GIT_DIR}" fi - GAME_VERSION=$(get_pkg_var "${GAME_ADDON}" PKG_VERSION) - - if [ "${GAME_VERSION}" != "${GAME_NEW_VERSION}" ]; then + if update_pkg "${GAME_PATH}" "${GAME_ADDON}" "${GAME_NEW_VERSION}"; then BUMPED_ADDON="yes" [ -n "${RETRO_NAME}" ] && CHECK_RETRO="yes" - set_pkg_version "${GAME_PATH}" "${GAME_NEW_VERSION}" - download_pkg_file "${GAME_ADDON}" - set_pkg_sha256 "${GAME_PATH}" - msg_info "UPDATED ${GAME_ADDON} from ${GAME_VERSION} to ${GAME_NEW_VERSION}" - fi - - if [ -n "${FORCE_LIBRETRO_BUMP}" -a -n "${RETRO_NAME}" -a -z "${CHECK_RETRO}" ]; then - download_pkg_file "${GAME_ADDON}" - CHECK_RETRO="yes" + else + if [ -n "${FORCE_LIBRETRO_BUMP}" -a -n "${RETRO_NAME}" ]; then + download_pkg_file "${GAME_ADDON}" + CHECK_RETRO="yes" + fi fi if [ -n "${CHECK_RETRO}" ]; then @@ -172,21 +167,17 @@ for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-add VERSION_INFO=$(grep "^${RETRO_NAME}" "${RETRO_VERSION_FILE}" | head -1) if [[ "$VERSION_INFO" =~ .zip$ ]] ; then # version referenced by githash - RETRO_NEW_HASH=$(sed -e 's|^.*/archive/||' -e 's|\.zip$||' "${RETRO_VERSION_FILE}") + RETRO_NEW_VERSION=$(sed -e 's|^.*/archive/||' -e 's|\.zip$||' "${RETRO_VERSION_FILE}") else msg_warn "unmanaged version in kodi package: ${VERSION_INFO}" # unmanaged version, repo plus branch RETRO_SITE=$(echo "${VERSION_INFO}" | awk '{print $2}') RETRO_BRANCH=$(echo "${VERSION_INFO}" | awk '{print $3}') - RETRO_NEW_HASH=$(git ls-remote "${RETRO_SITE}" "${RETRO_BRANCH}" | awk '{print $1}') + RETRO_NEW_VERSION=$(git ls-remote "${RETRO_SITE}" "${RETRO_BRANCH}" | awk '{print $1}') fi - if [ "${RETRO_VERSION}" != "${RETRO_NEW_HASH}" ]; then + if update_pkg "${RETRO_PATH}" "${RETRO_ADDON}" "${RETRO_NEW_VERSION}"; then BUMPED_RETRO="yes" - set_pkg_version "${RETRO_PATH}" "${RETRO_NEW_HASH}" - download_pkg_file "${RETRO_ADDON}" - set_pkg_sha256 "${RETRO_PATH}" - msg_info "UPDATED ${RETRO_ADDON} from ${RETRO_VERSION} to ${RETRO_NEW_HASH}" fi fi From 02781b9cbfcb17e68ed7e8eb6bdb61612cf77243 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Fri, 12 Jul 2019 14:17:33 +0200 Subject: [PATCH 4/5] update_retroplayer-addons: drop loop over single item Signed-off-by: Matthias Reichl --- tools/mkpkg/update_retroplayer-addons | 200 +++++++++++++------------- 1 file changed, 98 insertions(+), 102 deletions(-) diff --git a/tools/mkpkg/update_retroplayer-addons b/tools/mkpkg/update_retroplayer-addons index 160c8c48d1..8a8270e14d 100755 --- a/tools/mkpkg/update_retroplayer-addons +++ b/tools/mkpkg/update_retroplayer-addons @@ -78,128 +78,124 @@ mkdir -p "${TMPDIR}" . "${MY_DIR}/update_common_functions" -# addons -for addontxt in "game-binary-addons https://github.com/kodi-game/repo-binary-addons.git ${KODI_BRANCH}" ; do - ADDONS=$(echo $addontxt | awk '{print $1}') - ADDONS_DIR="${ADDONS}.git" - ADDONS_REPO=$(echo $addontxt | awk '{print $2}') - ADDONS_BRANCH=$(echo $addontxt | awk '{print $3}') - git_clone ${ADDONS_REPO} ${ADDONS_DIR} ${ADDONS_BRANCH} +ADDONS="game-binary-addons" +ADDONS_DIR="${ADDONS}.git" +ADDONS_REPO="https://github.com/kodi-game/repo-binary-addons.git" +git_clone ${ADDONS_REPO} ${ADDONS_DIR} ${KODI_BRANCH} - for addon in ${ADDONS_DIR}/*.*/ ; do - GAME_ADDON=$(basename ${addon}) +for addon in ${ADDONS_DIR}/*.*/ ; do + GAME_ADDON=$(basename ${addon}) - [[ "${GAME_ADDON}" =~ ^game. ]] || continue + [[ "${GAME_ADDON}" =~ ^game. ]] || continue - check_package_excluded "${GAME_ADDON}" "${EXCLUDED_PACKAGES}" && continue + check_package_excluded "${GAME_ADDON}" "${EXCLUDED_PACKAGES}" && continue - if ! grep -q all $addon/platforms.txt && ! grep -q linux $addon/platforms.txt && ! grep -q ! $addon/platforms.txt; then - continue + if ! grep -q all $addon/platforms.txt && ! grep -q linux $addon/platforms.txt && ! grep -q ! $addon/platforms.txt; then + continue + fi + + GAME_GIT_DIR="${GAME_ADDON}.git" + GAME_GIT_REPO=$(cat $addon/${GAME_ADDON}.txt | awk '{print $2}') + GAME_GIT_BRANCH=$(cat $addon/${GAME_ADDON}.txt | awk '{print $3}') + GAME_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${GAME_ADDON}" + + if [ ! -d "$GAME_PATH" ] ; then + msg_warn "SKIPPING ${GAME_ADDON}, not present in LE" + continue + fi + + if [[ "${GAME_ADDON}" =~ ^game.libretro. ]]; then + RETRO_NAME="${GAME_ADDON#game.libretro.}" + RETRO_ADDON="libretro-${RETRO_NAME}" + RETRO_PATH="${ROOT}/packages/emulation/${RETRO_ADDON}" + else + RETRO_NAME="" + RETRO_ADDON="" + RETRO_PATH="" + fi + + BUMPED_ADDON="" + BUMPED_RETRO="" + NO_TAG="" + CHECK_RETRO="" + + git_clone "${GAME_GIT_REPO}" "${GAME_GIT_DIR}" + GAME_NEW_VERSION=$(resolve_tag_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") + if [ -z "${GAME_NEW_VERSION}" ]; then + NO_TAG="yes" + echo "========================================================================" + msg_warn "WARNING: no tag found for addon ${GAME_ADDON}, falling back to HEAD" + echo "========================================================================" + GAME_NEW_VERSION=$(resolve_hash_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") + fi + + if [ "${KEEP_GIT_DIRS}" != "yes" ]; then + rm -rf "${GAME_GIT_DIR}" + fi + + if update_pkg "${GAME_PATH}" "${GAME_ADDON}" "${GAME_NEW_VERSION}"; then + BUMPED_ADDON="yes" + [ -n "${RETRO_NAME}" ] && CHECK_RETRO="yes" + else + if [ -n "${FORCE_LIBRETRO_BUMP}" -a -n "${RETRO_NAME}" ]; then + download_pkg_file "${GAME_ADDON}" + CHECK_RETRO="yes" + fi + fi + + if [ -n "${CHECK_RETRO}" ]; then + if [ ! -d "${RETRO_PATH}" ]; then + msg_error "ERROR: ${RETRO_PATH} doesn't exist" + cleanup_pkg_tmp + exit 1 fi - GAME_GIT_DIR="${GAME_ADDON}.git" - GAME_GIT_REPO=$(cat $addon/${GAME_ADDON}.txt | awk '{print $2}') - GAME_GIT_BRANCH=$(cat $addon/${GAME_ADDON}.txt | awk '{print $3}') - GAME_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${GAME_ADDON}" + RETRO_VERSION=$(get_pkg_var "${RETRO_ADDON}" PKG_VERSION) + extract_pkg_file - if [ ! -d "$GAME_PATH" ] ; then - msg_warn "SKIPPING ${GAME_ADDON}, not present in LE" - continue + RETRO_VERSION_FILE="${TMP_PKG_DIR}/depends/common/${RETRO_NAME}/${RETRO_NAME}.txt" + + if [ ! -f "${RETRO_VERSION_FILE}" ]; then + msg_error "ERROR: ${RETRO_VERSION_FILE} does not exist" + cleanup_pkg_tmp + exit 1 fi - if [[ "${GAME_ADDON}" =~ ^game.libretro. ]]; then - RETRO_NAME="${GAME_ADDON#game.libretro.}" - RETRO_ADDON="libretro-${RETRO_NAME}" - RETRO_PATH="${ROOT}/packages/emulation/${RETRO_ADDON}" + VERSION_INFO=$(grep "^${RETRO_NAME}" "${RETRO_VERSION_FILE}" | head -1) + if [[ "$VERSION_INFO" =~ .zip$ ]] ; then + # version referenced by githash + RETRO_NEW_VERSION=$(sed -e 's|^.*/archive/||' -e 's|\.zip$||' "${RETRO_VERSION_FILE}") else - RETRO_NAME="" - RETRO_ADDON="" - RETRO_PATH="" + msg_warn "unmanaged version in kodi package: ${VERSION_INFO}" + # unmanaged version, repo plus branch + RETRO_SITE=$(echo "${VERSION_INFO}" | awk '{print $2}') + RETRO_BRANCH=$(echo "${VERSION_INFO}" | awk '{print $3}') + RETRO_NEW_VERSION=$(git ls-remote "${RETRO_SITE}" "${RETRO_BRANCH}" | awk '{print $1}') fi - BUMPED_ADDON="" - BUMPED_RETRO="" - NO_TAG="" - CHECK_RETRO="" - - git_clone "${GAME_GIT_REPO}" "${GAME_GIT_DIR}" - GAME_NEW_VERSION=$(resolve_tag_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") - if [ -z "${GAME_NEW_VERSION}" ]; then - NO_TAG="yes" - echo "========================================================================" - msg_warn "WARNING: no tag found for addon ${GAME_ADDON}, falling back to HEAD" - echo "========================================================================" - GAME_NEW_VERSION=$(resolve_hash_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}") + if update_pkg "${RETRO_PATH}" "${RETRO_ADDON}" "${RETRO_NEW_VERSION}"; then + BUMPED_RETRO="yes" fi + fi - if [ "${KEEP_GIT_DIRS}" != "yes" ]; then - rm -rf "${GAME_GIT_DIR}" + if [ -n "${NO_TAG}" ]; then + # always bump PKG_REV on updates as we have no info if version changed + if [ -n "${BUMPED_ADDON}" -o -n "${BUMPED_RETRO}" -o -n "${BUMP_PKG_REV}" ]; then + bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" fi - - if update_pkg "${GAME_PATH}" "${GAME_ADDON}" "${GAME_NEW_VERSION}"; then - BUMPED_ADDON="yes" - [ -n "${RETRO_NAME}" ] && CHECK_RETRO="yes" + else + if [ -n "${BUMPED_ADDON}" ]; then + # reset PKG_REV if version changed + reset_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" else - if [ -n "${FORCE_LIBRETRO_BUMP}" -a -n "${RETRO_NAME}" ]; then - download_pkg_file "${GAME_ADDON}" - CHECK_RETRO="yes" - fi - fi - - if [ -n "${CHECK_RETRO}" ]; then - if [ ! -d "${RETRO_PATH}" ]; then - msg_error "ERROR: ${RETRO_PATH} doesn't exist" - cleanup_pkg_tmp - exit 1 - fi - - RETRO_VERSION=$(get_pkg_var "${RETRO_ADDON}" PKG_VERSION) - extract_pkg_file - - RETRO_VERSION_FILE="${TMP_PKG_DIR}/depends/common/${RETRO_NAME}/${RETRO_NAME}.txt" - - if [ ! -f "${RETRO_VERSION_FILE}" ]; then - msg_error "ERROR: ${RETRO_VERSION_FILE} does not exist" - cleanup_pkg_tmp - exit 1 - fi - - VERSION_INFO=$(grep "^${RETRO_NAME}" "${RETRO_VERSION_FILE}" | head -1) - if [[ "$VERSION_INFO" =~ .zip$ ]] ; then - # version referenced by githash - RETRO_NEW_VERSION=$(sed -e 's|^.*/archive/||' -e 's|\.zip$||' "${RETRO_VERSION_FILE}") - else - msg_warn "unmanaged version in kodi package: ${VERSION_INFO}" - # unmanaged version, repo plus branch - RETRO_SITE=$(echo "${VERSION_INFO}" | awk '{print $2}') - RETRO_BRANCH=$(echo "${VERSION_INFO}" | awk '{print $3}') - RETRO_NEW_VERSION=$(git ls-remote "${RETRO_SITE}" "${RETRO_BRANCH}" | awk '{print $1}') - fi - - if update_pkg "${RETRO_PATH}" "${RETRO_ADDON}" "${RETRO_NEW_VERSION}"; then - BUMPED_RETRO="yes" - fi - fi - - if [ -n "${NO_TAG}" ]; then - # always bump PKG_REV on updates as we have no info if version changed - if [ -n "${BUMPED_ADDON}" -o -n "${BUMPED_RETRO}" -o -n "${BUMP_PKG_REV}" ]; then + # if addon version is unchanged but libretro changed bump PKG_REV + if [ -n "${BUMPED_RETRO}" -o -n "${BUMP_PKG_REV}" ]; then bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" fi - else - if [ -n "${BUMPED_ADDON}" ]; then - # reset PKG_REV if version changed - reset_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" - else - # if addon version is unchanged but libretro changed bump PKG_REV - if [ -n "${BUMPED_RETRO}" -o -n "${BUMP_PKG_REV}" ]; then - bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}" - fi - fi fi + fi - cleanup_pkg_tmp - done + cleanup_pkg_tmp done rm -rf "${TMPDIR}" From d40e6da679f0e90672685184d8a9ac549c47d009 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Fri, 12 Jul 2019 23:38:24 +0200 Subject: [PATCH 5/5] update_binary-addons: fix PKG_REV bump for unofficial addons Signed-off-by: Matthias Reichl --- tools/mkpkg/update_binary-addons | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/mkpkg/update_binary-addons b/tools/mkpkg/update_binary-addons index 59f50fee56..31086704ef 100755 --- a/tools/mkpkg/update_binary-addons +++ b/tools/mkpkg/update_binary-addons @@ -158,6 +158,7 @@ for ADDON in $(ls -1 "${ROOT}/packages/mediacenter/kodi-binary-addons"); do check_package_excluded "${ADDON}" "${EXCLUDED_PACKAGES}" && continue + ADDON_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${ADDON}/" # Obtain git url - ignore if not a suitable repo GIT_DIR="${ADDON}.git" GIT_REPO="$(geturl "${ADDON}")" || continue @@ -167,9 +168,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_in_branch ${ADDON}.git HEAD) || continue echo "Resolving hash for ${ADDON}: HEAD => ${RESOLVED_HASH}" - if update_pkg "${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON" ${ADDON} ${RESOLVED_HASH}; then + if update_pkg "${ADDON_PATH}" "${ADDON}" "${RESOLVED_HASH}"; then # always bump PKG_REV when updating untagged addons - bump_pkg_rev "${ROOT}/packages/mediacenter/kodi-binary-addons/$ADDON" ${ADDON} + bump_pkg_rev "${ADDON_PATH}" "${ADDON}" + else + [ "${BUMP_PKG_REV}" = "yes" ] && bump_pkg_rev "${ADDON_PATH}" "${ADDON}" fi if [ "${KEEP_GIT_DIRS}" != "yes" ]; then