libmakepkg/lint_pkgbuild: fix regression in linting depends=(foo=$epoch:$pkgver-$pkgrel)
In commit 91b72cc386
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>
This commit is contained in:
parent
fa8b99189e
commit
2c94118dc1
6 changed files with 27 additions and 11 deletions
0
scripts/libmakepkg/lint_pkgbuild/3
Normal file
0
scripts/libmakepkg/lint_pkgbuild/3
Normal file
|
@ -43,10 +43,12 @@ lint_checkdepends() {
|
||||||
|
|
||||||
for checkdepend in "${checkdepends_list[@]}"; do
|
for checkdepend in "${checkdepends_list[@]}"; do
|
||||||
name=${checkdepend%%@(<|>|=|>=|<=)*}
|
name=${checkdepend%%@(<|>|=|>=|<=)*}
|
||||||
ver=${checkdepend#*@(<|>|=|>=|<=)}
|
# remove optional epoch in version specifier
|
||||||
|
ver=${checkdepend##$name@(<|>|=|>=|<=)?(+([0-9]):)}
|
||||||
lint_one_pkgname checkdepends "$name" || ret=1
|
lint_one_pkgname checkdepends "$name" || ret=1
|
||||||
if [[ $ver != $checkdepend ]]; then
|
if [[ $ver != $checkdepend ]]; then
|
||||||
check_pkgver "$ver" checkdepends || ret=1
|
# remove optional pkgrel in version specifier
|
||||||
|
check_pkgver "${ver%-+([0-9])?(.+([0-9]))}" checkdepends || ret=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -43,10 +43,12 @@ lint_conflicts() {
|
||||||
|
|
||||||
for conflict in "${conflicts_list[@]}"; do
|
for conflict in "${conflicts_list[@]}"; do
|
||||||
name=${conflict%%@(<|>|=|>=|<=)*}
|
name=${conflict%%@(<|>|=|>=|<=)*}
|
||||||
ver=${conflict#*@(<|>|=|>=|<=)}
|
# remove optional epoch in version specifier
|
||||||
|
ver=${conflict##$name@(<|>|=|>=|<=)?(+([0-9]):)}
|
||||||
lint_one_pkgname conflicts "$name" || ret=1
|
lint_one_pkgname conflicts "$name" || ret=1
|
||||||
if [[ $ver != $conflict ]]; then
|
if [[ $ver != $conflict ]]; then
|
||||||
check_pkgver "$ver" conflicts || ret=1
|
# remove optional pkgrel in version specifier
|
||||||
|
check_pkgver "${ver%-+([0-9])?(.+([0-9]))}" conflicts || ret=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -43,10 +43,12 @@ lint_depends() {
|
||||||
|
|
||||||
for depend in "${depends_list[@]}"; do
|
for depend in "${depends_list[@]}"; do
|
||||||
name=${depend%%@(<|>|=|>=|<=)*}
|
name=${depend%%@(<|>|=|>=|<=)*}
|
||||||
ver=${depend#*@(<|>|=|>=|<=)}
|
# remove optional epoch in version specifier
|
||||||
|
ver=${depend##$name@(<|>|=|>=|<=)?(+([0-9]):)}
|
||||||
lint_one_pkgname depends "$name" || ret=1
|
lint_one_pkgname depends "$name" || ret=1
|
||||||
if [[ $ver != $depend ]]; then
|
if [[ $ver != $depend ]]; then
|
||||||
check_pkgver "$ver" depends || ret=1
|
# remove optional pkgrel in version specifier
|
||||||
|
check_pkgver "${ver%-+([0-9])?(.+([0-9]))}" depends || ret=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -43,10 +43,12 @@ lint_makedepends() {
|
||||||
|
|
||||||
for makedepend in "${makedepends_list[@]}"; do
|
for makedepend in "${makedepends_list[@]}"; do
|
||||||
name=${makedepend%%@(<|>|=|>=|<=)*}
|
name=${makedepend%%@(<|>|=|>=|<=)*}
|
||||||
ver=${makedepend#*@(<|>|=|>=|<=)}
|
# remove optional epoch in version specifier
|
||||||
|
ver=${makedepend##$name@(<|>|=|>=|<=)?(+([0-9]):)}
|
||||||
lint_one_pkgname makedepends "$name" || ret=1
|
lint_one_pkgname makedepends "$name" || ret=1
|
||||||
if [[ $ver != $makedepend ]]; then
|
if [[ $ver != $makedepend ]]; then
|
||||||
check_pkgver "$ver" makedepends || ret=1
|
# remove optional pkgrel in version specifier
|
||||||
|
check_pkgver "${ver%-+([0-9])?(.+([0-9]))}" makedepends || ret=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -37,19 +37,27 @@ lint_provides() {
|
||||||
|
|
||||||
get_pkgbuild_all_split_attributes provides provides_list
|
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
|
for provide in "${provides_list[@]}"; do
|
||||||
if [[ $provide == *['<>']* ]]; then
|
if [[ $provide == *['<>']* ]]; then
|
||||||
error "$(gettext "%s array cannot contain comparison (< or >) operators.")" "provides"
|
error "$(gettext "%s array cannot contain comparison (< or >) operators.")" "provides"
|
||||||
ret=1
|
ret=1
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
name=${provide%%=*}
|
name=${provide%=*}
|
||||||
ver=${provide#*=}
|
# remove optional epoch in version specifier
|
||||||
|
ver=${provide##$name=?(+([0-9]):)}
|
||||||
lint_one_pkgname provides "$name" || ret=1
|
lint_one_pkgname provides "$name" || ret=1
|
||||||
if [[ $ver != $provide ]]; then
|
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
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
eval "$shellopts"
|
||||||
|
|
||||||
return $ret
|
return $ret
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue