Skip to content
  • Eli Schwartz's avatar
    makepkg: correctly handle missing download clients · 381e1137
    Eli Schwartz authored and Allan McRae's avatar Allan McRae committed
    This was broken in commit 882e707e
    
    ,
    which changed 'plain()' messages to go to stdout, which was then
    captured as the download client in question: cmdline=("Aborting...").
    
    The result was a very confusing error message e.g.
    
    /usr/share/makepkg/source/file.sh: line 72: $'\E[1m': command not found
    
    or with makepkg --nocolor:
    
    /usr/share/makepkg/source/file.sh: line 72: Aborting...: command not found
    
    The problem here is that we checked to see if an asynchronous subshell,
    in our case <(...), failed, by checking if its captured stdout is
    non-empty. Which is terrible, and also a limitation of old bash. But
    bash 4.4 can use wait $! to retrieve the return value of an asynchronous
    subshell. Now we target that as our minimum, we can sanely handle errors
    in such functions.
    
    Losing error messages on stdout by capturing them in a variable instead
    of printing them, continues to be a problem, but this will be fixed
    systematically in a later commit.
    
    Signed-off-by: default avatarEli Schwartz <eschwartz@archlinux.org>
    Signed-off-by: default avatarAllan McRae <allan@archlinux.org>
    381e1137