[pacman-dev] [PATCH] makepkg: fix check for previously built packages with package splitting

Dan McGee dpmcgee at gmail.com
Wed Jul 1 18:55:39 EDT 2009


On Wed, Jul 1, 2009 at 2:36 AM, Allan McRae<allan at archlinux.org> wrote:
> Checks if some or all packages are built before overwriting/installing.
> Adds two new translation strings
>
> Signed-off-by: Allan McRae <allan at archlinux.org>
> ---
>  scripts/makepkg.sh.in |   41 ++++++++++++++++++++++++++++++++---------
>  1 files changed, 32 insertions(+), 9 deletions(-)
>
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 2bb7eb9..61ae037 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -1646,15 +1646,38 @@ if [ "${#pkgname[@]}" -gt "1" ]; then
>        SPLITPKG=1
>  fi
>
> -if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" \
> -     -a "$FORCE" -eq 0 -a "$SOURCEONLY" -eq 0 -a "$NOBUILD" -eq 0 ]; then
> -       if [ "$INSTALL" -eq 1 ]; then
> -               warning "$(gettext "A package has already been built, installing existing package...")"
> -               install_package
> -               exit $?
> -       else
> -               error "$(gettext "A package has already been built. (use -f to overwrite)")"
> -               exit 1
> +if [ "$SPLITPKG" -eq 0 ]; then
> +       if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" \
> +                       -a "$FORCE" -eq 0 -a "$SOURCEONLY" -eq 0 -a "$NOBUILD" -eq 0 ]; then
> +               if [ "$INSTALL" -eq 1 ]; then
> +                       warning "$(gettext "A package has already been built, installing existing package...")"
> +                       install_package
> +                       exit $?
> +               else
> +                       error "$(gettext "A package has already been built. (use -f to overwrite)")"
> +                       exit 1
> +               fi
> +       fi
> +else
> +       local allpkgbuilt=1
> +       local somepkgbuilt=0
Declared local which doesn't make sense outside of a bash function.
You probably want to just leave them as plain variables here and add
an "unset" at the end of the outer else/fi block.

> +       for pkg in ${pkgname[@]}; do
> +               if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" ]; then
$pkgver/$pkgrel can't be overridden in subpackages, correct? Otherwise
this line will not work right.

> +                       somepkgbuilt=1
> +               else
> +                       allpkgbuilt=0
> +               fi
> +       done
> +       if [ -f "$FORCE" -eq 0 -a "$SOURCEONLY" -eq 0 -a "$NOBUILD" -eq 0 ]; then
> +               if [ "$INSTALL" -eq 1 -a "$allpkgbuilt" -eq 1 ]; then
> +                       warning "$(gettext "The package group has already been built, installing existing packages...")"
> +                       install_package
> +                       exit $?
> +               fi
> +               if [ "$somepkgbuilt" -eq 1 ]; then
> +                       error "$(gettext "The package group has already been (partially) built. (use -f to overwrite)")"
Awkward English text, trying to think of something better...I'd at
least drop the () around partially, maybe something like:
"Part of the package group has already been built. (use -f to overwrite)"

> +                       exit 1
> +               fi
>        fi
(unset goes here)
>  fi
>
> --

I didn't actually run through the patch and test, so I trust the logic
is reasonably correct. :)

-Dan


More information about the pacman-dev mailing list