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()
def calculate_default_install_item_set(self): """ calculate the set of iids to install from the "MAIN_INSTALL_TARGETS" variable. Full set of install iids and orphan iids are also writen to variable. """ if "MAIN_INSTALL_TARGETS" not in var_list: raise ValueError("'MAIN_INSTALL_TARGETS' was not defined") for os_name in var_list.resolve_to_list("$(TARGET_OS_NAMES)"): InstallItem.begin_get_for_specific_os(os_name) self.installState.root_install_items.extend(var_list.resolve_to_list("$(MAIN_INSTALL_TARGETS)")) self.installState.root_install_items = filter(bool, self.installState.root_install_items) self.installState.calculate_full_install_items_set(self) var_list.set_var("__FULL_LIST_OF_INSTALL_TARGETS__").extend(self.installState.full_install_items) var_list.set_var("__ORPHAN_INSTALL_TARGETS__").extend(self.installState.orphan_install_items)
def read_require(self, a_node): #dependencies_file_path = var_stack.resolve("$(SITE_REQUIRE_FILE_PATH)") if a_node.isMapping(): for identifier, contents in a_node: logging.debug("%s: %s", identifier, str(contents)) if identifier in self.install_definitions_index: self.install_definitions_index[identifier].required_by.extend([required_iid.value for required_iid in contents]) else: # require file might contain IIDs form previous installations that are no longer in the index item_not_in_index = InstallItem() item_not_in_index.iid = identifier item_not_in_index.required_by.extend([required_iid.value for required_iid in contents]) self.install_definitions_index[identifier] = item_not_in_index
def add_deafult_items(self): all_items_item = InstallItem() all_items_item.iid = "__ALL_ITEMS_IID__" all_items_item.name = "All IIDs" for item_name in self.install_definitions_index: all_items_item.add_depend(item_name) self.install_definitions_index["__ALL_ITEMS_IID__"] = all_items_item all_guids_item = InstallItem() all_guids_item.iid = "__ALL_GUIDS_IID__" all_guids_item.name = "All GUIDs" for guid in guid_list(self.install_definitions_index): all_guids_item.add_depend(guid) self.install_definitions_index["__ALL_GUIDS_IID__"] = all_guids_item