def handle_name(co, handle, txn): """Returns a dict specifying name, parent and other info""" if co.handle_name_cache.has_key(handle): return co.handle_name_cache[handle] # XXX: reading this repeatedly is excessive heads = bdecode(co.linforepo.get('heads', txn=txn)) einfo = {} if co.editsdb.has_key(handle, txn): einfo = bdecode(co.editsdb.get(handle, txn=txn)) if einfo.has_key('name'): einfo['points'] = ['1'] for head in heads: pinfo = __handle_name_at_point(co, handle, head, txn) if pinfo is None: continue einfo['points'] = dmerge(einfo['points'], pinfo['points']) einfo['rename point'] = ['1'] co.handle_name_cache[handle] = einfo return einfo state = None for point in heads: pinfo = __handle_name_at_point(co, handle, point, txn) if pinfo is None: continue if pinfo.has_key('delete'): co.handle_name_cache[handle] = pinfo return pinfo if state is None: state = pinfo continue conflict, rename_points = rename_conflict_check(state, pinfo) if conflict == 'remote': state['name'] = pinfo['name'] state['parent'] = pinfo['parent'] state['rename point'] = rename_points state['points'] = dmerge(state['points'], pinfo['points']) if einfo.has_key('delete'): state['delete'] = einfo['delete'] co.handle_name_cache[handle] = state return state
def gen_file_points(prune): file_points, points = [], ['1'] true_pre_heads = simplify_precursors(co, handle, co.contents, pre_heads, txn)[0] # don't use pre_heads which are ancestors of rhead for pre, index in true_pre_heads: if prune and is_ancestor(co, pre, rhead, txn): continue info = handle_contents_at_point(co, handle, pre, txn, dcache=dcache) if info is None: continue points = dmerge(points, info['points']) file_points.append((info['lines'], info['line points'], info['points'])) return (file_points, points)
def gen_file_points(prune): file_points, points = [], ['1'] true_pre_heads = simplify_precursors(co, handle, co.contents, pre_heads, txn)[0] # don't use pre_heads which are ancestors of rhead for pre, index in true_pre_heads: if prune and is_ancestor(co, pre, rhead, txn): continue info = handle_contents_at_point(co, handle, pre, txn, dcache=dcache) if info is None: continue points = dmerge(points, info['points']) file_points.append( (info['lines'], info['line points'], info['points'])) return (file_points, points)