def find_update_files(co, rhead, named, txn): rnamed = [] for handle in named: linfo = handle_name(co, handle, txn) rnamed.append( (handle, linfo, __handle_name_at_point(co, handle, rhead, txn))) return rnamed
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 find_update_files(co, rhead, named, txn): rnamed = [] for handle in named: linfo = handle_name(co, handle, txn) rnamed.append((handle, linfo, __handle_name_at_point(co, handle, rhead, txn))) return rnamed