#!/usr/bin/env python3

import os
import subprocess
import sys
import time

libraries = {
    "sky130_fd_pr": 'SKY130 Primitive Models and Cells',
#    "sky130_fd_pr_rf":   'SKY130 Legacy RF Primitive Models and Cells',
#    "sky130_fd_pr_rf2":  'SKY130 RF Primitives 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()


def git(cmd, gitdir, **kw):
    env = dict(os.environ)
    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]
