コード例 #1
0
ファイル: instlAdmin.py プロジェクト: ynonp/instl
    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
ファイル: instlClient.py プロジェクト: ynonp/instl
 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
ファイル: instlClient.py プロジェクト: ynonp/instl
 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()