feat(upgrade): introduce the version upgrade subcommand
This subcommand applies the detected upstream version upgrades to a PKGBUILD. Component: pkgctl version upgrade Co-authored-by: Levente Polyak <anthraxx@archlinux.org> Signed-off-by: Christian Heusel <christian@heusel.eu>
This commit is contained in:
parent
313c5b4d32
commit
6054c869e1
|
@ -339,6 +339,7 @@ _pkgctl_repo_switch_opts() {
|
|||
|
||||
_pkgctl_version_cmds=(
|
||||
check
|
||||
upgrade
|
||||
)
|
||||
|
||||
_pkgctl_version_check_args=(
|
||||
|
@ -347,6 +348,12 @@ _pkgctl_version_check_args=(
|
|||
|
||||
_pkgctl_version_check_opts() { _filedir -d; }
|
||||
|
||||
_pkgctl_version_upgrade_args=(
|
||||
-h --help
|
||||
)
|
||||
|
||||
_pkgctl_version_upgrade_opts() { _filedir -d; }
|
||||
|
||||
_pkgctl_repo_web_args=(
|
||||
--print
|
||||
-h --help
|
||||
|
|
|
@ -288,6 +288,7 @@ _pkgctl_args=(
|
|||
_pkgctl_version_cmds=(
|
||||
"pkgctl version command"
|
||||
"check[Check if there is an new upstream version available]"
|
||||
"upgrade[Upgrade the PKGBUILD according to the latest available upstream version]"
|
||||
)
|
||||
|
||||
_pkgctl_version_check_args=(
|
||||
|
@ -295,6 +296,11 @@ _pkgctl_version_check_args=(
|
|||
'*:git_dir:_files -/'
|
||||
)
|
||||
|
||||
_pkgctl_version_upgrade_args=(
|
||||
'(-h --help)'{-h,--help}'[Display usage]'
|
||||
'*:git_dir:_files -/'
|
||||
)
|
||||
|
||||
_pkgctl_diff_args=("${_diffpkg_args[@]}")
|
||||
|
||||
_handle_subcommands() {
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
pkgctl-version-upgrade(1)
|
||||
=========================
|
||||
|
||||
Name
|
||||
----
|
||||
pkgctl-version-upgrade - Upgrade the PKGBUILD according to the latest available upstream version
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
pkgctl version upgrade [OPTIONS] [PKGBASE...]
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Upgrade the PKGBUILD according to the latest available upstream version.
|
||||
|
||||
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 a help text
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:nvchecker[1]
|
||||
|
||||
include::include/footer.asciidoc[]
|
|
@ -27,9 +27,13 @@ Subcommands
|
|||
pkgctl version check::
|
||||
Check if there is an new upstream version available
|
||||
|
||||
pkgctl version upgrade::
|
||||
Upgrade the PKGBUILD according to the latest available upstream version
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-version-check[1]
|
||||
linkman:pkgctl-version-upgrade[1]
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
|
|
@ -18,7 +18,8 @@ pkgctl_version_usage() {
|
|||
Package version related commands.
|
||||
|
||||
COMMANDS
|
||||
check Check if there is a newer version availble
|
||||
check Check if there is a newer version availble
|
||||
upgrade Upgrade the PKGBUILD according to the latest available upstream version
|
||||
|
||||
OPTIONS
|
||||
-h, --help Show this help text
|
||||
|
@ -48,6 +49,14 @@ pkgctl_version() {
|
|||
pkgctl_version_check "$@"
|
||||
exit 0
|
||||
;;
|
||||
upgrade)
|
||||
_DEVTOOLS_COMMAND+=" $1"
|
||||
shift
|
||||
# shellcheck source=src/lib/version/upgrade.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/version/upgrade.sh
|
||||
pkgctl_version_upgrade "$@"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
die "invalid argument: %s" "$1"
|
||||
;;
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
[[ -z ${DEVTOOLS_INCLUDE_VERSION_UPGRADE_SH:-} ]] || return 0
|
||||
DEVTOOLS_INCLUDE_VERSION_UPGRADE_SH=1
|
||||
|
||||
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
|
||||
# shellcheck source=src/lib/common.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
|
||||
# shellcheck source=src/lib/version/check.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/version/check.sh
|
||||
# shellcheck source=src/lib/util/pkgbuild.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/pkgbuild.sh
|
||||
|
||||
source /usr/share/makepkg/util/message.sh
|
||||
|
||||
set -e
|
||||
|
||||
pkgctl_version_upgrade_usage() {
|
||||
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
|
||||
cat <<- _EOF_
|
||||
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
|
||||
|
||||
Upgrade the PKGBUILD according to the latest available upstream version
|
||||
|
||||
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_upgrade() {
|
||||
local path upstream_version result
|
||||
local pkgbases=()
|
||||
|
||||
while (( $# )); do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
pkgctl_version_upgrade_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_upgrade_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
|
||||
|
||||
# reset common PKGBUILD variables
|
||||
unset pkgbase pkgname arch source pkgver pkgrel validpgpkeys
|
||||
# shellcheck source=contrib/makepkg/PKGBUILD.proto
|
||||
. ./PKGBUILD
|
||||
pkgbase=${pkgbase:-$pkgname}
|
||||
|
||||
if ! upstream_version=$(get_upstream_version); then
|
||||
die "Failed to get latest upstream version for %s" "${pkgbase}"
|
||||
fi
|
||||
|
||||
if ! result=$(vercmp "${upstream_version}" "${pkgver}"); then
|
||||
die "Failed to compare version %s against %s" "${upstream_version}" "${pkgver}"
|
||||
fi
|
||||
|
||||
if (( result > 0 )); then
|
||||
msg_success "${BOLD}${pkgbase}${ALL_OFF}: upgrading from version ${PURPLE}${pkgver}${ALL_OFF} to ${DARK_GREEN}${upstream_version}${ALL_OFF}"
|
||||
|
||||
pkgbuild_set_pkgver "${upstream_version}"
|
||||
pkgbuild_set_pkgrel 1
|
||||
fi
|
||||
|
||||
popd >/dev/null
|
||||
done
|
||||
}
|
Loading…
Reference in New Issue