#!/usr/bin/python

import os
import sys
from argparse import ArgumentParser
import yum.misc
from createrepo import MetaDataGenerator, MetaDataConfig
from pyfaf.storage import getDatabase
from pyfaf.queries import get_packages_by_osrelease

def get_pkglist(db, outputdir, opsys, release, arch):
    if opsys == "rhel":
        opsys = "Red Hat Enterprise Linux"
    q = get_packages_by_osrelease(db, opsys, release, arch)
    for pkg in q:
        if pkg.has_lob("package"):
            print("Adding package: %s-%s-%s" % (pkg.name, pkg.build.version, pkg.build.release))
            yield os.path.relpath(pkg.get_lob_path("package"), outputdir)

def generate_yum_repo(db, outputdir, opsys, release, arch):
    if not os.path.exists(outputdir):
        os.makedirs(outputdir)
    conf = MetaDataConfig()
    conf.quiet = False
    conf.verbose = True
    conf.update = False
    conf.sumtype = yum.misc._default_checksums[0]
    conf.outputdir = outputdir
    conf.directory = conf.outputdir
    conf.pkglist = get_pkglist(db, conf.directory, opsys, release, arch)

    mdgen = MetaDataGenerator(config_obj=conf)

    if mdgen.checkTimeStamps():
        print("%s repo is up to date" % (reponame))

    mdgen.doPkgMetadata()
    mdgen.doRepoMetadata()
    mdgen.doFinalMove()
    #mdgen.cleanup()

if __name__ == "__main__":
    parser = ArgumentParser(description="Generates yum repo from FAF databse")
    parser.add_argument("OPSYS")
    parser.add_argument("RELEASE")
    parser.add_argument("ARCHITECTURE")
    parser.add_argument("--outputdir", default=os.getcwd())
    args = parser.parse_args()

    print("Creating repo in '%s'" % (args.outputdir))

    generate_yum_repo(getDatabase(), args.outputdir, args.OPSYS, args.RELEASE, args.ARCHITECTURE)
