#!/usr/bin/python
__requires__ = 'TurboGears[future]'
import pkg_resources
pkg_resources.require("TurboGears")

# std imports
import optparse
import sys
import os
# TurboGears imports
import sqlobject
import turbogears
from mirrormanager.model import Product, Version, Arch, Repository, Category, Directory


from turbogears.database import PackageHub
hub = __connection__ = None

options = None

def doit():
    global options
    product=Product.byName(u"Fedora")
    ver = Version.selectBy(product=product, name=options.version)[0]

    for a in Arch.select():
        if a.name == u'source': continue
        repos = Repository.selectBy(prefix=u'fedora-install-%s' % ver.name, arch=a)
        for r in repos:
            print "destroying %s" % r
            r.destroySelf()

        if options.version == 'development': # yeah, development is ver.name, displayname is rawhide
            # We need a RepositoryRedirect here instead, as Repositories already exist to these directories.
            fromRepo = u'fedora-install-rawhide'
            toRepo = u'rawhide'
            try:
                rr = RepositoryRedirect(fromRepo = fromRepo, toRepo = toRepo)
            except:
                print "Repository Redirect %s -> %s already exists, ignoring." % (fromRepo, toRepo)
                pass
        else:
            prefix=u'fedora-install-%s' % ver.name
            if a.primaryArch:
                d = u'pub/fedora/linux/releases/%s/Fedora/%s/os' % (ver.name, a.name)
                category = Category.byName(u'Fedora Linux')    
            else:
                d = u'pub/fedora-secondary/releases/%s/Fedora/%s/os' % (ver.name, a.name)
                category = Category.byName(u'Fedora Secondary Arches')

            repos = Repository.selectBy(name=d)
            for r in repos:
                print "destroying %s" % r
                r.destroySelf()

            if not os.path.isdir(os.path.join('/', d)):
                print "directory %s does not exist on disk, skipping creation of a repository there" % d
                continue

            try:
                d = Directory.byName(d)
            except sqlobject.SQLObjectNotFound:
                print "directory %s exists on disk, but not in the database yet, skipping creation of a repository there until after the next UMDL run."
                continue
            print "creating %s repo for arch %s" % (prefix, a.name)
            r = Repository(name=d.name, prefix=prefix, arch=a, directory=d, version=ver, category=category)


def main():
    global options
    parser = optparse.OptionParser(usage=sys.argv[0] + " [options]")
    parser.add_option("-c", "--config",
                      dest="config", default='/etc/mirrormanager/prod.cfg',
                      help="TurboGears config file to use (default=/etc/mirrormanager/prod.cfg)")
    parser.add_option("-v", "--version",
                      dest="version", default=None,
                      help="the Version to move")

    (options, args) = parser.parse_args()
    if options.version is None:
        print "Error: You must specify a version."
        return 1

    turbogears.update_config(configfile=options.config,
                             modulename="mirrormanager.config")
    global hub
    global __connection__
    hub = PackageHub("mirrormanager")
    __connection__ = hub
    
    doit()
    return 0

if __name__ == "__main__":
    sys.exit(main())
        
