Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/scripts/libmakepkg/lint_pkgbuild/provides.sh.in
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2018-05-10 23:23:58 -0400
committerAllan McRae <allan@archlinux.org>2018-05-12 21:10:44 +1000
commit2c94118dc168f16231e38a84c0b569b5b0006fd9 (patch)
tree7f1f7c850ced3a7f83749340dcd418924188b1ce /scripts/libmakepkg/lint_pkgbuild/provides.sh.in
parentfa8b99189e9f2035a81c8ff8275894b61dc0bce7 (diff)
libmakepkg/lint_pkgbuild: fix regression in linting depends=(foo=$epoch:$pkgver-$pkgrel)
In commit 91b72cc386ca03241791748da5da2b150c724ace support was added for linting depends/etc. to ensure they contain only valid dependency specifiers. However it did not properly take into account the possibility of dependencies linked to a specific pkgrel or epoch, which promptly failed to build because "-" and ":" is not allowed in a pkgver. pkgrel is something supported by pacman and useful for e.g. split packages which cannot be mismatched even if the pkgver is the same. Fix by removing an optional suffixed "-$decimal" when checking for a valid pkgver. epoch is kind of difficult to do without :D so likewise fix by removing an optional prefixed "$integer:" Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'scripts/libmakepkg/lint_pkgbuild/provides.sh.in')
-rw-r--r--scripts/libmakepkg/lint_pkgbuild/provides.sh.in14
1 files changed, 11 insertions, 3 deletions
diff --git a/scripts/libmakepkg/lint_pkgbuild/provides.sh.in b/scripts/libmakepkg/lint_pkgbuild/provides.sh.in
index 7500a88a..102be08e 100644
--- a/scripts/libmakepkg/lint_pkgbuild/provides.sh.in
+++ b/scripts/libmakepkg/lint_pkgbuild/provides.sh.in
@@ -37,19 +37,27 @@ lint_provides() {
get_pkgbuild_all_split_attributes provides provides_list
+ # this function requires extglob - save current status to restore later
+ local shellopts=$(shopt -p extglob)
+ shopt -s extglob
+
for provide in "${provides_list[@]}"; do
if [[ $provide == *['<>']* ]]; then
error "$(gettext "%s array cannot contain comparison (< or >) operators.")" "provides"
ret=1
continue
fi
- name=${provide%%=*}
- ver=${provide#*=}
+ name=${provide%=*}
+ # remove optional epoch in version specifier
+ ver=${provide##$name=?(+([0-9]):)}
lint_one_pkgname provides "$name" || ret=1
if [[ $ver != $provide ]]; then
- check_pkgver "$ver" provides || ret=1
+ # remove optional pkgrel in version specifier
+ check_pkgver "${ver%-+([0-9])?(.+([0-9]))}" provides || ret=1
fi
done
+ eval "$shellopts"
+
return $ret
}