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
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
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
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