def remote(input=None, output=None): if not input: input = os.fdopen(0, 'r', 0) if not output: output = os.fdopen(1, 'w', 0) remote_root = pickle.load(input) os.chdir(remote_root) remote_root = os.getcwd() pickle.dump(discover_repos(), output) while True: repo = pickle.load(input) if not repo: break os.chdir(remote_root) os.chdir(repo) revs = filter_existing_revs(list_reachable_revs()) fetchrev.receiver(input, output) output.write('F') fetchrev.sender(input, output, revs, is_local=False)
def local(input, output, args): local_root, remote_root = args pickle.dump(remote_root, output) os.chdir(local_root) local_root = os.getcwd() local_repos = set(discover_repos()) remote_repos = set(pickle.load(input)) for item in (local_repos - remote_repos): sys.stderr.write('WARNING: {} is only on local side\n'.format(item)) for item in (remote_repos - local_repos): sys.stderr.write('WARNING: {} is only on remote side\n'.format(item)) for repo in (local_repos & remote_repos): sys.stderr.write('------- local->remote {} --------\n'.format(repo)) pickle.dump(repo, output) os.chdir(repo) revs = filter_existing_revs(list_reachable_revs()) fetchrev.sender(input, output, revs, is_local=True) input.read(1) sys.stderr.write('------- remote->local {} --------\n'.format(repo)) fetchrev.receiver(input, output) os.chdir(local_root) pickle.dump(None, output)