def analyse_keywords(self, keywords=None): """This will scan the installed packages db and analyze the keywords used for installation and produce a report on them. """ print() system_keywords = portage.settings["ACCEPT_KEYWORDS"] arch = portage.settings["ARCH"] if self.options["prefix"]: # build a new keyword for testing system_keywords = "~" + arch + "-linux" if self.options["verbose"] or self.options["prefix"]: print("Current system ARCH =", arch) print("Current system ACCEPT_KEYWORDS =", system_keywords) system_keywords = system_keywords.split() self.printer = AnalysisPrinter( "keywords", self.options["verbose"], system_keywords, width=self.options["width"], prepend=self.options["prepend"]) self.analyser = KeywordAnalyser( arch, system_keywords, portage.db[portage.root]["vartree"].dbapi) #self.analyser.set_order(portage.settings["USE"].split()) # only for testing test_use = portage.settings["USE"].split() if self.options['prefix'] and 'prefix' not in test_use: print("ANALYSE_KEYWORDS() 'prefix' flag not found in system", "USE flags!!! appending for testing") print() test_use.append('prefix') self.analyser.set_order(test_use) # /end testing if self.options["verbose"]: cpvs = portage.db[portage.root]["vartree"].dbapi.cpv_all() #print "Total number of installed ebuilds =", len(cpvs) keyword_users = gather_keywords_info( cpvs=cpvs, system_keywords=system_keywords, use_portage=self.options['portage'], keywords=keywords, analyser = self.analyser ) blankline = nl else: keyword_users = gather_keywords_info( system_keywords=system_keywords, use_portage=self.options['portage'], keywords=keywords, analyser = self.analyser ) blankline = lambda: None #print keyword_users keyword_keys = sorted(keyword_users) if self.options["verbose"]: print(" Keyword System #pkgs cat/pkg-ver") elif not self.options['quiet']: print(" Keyword System #pkgs") for keyword in keyword_keys: kwd_stable = keyword_users[keyword]["stable"] if len(kwd_stable): self.printer(keyword, " ", kwd_stable) blankline() kwd_testing = keyword_users[keyword]["testing"] if len(kwd_testing): self.printer(keyword, "~", kwd_testing) blankline() kwd_missing = keyword_users[keyword]["missing"] if len(kwd_missing): self.printer(keyword, "-", kwd_missing) blankline if not self.options['quiet']: if self.analyser.mismatched: print("_________________________________________________") print(("The following packages were found to have a \n" + "different recorded ARCH than the current system ARCH")) for cpv in self.analyser.mismatched: print("\t", pp.cpv(cpv)) print("===================================================") print("Total number of keywords in report =", pp.output.red(str(len(keyword_keys)))) if self.options["verbose"]: print("Total number of installed ebuilds =", pp.output.red(str(len(cpvs)))) print()
def rebuild_keywords(self): # print("Module action not yet available") # print() """This will scan the installed packages db and analyze the keywords used for installation and produce a report on them. """ system_keywords = portage.settings["ACCEPT_KEYWORDS"].split() output = RebuildPrinter( "keywords", self.options["pretend"], self.options["exact"], self.options["slot"], ) arch = portage.settings["ARCH"] if self.options["prefix"]: # build a new keyword for testing system_keywords = "~" + arch + "-linux" if self.options["verbose"] or self.options["prefix"]: print("Current system ARCH =", arch) print("Current system ACCEPT_KEYWORDS =", system_keywords) self.analyser = KeywordAnalyser( arch, system_keywords, portage.db[portage.root]["vartree"].dbapi ) # self.analyser.set_order(portage.settings["USE"].split()) # only for testing test_use = portage.settings["USE"].split() if self.options["prefix"] and "prefix" not in test_use: print( "REBUILD_KEYWORDS() 'prefix' flag not found in system", "USE flags!!! appending for testing", ) print() test_use.append("prefix") self.analyser.set_order(test_use) # /end testing cpvs = portage.db[portage.root]["vartree"].dbapi.cpv_all() # print "Total number of installed ebuilds =", len(cpvs) pkgs, cp_counts = cpv_all_diff_keywords( cpvs=cpvs, system_keywords=system_keywords, use_portage=self.options["portage"], analyser=self.analyser, ) # print([pkgs[p][0].cpv for p in pkgs]) pkg_keys = [] if pkgs: pkg_keys = sorted(pkgs) # print(len(pkgs)) if self.options["pretend"] and not self.options["quiet"]: print() print( pp.globaloption( " -- These are the installed packages & keywords " + "that were detected" ) ) print( pp.globaloption( " to need keyword settings other " + "than the defaults." ) ) print() elif not self.options["quiet"]: print(" -- preparing pkgs for file entries") for pkg in pkg_keys: output(pkg, pkgs[pkg], cp_counts[pkg]) if not self.options["quiet"]: if self.analyser.mismatched: print("_________________________________________________") print( ( "The following packages were found to have a \n" + "different recorded ARCH than the current system ARCH" ) ) for cpv in self.analyser.mismatched: print("\t", pp.cpv(cpv)) print("===================================================") print( "Total number of entries in report =", pp.output.red(str(len(pkg_keys))) ) if self.options["verbose"]: print( "Total number of installed ebuilds =", pp.output.red(str(len(cpvs))) ) print() if not self.options["pretend"]: filepath = os.path.expanduser("~/package.keywords.test") self.save_file(filepath, output.lines)