Example #1
0
def diff_new_files_on_server(memory, options, server_path_nodes, dirs_scheduled_for_removal):
    """
    diff_new_files_on_server
    @type memory: Memory
    @type options: optparse.Values, instance
    @type server_path_nodes: tuple
    @type dirs_scheduled_for_removal: tuple
    """
    file_del_server = []
    file_downloads = []

    for fnode in server_path_nodes:
        server_path_to_local = os.path.join(options.dir, fnode["doc"]["m_path_p64s"].lstrip(os.path.sep))

        if os.path.exists(server_path_to_local):
            pass

        else:
            seen_local_path_before, memory = in_local_path_history(memory, server_path_to_local)

            if seen_local_path_before:
                file_del_server.append(fnode["doc"]["m_path_p64s"])
            else:
                file_downloads.append(fnode)

    file_del_server = [f for f in file_del_server if os.path.dirname(f) not in dirs_scheduled_for_removal]
    return memory, tuple(file_del_server), tuple(file_downloads)
Example #2
0
def diff_files_locally(memory, options, localindex, serverindex):
    """
    diff_files_locally
    @type memory: Memory
    @type options: optparse.Values, instance
    @type localindex: dict
    @type serverindex: dict
    """
    local_pathnames = [(localindex["dirnames"][d]["dirname"], localindex["dirnames"][d]["filenames"]) for d in localindex["dirnames"] if len(localindex["dirnames"][d]["filenames"]) > 0]
    local_pathnames_set = set()
    file_uploads = []

    for ft in local_pathnames:
        for fname in ft[1]:
            if not str(fname["name"]).startswith("."):
                local_path = os.path.join(ft[0], fname["name"])
                local_pathnames_set.add(str(local_path))

    for local_path in local_pathnames_set:
        if os.path.exists(local_path):
            seen_local_path_before, memory = in_local_path_history(memory, local_path)
            rel_local_path = local_path.replace(options.dir, "")
            upload_file_object = {"local_path": local_path,
                                  "parent_short_id": None,
                                  "rel_path": rel_local_path }

            corresponding_server_nodes = [x for x in serverindex["doclist"] if x["doc"]["m_path_p64s"] == upload_file_object["rel_path"]]

            if not seen_local_path_before:
                if len(corresponding_server_nodes) == 0 or not corresponding_server_nodes:
                    file_uploads.append(upload_file_object)
                else:
                    filedata, localindex = make_cryptogit_hash(upload_file_object["local_path"], options.dir, localindex)

                    if not corresponding_server_nodes[0]:
                        file_uploads.append(upload_file_object)
                    else:
                        if not strcmp(corresponding_server_nodes[0]["content_hash_latest_timestamp"][0], filedata["filehash"]):
                            file_uploads.append(upload_file_object)
                        else:
                            memory = add_local_path_history(memory, upload_file_object["local_path"])

            else:
                # is it changed?
                if len(corresponding_server_nodes) != 0:
                    filestats = read_file_to_fdict(local_path)

                    if filestats and corresponding_server_nodes[0]:
                        try:
                            if filestats["st_ctime"] > corresponding_server_nodes[0]["content_hash_latest_timestamp"][1]:
                                filedata, localindex = make_cryptogit_hash(local_path, options.dir, localindex)
                                if filedata["filehash"] != corresponding_server_nodes[0]["content_hash_latest_timestamp"][0]:
                                    file_uploads.append(upload_file_object)

                        except:
                            raise

    file_del_local = []
    server_paths = [str(os.path.join(options.dir, x["doc"]["m_path_p64s"].lstrip(os.path.sep))) for x in serverindex["doclist"]]
    for local_path in local_pathnames_set:
        if os.path.exists(local_path):
            if local_path not in server_paths:
                seen_local_path_before, memory = in_local_path_history(memory, local_path)

                if seen_local_path_before:
                    file_del_local.append(local_path)

    return file_uploads, file_del_local, memory, localindex