def do_verify_index(self): self.read_yaml_file(var_list.resolve("$(__MAIN_INPUT_FILE__)")) info_map = svnTree.SVNTree() with open_for_read_file_or_url(var_list.resolve("$(INFO_MAP_FILE_URL)")) as rfd: info_map.read_from_text(rfd) # for each iid get full paths to it's sources iid_to_sources = defaultdict(list) InstallItem.begin_get_for_all_oses() for iid in sorted(self.install_definitions_index): with self.install_definitions_index[iid]: for source_var in var_list.get_configVar_obj("iid_source_var_list"): source = var_list.resolve_var_to_list(source_var) if source[2] in ("common", "Mac"): iid_to_sources[iid].append( ("/".join( ("Mac", source[0])), source[1])) if source[2] in ("common", "Win", "Win32", "Win64"): iid_to_sources[iid].append( ("/".join( ("Win", source[0])), source[1])) for iid in sorted(iid_to_sources): with self.install_definitions_index[iid]: iid_problem_messages = list() # check inherits for inheritee in var_list.resolve_var_to_list("iid_inherite"): if inheritee not in self.install_definitions_index: iid_problem_messages.append(" ".join( ("inherits from non existing", inheritee ) )) # check depends for dependee in var_list.resolve_var_to_list("iid_depend_list"): if dependee not in self.install_definitions_index: iid_problem_messages.append(" ".join( ("depends on non existing", dependee ) )) # check sources for source in iid_to_sources[iid]: map_item = info_map.get_item_at_path(source[0]) if map_item is None: iid_problem_messages.append(" ".join( ("source", quoteme_single(source[0]), "does not exist") )) else: if source[1] in ("!dir", "!dir_cont", "!files"): if map_item.isFile(): iid_problem_messages.append(" ".join( ("source", quoteme_single(source[0]), "is a file but type is", source[1]) )) else: file_list, dir_list = map_item.unsorted_sub_items() if source[1] == "!files" and len(file_list) == 0: iid_problem_messages.append(" ".join( ("source", quoteme_single(source[0]), "has no files but type is", source[1]) )) if source[1] in ("!dir", "!dir_cont") and len(file_list)+len(dir_list) == 0: iid_problem_messages.append(" ".join( ("source", quoteme_single(source[0]), "has no files or dirs but type is", source[1]) )) if source[1] == "!file" and not map_item.isFile(): iid_problem_messages.append(" ".join( ("source", quoteme_single(source[0]), "is a dir but type is", source[1]) )) if iid_problem_messages: print(iid+":") for problem_message in sorted(iid_problem_messages): print(" ", problem_message) self.find_cycles() print("index:", len(self.install_definitions_index), "iids") num_files = info_map.num_subs_in_tree(what="file") num_dirs = info_map.num_subs_in_tree(what="dir") print("info map:", num_files, "files in", num_dirs, "folders")
def needed_by(self, iid): try: from pyinstl import installItemGraph InstallItem.begin_get_for_all_oses() graph = installItemGraph.create_dependencies_graph(self.install_definitions_index) needed_by_list = installItemGraph.find_needed_by(graph, iid) InstallItem.reset_get_for_all_oses() return needed_by_list except ImportError: # no installItemGraph, no worry print("Could not load installItemGraph") return None
def needs(self, iid, out_list): """ return all items that depend on iid """ if iid not in self.install_definitions_index: raise KeyError(iid+" is not in index") InstallItem.begin_get_for_all_oses() with self.install_definitions_index[iid]: for dep in var_list.resolve_var_to_list("iid_depend_list"): if dep in self.install_definitions_index: out_list.append(dep) self.needs(dep, out_list) else: out_list.append(dep+"(missing)") InstallItem.reset_get_for_all_oses()