Example #1
0
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
Example #2
0
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()