示例#1
0
def _get_only_downloads_module(downloaded_files):
    """
    Gets a BuildInfoModule for the downloaded_files
    :param downloaded_files: {conan_ref: {"files": [doc_file, doc_file], "remote": remote }}
    :return: BuildInfoModule object
    """
    ret = BuildInfoModule()
    ret.id = "DownloadOnly"
    for ref, file_docs in downloaded_files.items():
        files = file_docs["files"]
        for file_doc in files:
            the_type = _get_type(file_doc["path"])
            dep = BuildInfoModuleDependency(file_doc["name"], the_type,
                                            file_doc["sha1"], file_doc["md5"])
            ret.dependencies.append(dep)
    return ret
示例#2
0
def _get_only_downloads_module(downloaded_files):
    """
    Gets a BuildInfoModule for the downloaded_files
    :param downloaded_files: {conan_ref: {"files": [doc_file, doc_file], "remote": remote }}
    :return: BuildInfoModule object
    """
    ret = BuildInfoModule()
    ret.id = "DownloadOnly"
    for _, file_docs in downloaded_files.items():
        files = file_docs["files"]
        for file_doc in files:
            the_type = _get_type(file_doc["path"])
            dep = BuildInfoModuleDependency(file_doc["name"], the_type, file_doc["sha1"],
                                            file_doc["md5"])
            ret.dependencies.append(dep)
    return ret
示例#3
0
def _get_upload_modules_with_deps(uploaded_files, downloaded_files):
    modules = []
    deps = defaultdict(set)  # Reference: [Reference, Reference]
    # Extract needed information
    for module_id, mod_doc in uploaded_files.items():
        ref_or_pref = ConanFileReference.loads(module_id) if mod_doc["type"] == "recipe" \
            else PackageReference.loads(module_id)
        # Store recipe and package dependencies
        if mod_doc["type"] == "package":
            conan_infos = [
                file_doc for file_doc in mod_doc["files"]
                if file_doc["name"] == "conaninfo.txt"
            ]
            if conan_infos:
                conan_info = conan_infos[0]["path"]
                info = ConanInfo.loads(load(conan_info))
                for pref in info.full_requires:
                    clear_pref = pref.copy_clear_revs()
                    deps[repr(ref_or_pref.ref.copy_clear_rev())].add(
                        repr(clear_pref.ref))
                    deps[repr(ref_or_pref.copy_clear_revs())].add(
                        repr(clear_pref))

    # Add the modules
    for module_id, mod_doc in uploaded_files.items():
        module = BuildInfoModule()
        module.id = str(module_id)
        # Add artifacts
        for file_doc in mod_doc["files"]:
            artifact = _get_build_info_artifact(file_doc)
            module.artifacts.append(artifact)

        # Add dependencies, for each module dep modules
        for mod_dep_id in deps[module_id]:
            if mod_dep_id in downloaded_files:
                down_module = downloaded_files[mod_dep_id]
                # Check if the remote from the uploaded package matches the remote
                # from the downloaded dependency
                if down_module.get("remote", None) == mod_doc["remote"]:
                    for file_doc in down_module["files"]:
                        module.dependencies.append(
                            _get_dependency(file_doc, mod_dep_id))

        modules.append(module)
    return modules
示例#4
0
def _get_upload_modules_with_deps(uploaded_files, downloaded_files):
    modules = []
    deps = defaultdict(set)  # Reference: [Reference, Reference]
    # Extract needed information
    for module_id, mod_doc in uploaded_files.items():
        module_id = ConanFileReference.loads(module_id) if mod_doc["type"] == "recipe" \
            else PackageReference.loads(module_id)
        # Store recipe and package dependencies
        if mod_doc["type"] == "package":
            conan_infos = [file_doc for file_doc in mod_doc["files"]
                           if file_doc["name"] == "conaninfo.txt"]
            if conan_infos:
                conan_info = conan_infos[0]["path"]
                info = ConanInfo.loads(load(conan_info))
                for package_reference in info.full_requires:
                    deps[str(module_id.conan)].add(str(package_reference.conan))
                    deps[str(module_id)].add(str(package_reference))

    # Add the modules
    for module_id, mod_doc in uploaded_files.items():
        module = BuildInfoModule()
        module.id = str(module_id)
        # Add artifacts
        for file_doc in mod_doc["files"]:
            artifact = _get_build_info_artifact(file_doc)
            module.artifacts.append(artifact)

        # Add dependencies, for each module dep modules
        for mod_dep_id in deps[module_id]:
            if mod_dep_id in downloaded_files:
                down_module = downloaded_files[mod_dep_id]
                # Check if the remote from the uploaded package matches the remote from the downloaded dependency
                if down_module.get("remote", None) == mod_doc["remote"]:
                    for file_doc in down_module["files"]:
                        module.dependencies.append(_get_dependency(file_doc, mod_dep_id))

        modules.append(module)
    return modules