OK, here goes nothing. On Tue, Feb 23, 2010 at 11:26 PM, Dan McGee <d...@archlinux.org> wrote: > From: Pierre Schmitz <pie...@archlinux.de> > > Signed-off-by: Pierre Schmitz <pie...@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: dmc...@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="ja...@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