#!/usr/bin/python

import errno
import logging
import optparse
import subprocess
import sys

import blueprint
from blueprint import git

parser = optparse.OptionParser('Usage: %prog [-q] <name> [<dirname>][...]')
parser.add_option('-q', '--quiet',
                  dest='quiet',
                  default=False,
                  action='store_true',
                  help='operate quietly')
options, args = parser.parse_args()

if options.quiet:
    logging.root.setLevel(logging.CRITICAL)

if 0 == len(args):
    parser.print_usage()
    sys.exit(1)
name = args[0]

try:
    b = blueprint.Blueprint(name=name)
except blueprint.NotFoundError:
    logging.error('blueprint {0} does not exist'.format(name))
    sys.exit(1)
except blueprint.NameError:
    logging.error('invalid blueprint name')
    sys.exit(1)

try:
    commit = git.rev_parse(name)
    tree = git.tree(commit)
    for dirname in args[1:] or b.sources.iterkeys():
        if dirname not in b.sources:
            logging.warning('source tarball for {0} not found'.format(dirname))
            continue
        filename = b.sources[dirname]
        blob = git.blob(tree, filename)
        sys.stderr.write('{0} {1}\n'.format(dirname, filename))
        p = subprocess.Popen(['tar', 'tv'],
                             close_fds=True,
                             stdin=git.cat_file(blob))
except IOError:
    pass
