import os import setuptools import shutil import subprocess import sys import tarfile import tempfile _tempdir = None def _extractNameVersion(filename): global _tempdir if _tempdir is None: _tempdir = tempfile.mkdtemp() print 'Parsing:', filename tgz = tarfile.TarFile.gzopen(filename, 'r') try: names = tgz.getnames() for name in names: if name.endswith('PKG-INFO'): project, version = None, None for line in tgz.extractfile(name).readlines(): key, value = line.split(':', 1) if key == 'Name': project = value.strip() if version is not None: return project, version elif key == 'Version': version = value.strip() if project is not None: return project, version elif name == 'setup.py': tgz.extract(name, _tempdir) # no PKG-INFO found, do it the hard way. command = ('cd %s/%s && %s setup.py --name --version' % (_tempdir, names[0], sys.executable)) popen = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True, ) output = popen.communicate()[0] return output.splitlines()[:2] finally: tgz.close() def main(argv=None): if argv is None: argv = sys.argv[1:] projects = {} for arg in argv: try: project, revision = _extractNameVersion(arg) projects.setdefault(project, []).append((revision, arg)) except: continue items = projects.items() items.sort() os.makedirs('simple') top = open('simple/index.html', 'w') top.writelines(['\n', '
\n', '