[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