Compare commits

..

2 Commits

Author SHA1 Message Date
Levente Polyak
6471027b68 Merge branch 'feature/version-check-combiner' into 'master'
feat(version): support combiner source for version check commands

Closes #216

See merge request archlinux/devtools!297
2025-07-27 00:35:58 +02:00
Levente Polyak
7bccfc7d99 feat(version): support combiner source for version check commands
This allows more flexibility and chaining by being able to define
multiple sources per pkgbase and chain them together to achieve the
final result. This may also be helpful to combine multiple from/to
patterns into a chain to achieve the final pkgver to compare against.

To utilize the combiner source, the `pkgbase` section must be declared
as the combiner source. Additionally, individual sections should be
added using a quoted table key consisting of the `pkgbase` followed by
the stage name, separated by double colons.
For example: `["sudo:stage1"]`.

Fixes #216

Component: pkgctl version check
Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2025-01-25 17:17:27 +01:00
10 changed files with 10 additions and 39 deletions

View File

@@ -150,7 +150,6 @@ _pkgctl_cmds=(
db db
diff diff
issue issue
license
release release
repo repo
search search

View File

@@ -3,7 +3,7 @@ pkgctl-auth(1)
Name Name
---- ----
pkgctl-auth - Authenticate with services like GitLab. pkgctl-auth - Authenticate with serivces like GitLab.
Synopsis Synopsis
-------- --------

View File

@@ -47,9 +47,6 @@ combiner source. Additionally, individual sections should be added using a
quoted table key consisting of the `pkgbase` followed by the stage name, quoted table key consisting of the `pkgbase` followed by the stage name,
separated by double colons. For example: `["sudo:stage1"]`. separated by double colons. For example: `["sudo:stage1"]`.
This allows to chain different sources together into one result, or allow
multi stage transformation of our source via multiple regex.
Options Options
------- -------

View File

@@ -49,9 +49,6 @@ pkgctl diff::
pkgctl issue:: pkgctl issue::
Work with GitLab packaging issues Work with GitLab packaging issues
pkgctl license::
Check and manage package licenses
pkgctl release:: pkgctl release::
Release step to commit, tag and upload build artifacts Release step to commit, tag and upload build artifacts
@@ -73,7 +70,6 @@ pkgctl-build(1)
pkgctl-db(1) pkgctl-db(1)
pkgctl-diff(1) pkgctl-diff(1)
pkgctl-issue(1) pkgctl-issue(1)
pkgctl-license(1)
pkgctl-release(1) pkgctl-release(1)
pkgctl-repo(1) pkgctl-repo(1)
pkgctl-search(1) pkgctl-search(1)

View File

@@ -155,7 +155,7 @@ if (( ${#needsversioning[*]} )); then
if [[ ! -f "${file}" ]]; then if [[ ! -f "${file}" ]]; then
continue continue
fi fi
if ! git ls-files --error-unmatch "$file" >/dev/null; then if ! git ls-files --error-unmatch "$file"; then
die "%s is not under version control" "$file" die "%s is not under version control" "$file"
fi fi
done done

View File

@@ -54,8 +54,7 @@ export RSYNC_OPTS=(
--human-readable --human-readable
--progress --progress
--partial --partial
# suffix the partial dir with the PID in order to avoid clashes --partial-dir=.partial
--partial-dir=.partial.$$
--delay-updates --delay-updates
) )
@@ -442,10 +441,3 @@ relative_date_unit() {
done done
printf "1 second" printf "1 second"
} }
# escapes regex metacharacters in a given string
regex_escape() {
# shellcheck disable=SC2001,SC2016
sed 's/[\^.\[$()|*+?{\\]/\\&/g' <<<"$1"
}

View File

@@ -94,19 +94,19 @@ pkgctl_license_check() {
pushd "${path}" >/dev/null pushd "${path}" >/dev/null
if [[ ! -f PKGBUILD ]]; then if [[ ! -f PKGBUILD ]]; then
msg_error "${BOLD}${path}:${ALL_OFF} no PKGBUILD found" msg_error "${BOLD}${pkgbase}:${ALL_OFF} no PKGBUILD found"
return 1 return 1
fi fi
if [[ ! -f .SRCINFO ]]; then # reset common PKGBUILD variables
msg_error "${BOLD}${path}:${ALL_OFF} no .SRCINFO found" unset pkgbase
return 1
fi
if ! pkgbase=$(grep --max-count=1 --extended-regexp "pkgbase = (.+)" .SRCINFO | awk '{print $3}'); then # shellcheck source=contrib/makepkg/PKGBUILD.proto
msg_error "${BOLD}${path}:${ALL_OFF} pkgbase not found in .SRCINFO" if ! . ./PKGBUILD; then
msg_error "${BOLD}${pkgbase}:${ALL_OFF} failed to source PKGBUILD"
return 1 return 1
fi fi
pkgbase=${pkgbase:-$pkgname}
if [[ ! -e LICENSE ]]; then if [[ ! -e LICENSE ]]; then
msg_error "${BOLD}${pkgbase}:${ALL_OFF} is missing the LICENSE file" msg_error "${BOLD}${pkgbase}:${ALL_OFF} is missing the LICENSE file"

View File

@@ -188,13 +188,10 @@ path = [
"README.md", "README.md",
"keys/**", "keys/**",
".SRCINFO", ".SRCINFO",
".gitignore",
".nvchecker.toml", ".nvchecker.toml",
"*.install", "*.install",
"*.sysusers", "*.sysusers",
"*sysusers.conf",
"*.tmpfiles", "*.tmpfiles",
"*tmpfiles.conf",
"*.logrotate", "*.logrotate",
"*.pam", "*.pam",
"*.service", "*.service",

View File

@@ -6,8 +6,6 @@
DEVTOOLS_INCLUDE_UTIL_PKGBUILD_SH=1 DEVTOOLS_INCLUDE_UTIL_PKGBUILD_SH=1
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@} _DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
# shellcheck source=src/lib/common.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
# shellcheck source=src/lib/util/makepkg.sh # shellcheck source=src/lib/util/makepkg.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/makepkg.sh source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/makepkg.sh
@@ -23,8 +21,6 @@ pkgbuild_set_pkgver() {
local new_pkgver=$1 local new_pkgver=$1
local pkgver=${pkgver} local pkgver=${pkgver}
pkgver="$(regex_escape "${pkgver}")"
if [[ $(type -t pkgver) == function ]]; then if [[ $(type -t pkgver) == function ]]; then
# TODO: check if die or warn, if we provide _commit _gitcommit setter maybe? # TODO: check if die or warn, if we provide _commit _gitcommit setter maybe?
warning 'setting pkgver variable has no effect if the PKGBUILD has a pkgver() function' warning 'setting pkgver variable has no effect if the PKGBUILD has a pkgver() function'

View File

@@ -355,12 +355,6 @@ nvchecker_check_config() {
printf "non-pkgbase section not supported in %s: %s" "${config}" "${property}" printf "non-pkgbase section not supported in %s: %s" "${config}" "${property}"
return 1 return 1
fi fi
# check if the config is using the 'cmd' source
if grep --extended-regexp --quiet '^\s*source\s*=\s*["'\'']cmd["'\''].*' "${config}"; then
printf "using the 'cmd' source in %s is disallowed" "${config}"
return 1
fi
} }
nvchecker_check_error() { nvchecker_check_error() {