[arch-dev-public] [PATCH] Use a wrapper script to support different compression types

Dan McGee dan at archlinux.org
Wed Feb 24 00:51:46 EST 2010


OK, here goes nothing.

On Tue, Feb 23, 2010 at 11:26 PM, Dan McGee <dan at archlinux.org> wrote:
> From: Pierre Schmitz <pierre at archlinux.de>
>
> Signed-off-by: Pierre Schmitz <pierre at archlinux.de>
> ---
>  namcap    |   27 +++++++++++++++++++++++++++
>  namcap.py |    2 +-
>  pacman.py |    2 +-
>  setup.py  |    2 +-
>  4 files changed, 30 insertions(+), 3 deletions(-)
>  create mode 100644 namcap
>
> diff --git a/namcap b/namcap
> new file mode 100644
> index 0000000..f262985
> --- /dev/null
> +++ b/namcap
> @@ -0,0 +1,27 @@
> +#!/bin/bash
> +
> +args=''
> +tmp=$(mktemp -d /tmp/namcap.XXXXXXXXXX)
> +
> +for arg in "${@}"; do
> +       if echo "${arg}" | grep -q -E "^.+\.pkg\.tar\..+$" && [ -f "${arg}" ]; then
> +
> +               case "${arg##*.}" in
> +                       gz|z|Z) cmd='gzip' ;;
> +                       bz2|bz) cmd='bzip2' ;;
> +                       xz)     cmd='xz' ;;
> +                       *)      echo 'Unsupported compression'; exit 1;;
> +               esac
> +
> +               tar="${tmp}/$(basename "${arg%.*}")"
> +               $cmd -dcf "${arg}" > "${tar}"
> +
> +               args="${args} ${tar}"
> +       else
> +               args="${args} ${arg}"
> +       fi
> +done
> +
> +python -m namcap ${args}
> +
> +rm -rf "${tmp}"
Overall this script is in pretty good shape. One big problem however is this:
dmcgee at galway ~/projects/namcap (master)
$ du -sh /tmp/namcap.*
93M     /tmp/namcap.1094
93M     /tmp/namcap.1648
248K    /tmp/namcap.25917
248K    /tmp/namcap.26362
248K    /tmp/namcap.26423
248K    /tmp/namcap.26526
248K    /tmp/namcap.26922

I've managed to accumulate a ton of junk in /tmp/ already, because
there are several ways to exit the script without the rm getting
called. I think what we want to set up is a trap function. makepkg has
a bit of a complex one, but it should go something like this:

tmp=$(mktemp -d /tmp/namcap.XXXXXXXXXX)
cleanup() {
    rm -rf "${tmp}"
}

trap 'cleanup' 0

And then completely remove the rm -rf at the end, as it will happen in
any exit condition.

> diff --git a/namcap.py b/namcap.py
> index 19c6ceb..18dfbc8 100755
> --- a/namcap.py
> +++ b/namcap.py
> @@ -228,7 +228,7 @@ for package in packages:
>                print "Error: Problem reading " + package
>                usage()
>
> -       if package[-7:] == '.tar.gz':
> +       if package[-4:] == '.tar':
I took care of this one a bit differently tonight, and hopefully a bit
smarter from a python point of view:
http://projects.archlinux.org/namcap.git/commit/?id=0e4a9cbe0be95f061effac4ef7a11dc94e198400

So you can omit this change and the below one in pacman.py from the
patch resubmit.
>                process_realpackage(package, active_modules)
>        elif package[-8:] == 'PKGBUILD':
>                process_pkgbuild(package, active_modules)
> diff --git a/pacman.py b/pacman.py
> index e4b6cf3..c56d399 100644
> --- a/pacman.py
> +++ b/pacman.py
> @@ -66,7 +66,7 @@ def load(package, root=None):
>        if root == None:
>                root = pacmandb
>        # We know it's a local package
> -       if package[-7:] == '.tar.gz':
> +       if package[-4:] == '.tar':
>                pkgtar = tarfile.open(package, "r")
>                if not pkgtar:
>                        return None
> diff --git a/setup.py b/setup.py
> index 66ee2ba..754ee72 100755
> --- a/setup.py
> +++ b/setup.py
> @@ -10,6 +10,6 @@ setup(name="namcap",
>        description="Pacman package analyzer",
>        author="Jason Chu",
>        author_email="jason at archlinux.org",
> -       py_modules=["pacman"], packages=["Namcap"], scripts=["namcap.py", 'parsepkgbuild'],data_files =DATAFILES)
> +       py_modules=["pacman", "namcap"], packages=["Namcap"], scripts=['parsepkgbuild', 'namcap'],data_files =DATAFILES)
Looks fine to me, although I touched up the setup.py file tonight so
these are on seperate lines like the rest of the data was:
http://projects.archlinux.org/namcap.git/commit/?id=de1d5e9dfad8d79fda6903b18609e5a907828ebf

-Dan


More information about the arch-dev-public mailing list