def setUp(self): ref = ConanFileReference.loads("lib/version@user/channel") self.package_layout = PackageCacheLayout(base_folder=temp_folder(), ref=ref, short_paths=False, no_lock=True) self.output = TestBufferConanOutput()
def package_layout(self, ref, short_paths=False): assert isinstance(ref, ConanFileReference), "It is a {}".format(type(ref)) check_ref_case(ref, self.store) base_folder = os.path.normpath(os.path.join(self.store, ref.dir_repr())) return PackageCacheLayout(base_folder=base_folder, ref=ref, short_paths=short_paths)
def package_layout(self, ref, short_paths=None, *args, **kwargs): assert isinstance(ref, ConanFileReference), "It is a {}".format(type(ref)) edited_ref = self.editable_packages.get(ref.copy_clear_rev()) if edited_ref: base_path = edited_ref["path"] layout_file = edited_ref["layout"] return PackageEditableLayout(base_path, layout_file, ref) else: check_ref_case(ref, self.store) base_folder = os.path.normpath(os.path.join(self.store, ref.dir_repr())) return PackageCacheLayout(base_folder=base_folder, ref=ref, short_paths=short_paths, no_lock=self._no_locks())
def _migrate_full_metadata(cache, out): # Fix for https://github.com/conan-io/conan/issues/4898 out.warn("Running a full revision metadata migration") refs = _get_refs(cache) for ref in refs: try: base_folder = os.path.normpath( os.path.join(cache.store, ref.dir_repr())) layout = PackageCacheLayout(base_folder=base_folder, ref=ref, short_paths=None, no_lock=True) with layout.update_metadata() as metadata: # Updating the RREV if metadata.recipe.revision is None: out.warn( "Package %s metadata had recipe revision None, migrating" % str(ref)) folder = layout.export() try: manifest = FileTreeManifest.load(folder) rrev = manifest.summary_hash except Exception: rrev = DEFAULT_REVISION_V1 metadata.recipe.revision = rrev prefs = _get_prefs(layout) existing_ids = [pref.id for pref in prefs] for pkg_id in list(metadata.packages.keys()): if pkg_id not in existing_ids: out.warn( "Package %s metadata had stalled package information %s, removing" % (str(ref), pkg_id)) del metadata.packages[pkg_id] # UPDATING PREVS for pref in prefs: try: pmanifest = FileTreeManifest.load(layout.package(pref)) prev = pmanifest.summary_hash except Exception: prev = DEFAULT_REVISION_V1 metadata.packages[pref.id].revision = prev metadata.packages[ pref.id].recipe_revision = metadata.recipe.revision except Exception as e: raise ConanException( "Something went wrong while migrating metadata.json files " "in the cache, please try to fix the issue or wipe the cache: {}" ":{}".format(ref, e))
def _migrate_create_metadata(cache, out): out.warn("Migration: Generating missing metadata files") refs = _get_refs(cache) for ref in refs: try: base_folder = os.path.normpath( os.path.join(cache.store, ref.dir_repr())) # Force using a package cache layout for everything, we want to alter the cache, # not the editables layout = PackageCacheLayout(base_folder=base_folder, ref=ref, short_paths=False, no_lock=True) folder = layout.export() try: manifest = FileTreeManifest.load(folder) rrev = manifest.summary_hash except Exception: rrev = DEFAULT_REVISION_V1 metadata_path = layout.package_metadata() if not os.path.exists(metadata_path): out.info("Creating {} for {}".format(PACKAGE_METADATA, ref)) prefs = _get_prefs(layout) metadata = PackageMetadata() metadata.recipe.revision = rrev for pref in prefs: try: pmanifest = FileTreeManifest.load(layout.package(pref)) prev = pmanifest.summary_hash except Exception: prev = DEFAULT_REVISION_V1 metadata.packages[pref.id].revision = prev metadata.packages[ pref.id].recipe_revision = metadata.recipe.revision save(metadata_path, metadata.dumps()) except Exception as e: raise ConanException( "Something went wrong while generating the metadata.json files " "in the cache, please try to fix the issue or wipe the cache: {}" ":{}".format(ref, e)) out.success("Migration: Generating missing metadata files finished OK!\n")