def _handle_node_cache(self, node, package_ref, keep_build, processed_package_references): conan_ref, conan_file = node.conan_ref, node.conanfile output = ScopedOutput(str(conan_ref), self._out) package_folder = self._client_cache.package(package_ref, conan_file.short_paths) with self._client_cache.package_lock(package_ref): if package_ref not in processed_package_references: processed_package_references.add(package_ref) set_dirty(package_folder) if node.binary == BINARY_BUILD: self._build_package(node, package_ref, output, keep_build) elif node.binary in (BINARY_UPDATE, BINARY_DOWNLOAD): self._remote_manager.get_package(package_ref, package_folder, node.binary_remote, output, self._recorder) if node.binary_remote != node.remote: self._registry.set_ref(conan_ref, node.binary_remote.name) elif node.binary == BINARY_CACHE: output.success('Already installed!') log_package_got_from_local_cache(package_ref) self._recorder.package_fetched_from_cache(package_ref) clean_dirty(package_folder) # Call the info method self._call_package_info(conan_file, package_folder)
def get_package(self, package_ref, short_paths): """ obtain a package, either from disk or retrieve from remotes if necessary and not necessary to build """ output = ScopedOutput(str(package_ref.conan), self._out) package_folder = self._client_cache.package(package_ref, short_paths=short_paths) # Check current package status if os.path.exists(package_folder): if self._check_updates: read_manifest = self._client_cache.load_package_manifest(package_ref) try: # get_conan_digest can fail, not in server upstream_manifest = self.get_package_digest(package_ref) if upstream_manifest != read_manifest: if upstream_manifest.time > read_manifest.time: output.warn("Current package is older than remote upstream one") if self._update: output.warn("Removing it to retrieve or build an updated one") rmdir(package_folder) else: output.warn("Current package is newer than remote upstream one") except NotFoundException: pass local_package = os.path.exists(package_folder) if local_package: output.success('Already installed!') installed = True log_package_got_from_local_cache(package_ref) else: installed = self._retrieve_remote_package(package_ref, package_folder, output) self.handle_package_manifest(package_ref, installed) return installed