#!/usr/bin/env python3

import os
import subprocess
import sys
import time

libraries = {
    "sky130_fd_pr": 'SKY130 Primitive Models and Cells',

    #
#    "sky130_fd_sc_hd":   'SKY130 High Density Digital Standard Cells (SkyWater Provided)',
#    "sky130_fd_sc_hdll": 'SKY130 High Density Low Leakage Digital Standard Cells (SkyWater Provided)',
    #
#    "sky130_fd_sc_hs":   'SKY130 High Speed Digital Standard Cells (SkyWater Provided)',
#    "sky130_fd_sc_ms":   'SKY130 Medium Speed Digital Standard Cells (SkyWater Provided)',
#    "sky130_fd_sc_ls":   'SKY130 Low Speed Digital Standard Cells (SkyWater Provided)',
    #
#    "sky130_fd_sc_hvl":  'SKY130 High Voltage Digital Standard Cells (SkyWater Provided)',
#    "sky130_fd_sc_lp":   'SKY130 Low Power Digital Standard Cells (SkyWater Provided)',
}


def run(cmd, **kw):
    sys.stdout.flush()
    sys.stderr.flush()
    print(cmd, '-'*5, flush=True)
    subprocess.check_call(cmd, shell=True, stderr=subprocess.STDOUT, **kw)
    print('-'*5, flush=True)
    sys.stdout.flush()
    sys.stderr.flush()


DATE = None # 'Mon Oct 06 16:55:02 2020 -0700'

def git(cmd, gitdir, **kw):
    env = dict(os.environ)
    if DATE:
        env['GIT_AUTHOR_DATE'] = DATE
        env['GIT_COMMITTER_DATE'] = DATE
    env['GIT_COMMITTER_NAME'] = "Tim 'mithro' Ansell"
    env['GIT_COMMITTER_EMAIL'] = 'tansell@google.com'

    if 'push' in cmd:
        cmd += ' --verbose --progress'

    i = 0
    while True:
        try:
            run('git '+cmd, cwd=gitdir, env=env, **kw)
            break
        except subprocess.CalledProcessError as e:
            if i < 5:
                time.sleep(10)
                continue
            raise


def out_v(v, versions):
    if (0,0,0) in versions:
        return (v[0],v[1],v[2]+1)
    return v


def previous_v(v, versions):
    assert v in versions, (v, versions)
    vers = [(0,0,0)]+[out_v(x, versions) for x in list(versions)]
    ov = out_v(v, versions)
    assert ov in vers, (ov, vers)
    i = vers.index(ov)
    assert i > 0, (i, ov, vers)
    return vers[i-1]
