108 lines
2.2 KiB
Bash
108 lines
2.2 KiB
Bash
#!/bin/bash
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
[[ -z ${DEVTOOLS_INCLUDE_VERSION_CHECK_SH:-} ]] || return 0
|
|
DEVTOOLS_INCLUDE_VERSION_CHECK_SH=1
|
|
|
|
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
|
|
# shellcheck source=src/lib/common.sh
|
|
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
|
|
|
|
source /usr/share/makepkg/util/message.sh
|
|
|
|
set -e
|
|
|
|
pkgctl_version_check_usage() {
|
|
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
|
|
cat <<- _EOF_
|
|
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
|
|
|
|
Uses nvchecker, a .nvchecker.toml file and the current PKGBUILD
|
|
pkgver to check if there is a newer package version available.
|
|
|
|
The current working directory is used if no PKGBASE is specified.
|
|
|
|
OPTIONS
|
|
-h, --help Show this help text
|
|
|
|
EXAMPLES
|
|
$ ${COMMAND} neovim vim
|
|
_EOF_
|
|
}
|
|
|
|
pkgctl_version_check() {
|
|
local path
|
|
local pkgbases=()
|
|
local path pkgbase upstream_version
|
|
|
|
|
|
while (( $# )); do
|
|
case $1 in
|
|
-h|--help)
|
|
pkgctl_version_check_usage
|
|
exit 0
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
-*)
|
|
die "invalid argument: %s" "$1"
|
|
;;
|
|
*)
|
|
pkgbases=("$@")
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if ! command -v nvchecker &>/dev/null; then
|
|
die "The \"$_DEVTOOLS_COMMAND\" command requires 'nvchecker'"
|
|
fi
|
|
|
|
# Check if used without pkgbases in a packaging directory
|
|
if (( ${#pkgbases[@]} == 0 )); then
|
|
if [[ -f PKGBUILD ]]; then
|
|
pkgbases=(".")
|
|
else
|
|
pkgctl_version_check_usage
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
for path in "${pkgbases[@]}"; do
|
|
pushd "${path}" >/dev/null
|
|
|
|
if [[ ! -f "PKGBUILD" ]]; then
|
|
die "No PKGBUILD found for ${path}"
|
|
fi
|
|
|
|
# shellcheck disable=SC2119
|
|
upstream_version=$(get_upstream_version)
|
|
|
|
# TODO: parse .SRCINFO file
|
|
# shellcheck source=contrib/makepkg/PKGBUILD.proto
|
|
. ./PKGBUILD
|
|
pkgbase=${pkgbase:-$pkgname}
|
|
|
|
if (( $(vercmp "${upstream_version}" "${pkgver}") > 0 )); then
|
|
msg2 "New ${pkgbase} version ${upstream_version} is available upstream"
|
|
fi
|
|
|
|
popd >/dev/null
|
|
done
|
|
}
|
|
|
|
get_upstream_version() {
|
|
local config=${1:-.nvchecker.toml}
|
|
local upstream_version
|
|
|
|
if [[ ! -f $config ]]; then
|
|
die "No $config found"
|
|
fi
|
|
|
|
upstream_version=$(nvchecker -c "$config" --logger json | jq --raw-output 'select( .version ) | .version')
|
|
printf "%s" "$upstream_version"
|
|
}
|