Пример #1
0
    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")
Пример #2
0
 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
Пример #3
0
 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()
Пример #4
0
 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)
Пример #5
0
 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
Пример #6
0
    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