#!/usr/bin/python

import os, sys, re, time

from geet.gear import Gear
from geet.utils.functions import xsystem, system

def isgear(path):
    if os.path.isdir(os.path.join(path, '.gear')):
        return True
    if os.path.isfile(os.path.join(path, '.gear-rules')):
        return True
    return False

def gear_path():
    path = os.getcwd()
    while True:
        if isgear(path):
            return path
        if path == '/':
            return False
        path = os.path.dirname(path)

def get_version(spec):
    """Try get version from spec-file"""
    version, release, serial = [None]*3
    for line in xsystem('rpm -bE ' + spec.path()):
        if version is None:
            m = re.match('^Version:\s*(.*?)\s*$', line)
            if m:
                version = m.group(1)
        if release is None:
            m = re.match('^Release:\s*(.*?)\s*$', line)
            if m:
                release = m.group(1)
        if serial is None:
            m = re.match('^Serial:\s*(.*?)\s*$', line)
        if re.match('^%prep.*', line) or re.match('^%package.*', line):
            break
        if version and release and serial:
            break
    if serial is None:
        return '%s-%s' % (version, release)
    else:
        return '%s:%s-%s' % (serial, version, release)

path = gear_path()
if path is False:
    sys.stderr.write('Can\'t find gear repository\n')
    exit(1)

gear = Gear(path)
spec = gear.spec()
spec.write('%s.geet_back' % spec.path())
try:
    version = get_version(spec)
    spec.set_rel_suffix(time.strftime("dbg%Y.%m.%d.%H.%M"))
    spec.add_changelog('debug <debug at altlinux.org>', version, 'Debug version rpm')
    spec.write()
    gear.run('--rpmbuild --commit -- rpmbuild %s' % ' '.join(sys.argv[1:]))
finally:
    os.rename('%s.geet_back' % spec.path(), spec.path())
