def search_packages(self, reference=None, remote_name=None, query=None, outdated=False): """ Return the single information saved in conan.vars about all the packages or the packages which match with a pattern Attributes: pattern = string to match packages remote = search on another origin to get packages info packages_pattern = String query with binary packages properties: "arch=x86 AND os=Windows" """ if remote_name: remote = self._registry.remote(remote_name) packages_props = self._remote_manager.search_packages(remote, reference, query) ordered_packages = OrderedDict(sorted(packages_props.items())) manifest = self._remote_manager.get_conan_manifest(reference, remote) recipe_hash = manifest.summary_hash else: searcher = DiskSearchManager(self._client_cache) packages_props = searcher.search_packages(reference, query) ordered_packages = OrderedDict(sorted(packages_props.items())) try: recipe_hash = self._client_cache.load_manifest(reference).summary_hash except IOError: # It could not exist in local recipe_hash = None if outdated and recipe_hash: ordered_packages = filter_outdated(ordered_packages, recipe_hash) return ordered_packages, reference, recipe_hash, query
def search_packages(self, reference=None, remote=None, query=None, outdated=False): """ Return the single information saved in conan.vars about all the packages or the packages which match with a pattern Attributes: pattern = string to match packages remote = search on another origin to get packages info packages_pattern = String query with binary packages properties: "arch=x86 AND os=Windows" """ if remote: remote = RemoteRegistry(self._client_cache.registry, self._user_io).remote(remote) packages_props = self._remote_manager.search_packages(remote, reference, query) ordered_packages = OrderedDict(sorted(packages_props.items())) manifest = self._remote_manager.get_conan_digest(reference, remote) recipe_hash = manifest.summary_hash else: searcher = DiskSearchManager(self._client_cache) packages_props = searcher.search_packages(reference, query) ordered_packages = OrderedDict(sorted(packages_props.items())) try: recipe_hash = self._client_cache.load_manifest(reference).summary_hash except IOError: # It could not exist in local recipe_hash = None if outdated and recipe_hash: ordered_packages = filter_outdated(ordered_packages, recipe_hash) return ordered_packages, reference, recipe_hash, query
def remove(self, pattern, remote, src=None, build_ids=None, package_ids_filter=None, force=False, packages_query=None, outdated=False): """ Remove local/remote conans, package folders, etc. @param src: Remove src folder @param pattern: it could be OpenCV* or OpenCV or a ConanFileReference @param build_ids: Lists with ids or empty for all. (Its a filter) @param package_ids_filter: Lists with ids or empty for all. (Its a filter) @param force: if True, it will be deleted without requesting anything @param packages_query: Only if src is a reference. Query settings and options """ if remote and (build_ids is not None or src): raise ConanException("Remotes don't have 'build' or 'src' folder, just packages") if remote: remote = self._registry.remote(remote) references = self._remote_manager.search_recipes(remote, pattern) else: disk_search = DiskSearchManager(self._client_cache) references = disk_search.search_recipes(pattern) if not references: self._user_io.out.warn("No package recipe matches '%s'" % str(pattern)) return deleted_refs = [] for reference in references: assert isinstance(reference, ConanFileReference) package_ids = package_ids_filter if packages_query or outdated: # search packages if remote: packages = self._remote_manager.search_packages(remote, reference, packages_query) else: packages = disk_search.search_packages(reference, packages_query) if outdated: if remote: recipe_hash = self._remote_proxy.get_conan_manifest(reference).summary_hash else: recipe_hash = self._client_cache.load_manifest(reference).summary_hash packages = filter_outdated(packages, recipe_hash) if package_ids_filter: package_ids = [p for p in packages if p in package_ids_filter] else: package_ids = list(packages.keys()) if not package_ids: self._user_io.out.warn("No matching packages to remove for %s" % str(reference)) continue if self._ask_permission(reference, src, build_ids, package_ids, force): deleted_refs.append(reference) if remote: self._remote_remove(reference, package_ids, remote) else: deleted_refs.append(reference) self._local_remove(reference, src, build_ids, package_ids) if not remote: self._client_cache.delete_empty_dirs(deleted_refs)
class SearchTest(unittest.TestCase): def setUp(self): folder = temp_folder() paths = SimplePaths(folder) search_adapter = DiskSearchAdapter() self.search_manager = DiskSearchManager(paths, search_adapter) os.chdir(paths.store) self.paths = paths def basic_test2(self): conan_ref1 = ConanFileReference.loads("opencv/2.4.10@lasote/testing") root_folder = str(conan_ref1).replace("@", "/") artifacts = ["a", "b", "c"] reg1 = "%s/%s" % (root_folder, EXPORT_FOLDER) os.makedirs(reg1) for artif_id in artifacts: build1 = "%s/%s/%s" % (root_folder, BUILD_FOLDER, artif_id) artif1 = "%s/%s/%s" % (root_folder, PACKAGES_FOLDER, artif_id) os.makedirs(build1) info = ConanInfo().loads("[settings]\n[options]") save(os.path.join(artif1, CONANINFO), info.dumps()) packages = self.search_manager.search_packages(conan_ref1, "") all_artif = [_artif for _artif in sorted(packages)] self.assertEqual(all_artif, artifacts) def pattern_test(self): refs = ["opencv/2.4.%s@lasote/testing" % ref for ref in ("1", "2", "3")] refs = [ConanFileReference.loads(ref) for ref in refs] for ref in refs: root_folder = str(ref).replace("@", "/") reg1 = "%s/%s" % (root_folder, EXPORT_FOLDER) os.makedirs(reg1) recipes = self.search_manager.search("opencv/*@lasote/testing") self.assertEqual(recipes, refs) def case_insensitive_test(self): root_folder2 = "sdl/1.5/lasote/stable" conan_ref2 = ConanFileReference.loads("sdl/1.5@lasote/stable") os.makedirs("%s/%s" % (root_folder2, EXPORT_FOLDER)) root_folder3 = "assimp/0.14/phil/testing" conan_ref3 = ConanFileReference.loads("assimp/0.14@phil/testing") os.makedirs("%s/%s" % (root_folder3, EXPORT_FOLDER)) root_folder4 = "sdl/2.10/lasote/stable" conan_ref4 = ConanFileReference.loads("sdl/2.10@lasote/stable") os.makedirs("%s/%s" % (root_folder4, EXPORT_FOLDER)) root_folder5 = "SDL_fake/1.10/lasote/testing" conan_ref5 = ConanFileReference.loads("SDL_fake/1.10@lasote/testing") os.makedirs("%s/%s" % (root_folder5, EXPORT_FOLDER)) # Case insensitive searches search_adapter = DiskSearchAdapter() search_manager = DiskSearchManager(self.paths, search_adapter) reg_conans = sorted([str(_reg) for _reg in search_manager.search("*")]) self.assertEqual(reg_conans, [str(conan_ref5), str(conan_ref3), str(conan_ref2), str(conan_ref4)]) reg_conans = sorted([str(_reg) for _reg in search_manager.search(pattern="sdl*")]) self.assertEqual(reg_conans, [str(conan_ref5), str(conan_ref2), str(conan_ref4)]) # Case sensitive search self.assertEqual(str(search_manager.search(pattern="SDL*", ignorecase=False)[0]), str(conan_ref5))
def remove(self, pattern, remote, src=None, build_ids=None, package_ids_filter=None, force=False, packages_query=None, outdated=False): """ Remove local/remote conans, package folders, etc. @param src: Remove src folder @param pattern: it could be OpenCV* or OpenCV or a ConanFileReference @param build_ids: Lists with ids or empty for all. (Its a filter) @param package_ids_filter: Lists with ids or empty for all. (Its a filter) @param force: if True, it will be deleted without requesting anything @param packages_query: Only if src is a reference. Query settings and options """ if remote and (build_ids is not None or src): raise ConanException( "Remotes don't have 'build' or 'src' folder, just packages") if remote: remote = self._registry.remote(remote) references = self._remote_manager.search_recipes(remote, pattern) else: disk_search = DiskSearchManager(self._client_cache) references = disk_search.search_recipes(pattern) if not references: self._user_io.out.warn("No package recipe matches '%s'" % str(pattern)) return deleted_refs = [] for reference in references: assert isinstance(reference, ConanFileReference) package_ids = package_ids_filter if packages_query or outdated: # search packages if remote: packages = self._remote_manager.search_packages( remote, reference, packages_query) else: packages = disk_search.search_packages( reference, packages_query) if outdated: if remote: recipe_hash = self._remote_proxy.get_conan_manifest( reference).summary_hash else: recipe_hash = self._client_cache.load_manifest( reference).summary_hash packages = filter_outdated(packages, recipe_hash) if package_ids_filter: package_ids = [ p for p in packages if p in package_ids_filter ] else: package_ids = list(packages.keys()) if not package_ids: self._user_io.out.warn( "No matching packages to remove for %s" % str(reference)) continue if self._ask_permission(reference, src, build_ids, package_ids, force): deleted_refs.append(reference) if remote: self._remote_remove(reference, package_ids, remote) else: deleted_refs.append(reference) self._local_remove(reference, src, build_ids, package_ids) if not remote: self._client_cache.delete_empty_dirs(deleted_refs)
class SearchTest(unittest.TestCase): def setUp(self): folder = temp_folder() paths = SimplePaths(folder) search_adapter = DiskSearchAdapter() self.search_manager = DiskSearchManager(paths, search_adapter) os.chdir(paths.store) self.paths = paths def basic_test2(self): conan_ref1 = ConanFileReference.loads("opencv/2.4.10@lasote/testing") root_folder = str(conan_ref1).replace("@", "/") artifacts = ["a", "b", "c"] reg1 = "%s/%s" % (root_folder, EXPORT_FOLDER) os.makedirs(reg1) for artif_id in artifacts: build1 = "%s/%s/%s" % (root_folder, BUILD_FOLDER, artif_id) artif1 = "%s/%s/%s" % (root_folder, PACKAGES_FOLDER, artif_id) os.makedirs(build1) info = ConanInfo().loads("[settings]\n[options]") save(os.path.join(artif1, CONANINFO), info.dumps()) packages = self.search_manager.search_packages(conan_ref1, "") all_artif = [_artif for _artif in sorted(packages)] self.assertEqual(all_artif, artifacts) def pattern_test(self): refs = [ "opencv/2.4.%s@lasote/testing" % ref for ref in ("1", "2", "3") ] refs = [ConanFileReference.loads(ref) for ref in refs] for ref in refs: root_folder = str(ref).replace("@", "/") reg1 = "%s/%s" % (root_folder, EXPORT_FOLDER) os.makedirs(reg1) recipes = self.search_manager.search("opencv/*@lasote/testing") self.assertEqual(recipes, refs) def case_insensitive_test(self): root_folder2 = "sdl/1.5/lasote/stable" conan_ref2 = ConanFileReference.loads("sdl/1.5@lasote/stable") os.makedirs("%s/%s" % (root_folder2, EXPORT_FOLDER)) root_folder3 = "assimp/0.14/phil/testing" conan_ref3 = ConanFileReference.loads("assimp/0.14@phil/testing") os.makedirs("%s/%s" % (root_folder3, EXPORT_FOLDER)) root_folder4 = "sdl/2.10/lasote/stable" conan_ref4 = ConanFileReference.loads("sdl/2.10@lasote/stable") os.makedirs("%s/%s" % (root_folder4, EXPORT_FOLDER)) root_folder5 = "SDL_fake/1.10/lasote/testing" conan_ref5 = ConanFileReference.loads("SDL_fake/1.10@lasote/testing") os.makedirs("%s/%s" % (root_folder5, EXPORT_FOLDER)) # Case insensitive searches search_adapter = DiskSearchAdapter() search_manager = DiskSearchManager(self.paths, search_adapter) reg_conans = sorted([str(_reg) for _reg in search_manager.search("*")]) self.assertEqual(reg_conans, [ str(conan_ref5), str(conan_ref3), str(conan_ref2), str(conan_ref4) ]) reg_conans = sorted( [str(_reg) for _reg in search_manager.search(pattern="sdl*")]) self.assertEqual(reg_conans, [str(conan_ref5), str(conan_ref2), str(conan_ref4)]) # Case sensitive search self.assertEqual( str(search_manager.search(pattern="SDL*", ignorecase=False)[0]), str(conan_ref5))