#!/usr/bin/python

import sys, os
import traceback
from glob import glob

#if not os.environ.has_key('TMPDIR'):
#	os.environ['TMPDIR'] = '/tmp/autobuilder-tmp'
#if not os.environ.has_key('HOME'):
#	os.environ['HOME'] = '/tmp/autobuilder-home'

import geet

def readcfg(filename):
	for line in open(filename, 'r').xreadlines():
		if line[0] == '#':
			continue
		line = line.strip()
		if len(line) > 0:
			(key, value) = [i.strip() for i in line.split('=')]
			yield key, value

def makerepo():
	b.system('sh /usr/share/geet-autobuilder/scripts/mkrepo.sh')

def buildfile(file, protocol = None):
	do_makerepo = False
	for p in geet.repo.readcfg(file):
		gitsrv = os.path.basename(file)
		if protocol:
			gitsrv = protocol + '://' + gitsrv
		else:
			gitsrv = gitsrv + ':'
		try:
			if len(p) < 2 or len(p) > 3:
				raise runtime_error, "Error: wrong line in config file %s" % sys.argv[1]
			prefix = "%s/people/%s/packages" % (gitsrv, p[1])
			if p[0] == 'archive':
				prefix = "%s/archive/%s" % (gitsrv, p[0][0])
			if len(p) == 2:
				b.build(p[0], "%s/%s.git" % (prefix, p[0]))
			elif len(p) == 3:
				b.build(p[0], "%s/%s.git" % (prefix, p[0]), p[2])
		except:
			traceback.print_exc()
			print "Error: %s" % sys.exc_value
		finally:
			do_makerepo = True
	if do_makerepo:
		makerepo()

def buildsrv(gitsrv_dir):
	for f in glob(gitsrv_dir + '/*'):
		if os.path.isfile(f):
			buildfile(f)
		if os.path.isdir(f):
			for nf in glob(f + '/*'):
				buildfile(nf, os.path.basename(f))

def buildflavour(flavours_dir):
	for x in glob(flavours_dir + '/*'):
		if os.path.isdir(x):
			b['flavour'] = x
			buildsrv()

config = '/etc/geet/config'

if len(sys.argv) > 1:
	config = sys.argv[1]

b = geet.repo.RepoBuilder()
b['flavour'] = 'sisyphus'

for key in ['HOME', 'TMPDIR']:
	b[key] = os.environ[key]

for key in ['GEET_HOME', 'GEET_CONFIG']:
	if os.environ.has_key(key):
		b[key] = os.environ[key]
	else:
		b[key] = b['HOME'] + '/geet'

try:
	for key, value in readcfg(config):
		b[key] = b.subst(value)
except:
	print "Fail to read config file: %s" % config

homeconfig = b['HOME'] + '/.geet'
if os.path.exists(homeconfig):
	for key, value in readcfg(homeconfig):
		b[key] = b.subst(value)
	userconfig = b['GEET_CONFIG'] + '/config'
	if not os.path.exists(userconfig):
		os.symlink(homeconfig, userconfig)

buildsrv(b['gitsrv_dir'])
