#!/usr/bin/env python
# Neil Schemenauer <nas@python.ca>
# Placed in the public domain.

import sys
import os
import tempfile
import subprocess
import shutil

FORMATS = [('.tar.gz', 'tar zxf'),
           ('.tgz', 'tar zxf'),
           ('.tar.bz2', 'tar jxf'),
           ('.tar', 'tar xf'),
           ('.zip', 'unzip -q'),
           ('.ZIP', 'unzip -q'),
           ('.rar', 'unrar x'),
           ('.RAR', 'unrar x'),
          ]


def main():
    for filename in sys.argv[1:]:
        for suffix, cmd in FORMATS:
            if filename.endswith(suffix):
                break
        else:
            raise SystemExit("Don't know how to unpack %r" % filename)
        tempdirname = tempfile.mkdtemp(dir='.')
	filename = os.path.abspath(filename)
        os.chdir(tempdirname)
        rv = subprocess.call(cmd.split() + [filename])
        if rv != 0:
            shutil.rmtree(tempdirname)
            raise SystemExit('command %r failed (status %s)' % (cmd, rv))
        os.chdir('..')
        filenames = os.listdir(tempdirname)
        if len(filenames) == 1:
            targetname = filenames[0]
            sourcename = os.path.join(tempdirname, targetname)
        else:
            sourcename = tempdirname
            targetname = os.path.basename(filename[:-len(suffix)])
        if os.path.exists(targetname):
            shutil.rmtree(tempdirname)
            print "%r exists, not unpacking %r " % \
                (targetname, filename)
        else:
            os.rename(sourcename, targetname)
            if os.path.exists(tempdirname):
                os.rmdir(tempdirname)
            print 'unpacked %r to %r' % (filename, targetname)
        
if __name__ == '__main__':
    main()
