bacman: use globbing to get local package db path
The original code- pkg_dir="$(echo $pac_db/$pkg_name-[0-9]*)" is problematic in several ways: - $pac_db and $pkg_name should be quoted, obviously. - It assumes pkgver always starts with an integer, while in fact it just can't contain ':' and '-'. Counterexample: the code breaks on lshw B.02.15-1. - It assumes there are no more than one directory matching the pattern. While this should be the case if everything works perfectly, it certainly relies on external conditions. Counterexample: if the local db contains two packages named foo and foo-3g, even if everything else is perfect, the code will match two directories. Don't make assumptions, use what is known. Signed-off-by: lolilolicon <lolilolicon@gmail.com>
This commit is contained in:
parent
4928f9edc3
commit
22abe27bfa
|
@ -93,8 +93,8 @@ pkg_dest="${PKGDEST:-$PWD}"
|
||||||
pkg_pkger=${PACKAGER:-'Unknown Packager'}
|
pkg_pkger=${PACKAGER:-'Unknown Packager'}
|
||||||
|
|
||||||
pkg_name="$1"
|
pkg_name="$1"
|
||||||
pkg_dir="$(echo $pac_db/$pkg_name-[0-9]*)"
|
pkg_dir=("$pac_db/$pkg_name"-+([^-])-+([0-9]))
|
||||||
pkg_namver="${pkg_dir##*/}"
|
pkg_namver=("${pkg_dir[@]##*/}")
|
||||||
|
|
||||||
#
|
#
|
||||||
# Checks everything is in place
|
# Checks everything is in place
|
||||||
|
@ -104,8 +104,16 @@ if [[ ! -d $pac_db ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if (( ${#pkg_dir[@]} != 1 )); then
|
||||||
|
printf "ERROR: %d entries for package %s found in pacman database\n" \
|
||||||
|
${#pkg_dir[@]} "${pkg_name}"
|
||||||
|
printf "%s\n" "${pkg_dir[@]}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ! -d $pkg_dir ]]; then
|
if [[ ! -d $pkg_dir ]]; then
|
||||||
echo "ERROR: package ${pkg_name} not found in pacman database"
|
printf "ERROR: package %s is found in pacman database,\n" "${pkg_name}"
|
||||||
|
printf " but \`%s' is not a directory\n" "${pkg_dir}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue