#!/usr/bin/env python

import sys, time, os, os.path, glob, sets, re
import MySQLdb
import tparse, common, Slurp
from optparse import OptionParser

# Defaults; all can be overridden via command line arguments
SCHEMA = 'sql/cvs-schema.sql'
DATABASE = 'cvs'
USER = 'root'
SERVER = 'localhost'
PASSWORD = ''

# -------------- Hopefully no need to change after here. ---------------------

STARTDIR = os.getcwd()

def slurp(sink, repo, options):
    """repo is a path to the repository to slurp, options is from the command line"""

    s = Slurp.Slurp(sink, repo)

    print "Parsing history:",
    sys.stdout.flush()
    s.parse_history()
    print "Done."

    print "Parsing revisions:",
    sys.stdout.flush()
    s.parse_revisions()
    print "Done."

def print_usage():
        print usage.replace('%prog',sys.argv[0])
        sys.exit(1)

if __name__ == '__main__':

    usage = "usage: %prog [options] course-1.sql [course-2.sql [...]]"
    parser = OptionParser(usage=usage)
    parser.add_option("-q", "--quiet",
                      action="store_false", dest="verbose", default=True,
                      help="don't print status messages to stdout")
    parser.add_option("-r", "--repository", dest="repository", default='',
                      help="repository to slurp")
    parser.add_option("-d", "--database", dest="database", default=DATABASE,
                      help="database to use. defaults to 'cvs'")
    parser.add_option("-u", "--user", dest="user", default=USER,
                      help="user to access mysql as. defaults to root")
    parser.add_option("-s", "--server", dest="server", default=SERVER,
                      help="database server")
    parser.add_option("-p", "--password", dest="password", default=PASSWORD,
                      help="database password")
    parser.add_option("--schema", dest="schema", default=SCHEMA,
                      help="database schema. defaults to %s" % SCHEMA)
    parser.add_option("--flush", action="store_true", dest="flush", default=False,
                      help="flush database")

    options, args = parser.parse_args()

    if not options.repository and not options.flush:
        print_usage()

    # Flush the database if requested
    if options.flush:
        os.system('echo "y\\n" | mysqladmin drop -u%s %s 2&>1 /dev/null' %
                  (options.user, options.database))
        os.system('mysqladmin create -u%s %s' % (options.user, options.database))
        os.system("mysql -u%s %s < %s" % (options.user, options.database, options.schema))
        print "Database flushed"
        if not options.repository:
            sys.exit(0)

    # Get our lovely database running
    db = MySQLdb.connect(options.server, options.user, options.password)
    db.select_db(options.database)

    # Set up the RCS sink. This is how the C++ module interacts with us.
    sink = common.Sink(db.cursor());

    # This is the more interesting path
    slurp(sink, options.repository, options)
