[pacman-dev] [WIP] [PATCH] libmakepkg/lint_pkgbuild: lint depends/etc. as if they are pkgname
Eli Schwartz
eschwartz at archlinux.org
Thu Mar 22 12:15:23 UTC 2018
depends, provides, conflicts, replaces, and other variables that are
meant to contain package names, are now checked to ensure they contain
only characters that would equate to a valid pkgname.
TODO: implement for makedepends/optdepends
Signed-off-by: Eli Schwartz <eschwartz at archlinux.org>
---
quick hack that seems to work okay.
I have not yet implemented provides=('foo=1') or
optdepends=('bar: description') but this seems to work in concept.
scripts/libmakepkg/lint_pkgbuild/pkgbase.sh.in | 19 ++------
scripts/libmakepkg/lint_pkgbuild/pkgname.sh.in | 66 +++++++++++++++++++++-----
2 files changed, 58 insertions(+), 27 deletions(-)
diff --git a/scripts/libmakepkg/lint_pkgbuild/pkgbase.sh.in b/scripts/libmakepkg/lint_pkgbuild/pkgbase.sh.in
index b2f7af04..9e77b50b 100644
--- a/scripts/libmakepkg/lint_pkgbuild/pkgbase.sh.in
+++ b/scripts/libmakepkg/lint_pkgbuild/pkgbase.sh.in
@@ -23,6 +23,7 @@ LIBMAKEPKG_LINT_PKGBUILD_PKGBASE_SH=1
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+source "$LIBRARY/lint_pkgbuild/pkgname.sh"
source "$LIBRARY/util/message.sh"
@@ -30,21 +31,9 @@ lint_pkgbuild_functions+=('lint_pkgbase')
lint_pkgbase() {
- local ret=0
-
- if [[ ${pkgbase:0:1} = "-" ]]; then
- error "$(gettext "%s is not allowed to start with a hyphen.")" "pkgname"
- return 1
- fi
- if [[ ${pkgbase:0:1} = "." ]]; then
- error "$(gettext "%s is not allowed to start with a dot.")" "pkgbase"
- ret=1
- fi
- if [[ $pkgbase = *[^[:alnum:]+_. at -]* ]]; then
- error "$(gettext "%s contains invalid characters: '%s'")" \
- 'pkgbase' "${i//[[:alnum:]+_. at -]}"
- ret=1
+ if [[ -z $pkgbase ]]; then
+ return 0
fi
- return $ret
+ lint_pkg_names "pkgbase" "$pkgbase"
}
diff --git a/scripts/libmakepkg/lint_pkgbuild/pkgname.sh.in b/scripts/libmakepkg/lint_pkgbuild/pkgname.sh.in
index 4024253e..7d4104ce 100644
--- a/scripts/libmakepkg/lint_pkgbuild/pkgname.sh.in
+++ b/scripts/libmakepkg/lint_pkgbuild/pkgname.sh.in
@@ -26,37 +26,79 @@ LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
source "$LIBRARY/util/message.sh"
-lint_pkgbuild_functions+=('lint_pkgname')
+lint_pkgbuild_functions+=('lint_pkgname' 'lint_pkgname_like')
-lint_pkgname() {
- local ret=0 i
+lint_pkg_names() {
+ local type=$1 name=$2 ret=0 i
- if [[ -z ${pkgname[@]} ]]; then
- error "$(gettext "%s is not allowed to be empty.")" "pkgname"
- return 1
- fi
- for i in "${pkgname[@]}"; do
+ for i in "${name[@]}"; do
if [[ -z $i ]]; then
- error "$(gettext "%s is not allowed to be empty.")" "pkgname"
+ error "$(gettext "%s is not allowed to be empty.")" "$type"
ret=1
continue
fi
if [[ ${i:0:1} = "-" ]]; then
- error "$(gettext "%s is not allowed to start with a hyphen.")" "pkgname"
+ error "$(gettext "%s is not allowed to start with a hyphen.")" "$type"
ret=1
fi
if [[ ${i:0:1} = "." ]]; then
- error "$(gettext "%s is not allowed to start with a dot.")" "pkgname"
+ error "$(gettext "%s is not allowed to start with a dot.")" "$type"
ret=1
fi
if [[ $i = *[^[:alnum:]+_. at -]* ]]; then
error "$(gettext "%s contains invalid characters: '%s'")" \
- 'pkgname' "${i//[[:alnum:]+_. at -]}"
+ "$type" "${i//[[:alnum:]+_. at -]}"
ret=1
fi
done
return $ret
}
+
+
+lint_pkgname_like() {
+ local a list name type ret=0
+
+ for type in conflicts depends makedepends optdepends provides replaces; do
+ local pkgname_like_list=()
+ if extract_global_variable "$type" 1 list; then
+ pkgname_like_list=("${list[@]}")
+ fi
+ for a in "${arch[@]}"; do
+ if extract_global_variable "${type}_$a" 1 list; then
+ pkgname_like_list+=("${list[@]}")
+ fi
+ done
+
+ for name in "${pkgname[@]}"; do
+ if extract_function_variable "package_$name" "$type" 1 list; then
+ pkgname_like_list+=("${list[@]}")
+ fi
+
+ for a in "${arch[@]}"; do
+ if extract_function_variable "package_$name" "${type}_$a" 1 list; then
+ pkgname_like_list+=("${list[@]}")
+ fi
+ done
+ done
+
+ if (( "${#pkgname_like_list[@]}" > 0 )); then
+ lint_pkg_names "$type" "${pkgname_like_list[@]}" || ret=1
+ fi
+ done
+
+ return $ret
+}
+
+lint_pkgname() {
+ local ret=0
+
+ if [[ -z ${pkgname[@]} ]]; then
+ error "$(gettext "%s is not allowed to be empty.")" "pkgname"
+ ret=1
+ else
+ lint_pkg_names "pkgname" "${pkgname[@]}" || ret=1
+ fi
+}
--
2.16.2
More information about the pacman-dev
mailing list