[arch-projects] [devtools][PATCH] archbuild: exec makechrootpkg to preserve exit value

Lukas Fleischer archlinux at cryptocrack.de
Sun Dec 4 12:38:39 EST 2011


On Sun, Dec 04, 2011 at 12:09:16PM -0500, Dave Reisner wrote:
> This fixes a compound command such as the one below from continuing even
> if the first fails.
> 
>   extra-x86_64-build && extra-i686-build
> 
> The problem is that 'cleanup 0' is triggered in archbuild even after an
> unsucessful call to makechrootpkg. Since both archbuild and
> makechrootpkg share the exact same cleanup function (from lib/common),
> we simply force the shell to exit with the true return value by exec'ing
> the call to makechrootpkg.
> 
> Signed-off-by: Dave Reisner <dreisner at archlinux.org>
> ---
> v2 of the earlier patch.
> 
>  archbuild.in |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 

The first version looked better to me :)

cleanup() might do different things, depending on the script that
invokes it (it checks for local variables and enters different branches,
depending on their values). There might be a script like find-libdeps
that creates a huge temporary directory and sets a flag that is checked
in cleanup(). If that script executes another script at the very end and
we do not ensure we call cleanup() in both the script and its child, the
temporary directory might not be removed properly.

If we want cleanup() to be called only once, we'd have to fix a dozen of
other places as well. Having each script call cleanup() is the right way
to do it.

> diff --git a/archbuild.in b/archbuild.in
> index 502654c..4e16d1f 100644
> --- a/archbuild.in
> +++ b/archbuild.in
> @@ -83,4 +83,4 @@ else
>  fi
>  
>  msg "Building in chroot for [${repo}] (${arch})..."
> -setarch "${arch}" makechrootpkg -c -n -r "${chroots}/${repo}-${arch}"
> +exec setarch "${arch}" makechrootpkg -c -n -r "${chroots}/${repo}-${arch}"
> -- 
> 1.7.8


More information about the arch-projects mailing list