[pacman-dev] [PATCH] makepkg: more bash-3.2 compatibility
Adding the "|| true" to the subshell prevents bash-3.2 setting off the error_trap but requires changing the if statement. Signed-off-by: Allan McRae <allan@archlinux.org> --- scripts/makepkg.sh.in | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 13415fb..001178a 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -507,8 +507,8 @@ download_sources() { local netfile for netfile in "${source[@]}"; do - local file - if file=$(get_filepath "$netfile"); then + local file=$(get_filepath "$netfile" || true) + if [[ -n "$file" ]]; then msg2 "$(gettext "Found %s")" "${file##*/}" ln -sf "$file" "$srcdir/" continue -- 1.7.4
On Sat, Feb 05, 2011 at 10:26:20AM +1000, Allan McRae wrote:
Adding the "|| true" to the subshell prevents bash-3.2 setting off the error_trap but requires changing the if statement.
Signed-off-by: Allan McRae <allan@archlinux.org> --- scripts/makepkg.sh.in | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 13415fb..001178a 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -507,8 +507,8 @@ download_sources() {
local netfile for netfile in "${source[@]}"; do - local file - if file=$(get_filepath "$netfile"); then + local file=$(get_filepath "$netfile" || true) + if [[ -n "$file" ]]; then msg2 "$(gettext "Found %s")" "${file##*/}" ln -sf "$file" "$srcdir/" continue -- 1.7.4
I don't agree with this. The local keyword will actually mask the return value of the command substitution and you will always return without error. It's therefore sufficient to do: local file=$(get_filepath "$netfile") if [[ -n $file ]]; then ... This also applies to any variable defined via the 'declare' builtin. dave
On 05/02/11 11:02, Dave Reisner wrote:
On Sat, Feb 05, 2011 at 10:26:20AM +1000, Allan McRae wrote:
Adding the "|| true" to the subshell prevents bash-3.2 setting off the error_trap but requires changing the if statement.
Signed-off-by: Allan McRae<allan@archlinux.org> --- scripts/makepkg.sh.in | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 13415fb..001178a 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -507,8 +507,8 @@ download_sources() {
local netfile for netfile in "${source[@]}"; do - local file - if file=$(get_filepath "$netfile"); then + local file=$(get_filepath "$netfile" || true) + if [[ -n "$file" ]]; then msg2 "$(gettext "Found %s")" "${file##*/}" ln -sf "$file" "$srcdir/" continue -- 1.7.4
I don't agree with this. The local keyword will actually mask the return value of the command substitution and you will always return without error. It's therefore sufficient to do:
local file=$(get_filepath "$netfile") if [[ -n $file ]]; then ...
This also applies to any variable defined via the 'declare' builtin.
Not in bash-3.2... allan@mugen /var/abs/local/tmp
makepkg -gc ==> Retrieving Sources... ==> ERROR: An unknown error has occurred. Exiting... -> Downloading abs-2.4.2.tar.gz... --2011-02-05 11:53:38-- ftp://ftp.archlinux.org/other/abs/abs-2.4.2.tar.gz
Allan
On Sat, Feb 05, 2011 at 11:54:04AM +1000, Allan McRae wrote:
On 05/02/11 11:02, Dave Reisner wrote:
On Sat, Feb 05, 2011 at 10:26:20AM +1000, Allan McRae wrote:
Adding the "|| true" to the subshell prevents bash-3.2 setting off the error_trap but requires changing the if statement.
Signed-off-by: Allan McRae<allan@archlinux.org> --- scripts/makepkg.sh.in | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 13415fb..001178a 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -507,8 +507,8 @@ download_sources() {
local netfile for netfile in "${source[@]}"; do - local file - if file=$(get_filepath "$netfile"); then + local file=$(get_filepath "$netfile" || true) + if [[ -n "$file" ]]; then msg2 "$(gettext "Found %s")" "${file##*/}" ln -sf "$file" "$srcdir/" continue -- 1.7.4
I don't agree with this. The local keyword will actually mask the return value of the command substitution and you will always return without error. It's therefore sufficient to do:
local file=$(get_filepath "$netfile") if [[ -n $file ]]; then ...
This also applies to any variable defined via the 'declare' builtin.
Not in bash-3.2...
allan@mugen /var/abs/local/tmp
makepkg -gc ==> Retrieving Sources... ==> ERROR: An unknown error has occurred. Exiting... -> Downloading abs-2.4.2.tar.gz... --2011-02-05 11:53:38-- ftp://ftp.archlinux.org/other/abs/abs-2.4.2.tar.gz
Allan
Something else is foul, then. -----8<------------------ #!/bin/bash3 -e badfun() { local foo=$(asdlkfjasdf) echo $? } badfunc ------------------>8----- prints the error and echos 0. d
On 05/02/11 12:15, Dave Reisner wrote:
On Sat, Feb 05, 2011 at 11:54:04AM +1000, Allan McRae wrote:
On 05/02/11 11:02, Dave Reisner wrote:
On Sat, Feb 05, 2011 at 10:26:20AM +1000, Allan McRae wrote:
Adding the "|| true" to the subshell prevents bash-3.2 setting off the error_trap but requires changing the if statement.
Signed-off-by: Allan McRae<allan@archlinux.org> --- scripts/makepkg.sh.in | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 13415fb..001178a 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -507,8 +507,8 @@ download_sources() {
local netfile for netfile in "${source[@]}"; do - local file - if file=$(get_filepath "$netfile"); then + local file=$(get_filepath "$netfile" || true) + if [[ -n "$file" ]]; then msg2 "$(gettext "Found %s")" "${file##*/}" ln -sf "$file" "$srcdir/" continue -- 1.7.4
I don't agree with this. The local keyword will actually mask the return value of the command substitution and you will always return without error. It's therefore sufficient to do:
local file=$(get_filepath "$netfile") if [[ -n $file ]]; then ...
This also applies to any variable defined via the 'declare' builtin.
Not in bash-3.2...
allan@mugen /var/abs/local/tmp
makepkg -gc ==> Retrieving Sources... ==> ERROR: An unknown error has occurred. Exiting... -> Downloading abs-2.4.2.tar.gz... --2011-02-05 11:53:38-- ftp://ftp.archlinux.org/other/abs/abs-2.4.2.tar.gz
Allan
Something else is foul, then.
-----8<------------------ #!/bin/bash3 -e
badfun() { local foo=$(asdlkfjasdf) echo $? }
badfunc ------------------>8-----
prints the error and echos 0.
d
It may well be a bug in bash-3.2. Either way, this "fixes" the issue. I'm open to suggestions for a better fix. Allan
On Sat, Feb 05, 2011 at 12:55:38PM +1000, Allan McRae wrote:
It may well be a bug in bash-3.2. Either way, this "fixes" the issue. I'm open to suggestions for a better fix.
Allan
Wild. This is as good as any solution I can think of. set -e is somewhat frowned upon for regular usage, so I guess this is the price we way. dave
participants (2)
-
Allan McRae
-
Dave Reisner