[arch-projects] [devtools] [PATCH 1/4] finddeps: Proper quoting, use double brackets
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de> --- finddeps | 28 +++++++++++----------------- 1 files changed, 11 insertions(+), 17 deletions(-) diff --git a/finddeps b/finddeps index ded7a93..0d59634 100755 --- a/finddeps +++ b/finddeps @@ -3,7 +3,10 @@ # finddeps - find packages that depend on a given depname # -if [ "$1" = '' ]; then +match=$1 +tld=$(pwd) + +if [[ -z $match ]]; then echo 'usage: finddeps <depname>' echo '' echo 'Find packages that depend on a given depname.' @@ -12,35 +15,26 @@ if [ "$1" = '' ]; then exit 0 fi -match=$1 -tld=$(pwd) - -for d in $(find . -type d); do - cd $d - if [ -f PKGBUILD ]; then +for d in "$(find . -type d)"; do + cd "$d" + if [[ -f PKGBUILD ]]; then unset pkgname depends makedepends . PKGBUILD for dep in "${depends[@]}"; do # lose the version comparator, if any depname=${dep%%[<>=]*} - if [ "$depname" = "$match" ]; then - echo "$d (depends)" - fi + [[ $depname = $match ]] && echo "$d (depends)" done for dep in "${makedepends[@]}"; do # lose the version comparator, if any depname=${dep%%[<>=]*} - if [ "$depname" = "$match" ]; then - echo "$d (makedepends)" - fi + [[ $depname = $match ]] && echo "$d (makedepends)" done for dep in "${optdepends[@]/:*}"; do # lose the version comaparator, if any depname=${dep%%[<>=]*} - if [ "$depname" = "$match" ]; then - echo "$d (optdepends)" - fi + [[ $depname = $match ]] && echo "$d (optdepends)" done fi - cd $tld + cd "$tld" done -- 1.7.7
Source the PKGBUILD using the correct path (relative to our base directory) instead of using cd(1) to switch to the ABS base directory first and to the package directory afterwards. This is very useful when trying to track errors, also: $ ~/src/devtools/finddeps libdaq ./community/snort (depends) PKGBUILD: line 17: ruby: command not found PKGBUILD: line 19: [: =: unary operator expected Versus: $ ~/src/devtools/finddeps libdaq ./community/snort (depends) ./community/ruby-pkgconfig/PKGBUILD: line 17: ruby: command not found ./community/lmms/PKGBUILD: line 19: [: =: unary operator expected Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de> --- finddeps | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-) diff --git a/finddeps b/finddeps index 0d59634..ec8cde4 100755 --- a/finddeps +++ b/finddeps @@ -4,7 +4,6 @@ # match=$1 -tld=$(pwd) if [[ -z $match ]]; then echo 'usage: finddeps <depname>' @@ -16,10 +15,9 @@ if [[ -z $match ]]; then fi for d in "$(find . -type d)"; do - cd "$d" - if [[ -f PKGBUILD ]]; then + if [[ -f "$d/PKGBUILD" ]]; then unset pkgname depends makedepends - . PKGBUILD + . "$d/PKGBUILD" for dep in "${depends[@]}"; do # lose the version comparator, if any depname=${dep%%[<>=]*} @@ -36,5 +34,4 @@ for d in "$(find . -type d)"; do [[ $depname = $match ]] && echo "$d (optdepends)" done fi - cd "$tld" done -- 1.7.7
Using parameter substitution might result in unpredictable behaviour when directories contain whitespaces here. The read shell builtin is the proper way to read single lines. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de> --- finddeps | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/finddeps b/finddeps index ec8cde4..3f4515b 100755 --- a/finddeps +++ b/finddeps @@ -14,7 +14,7 @@ if [[ -z $match ]]; then exit 0 fi -for d in "$(find . -type d)"; do +find . -type d | while read d; do if [[ -f "$d/PKGBUILD" ]]; then unset pkgname depends makedepends . "$d/PKGBUILD" -- 1.7.7
The optdepends array should be unset before sourcing the PKGBUILD to avoid dangling optional depends. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de> --- finddeps | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/finddeps b/finddeps index 3f4515b..4651fd9 100755 --- a/finddeps +++ b/finddeps @@ -16,7 +16,7 @@ fi find . -type d | while read d; do if [[ -f "$d/PKGBUILD" ]]; then - unset pkgname depends makedepends + unset pkgname depends makedepends optdepends . "$d/PKGBUILD" for dep in "${depends[@]}"; do # lose the version comparator, if any -- 1.7.7
participants (1)
-
Lukas Fleischer