def resolve(target): """Return the generation number for target. As a side effect, record any new calculated data to the git repository. """ num = get_num(target) if num is not None: return num if git_tree(REF) is None: empty = git_mktree({}) ref = run_git('commit-tree', '-m', 'Initial commit from git-number', empty) run_git('update-ref', REF, ref) with ScopedPool() as pool: available = pool.apply_async(git_tree, args=(REF,), kwds={'recurse': True}) preload = set() rev_list = [] with StatusPrinter('Loading commits: %d') as inc: for line in run_git('rev-list', '--topo-order', '--parents', '--reverse', hexlify(target), '^'+REF).splitlines(): toks = map(unhexlify, line.split()) rev_list.append((toks[0], toks[1:])) preload.update(t[:PREFIX_LEN] for t in toks) inc() preload.intersection_update( unhexlify(k.replace('/', '')) for k in available.get().iterkeys() ) preload.difference_update((x,) for x in get_num_tree.cache) if preload: preload_iter = pool.imap_unordered(preload_tree, preload) with StatusPrinter('Preloading nurbs: (%%d/%d)' % len(preload)) as inc: for prefix, tree in preload_iter: get_num_tree.cache[prefix,] = tree inc() get_num_tree.default_enabled = True for ref, pars in rev_list: num = set_num(ref, max(map(get_num, pars)) + 1 if pars else 0) finalize(hexlify(target)) return num
def main(): force = '-f' in sys.argv if force: sys.argv.remove('-f') StatusPrinter.ENABLED = True target = hexlify(parse_one_committish()) print 'Got Target: %s' % target fix_head(target) run_git('reset', '-q', target) if force: force_checkout(git_tree(target, recurse=True)) else: fancy_checkout()