From: Zac Medico Date: Thu, 30 Apr 2009 06:49:50 +0000 (-0000) Subject: Add support in MetadataRegen for cleansing stale cache when only a subset X-Git-Tag: v2.1.6.12~139 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=516e2abe45e983f371a707f8183264bcd2b45b22;p=portage.git Add support in MetadataRegen for cleansing stale cache when only a subset of packages are processed. (trunk r13255) svn path=/main/branches/2.1.6/; revision=13434 --- diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 50e4f265b..15739d738 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -11564,9 +11564,7 @@ class MetadataRegen(PollScheduler): if cp_iter is None: cp_iter = self._iter_every_cp() # We can globally cleanse stale cache only if we - # iterate over every single cp. TODO: Add support - # to cleanse cache for the specific cp values that - # are processed. + # iterate over every single cp. self._global_cleanse = True self._cp_iter = cp_iter @@ -11581,6 +11579,7 @@ class MetadataRegen(PollScheduler): unregister=self._unregister) self._valid_pkgs = set() + self._cp_set = set() self._process_iter = self._iter_metadata_processes() self.returncode = os.EX_OK self._error_count = 0 @@ -11597,8 +11596,10 @@ class MetadataRegen(PollScheduler): def _iter_metadata_processes(self): portdb = self._portdb valid_pkgs = self._valid_pkgs + cp_set = self._cp_set for cp in self._cp_iter: + cp_set.add(cp) portage.writemsg_stdout("Processing %s\n" % cp) cpv_list = portdb.cp_list(cp) for cpv in cpv_list: @@ -11616,6 +11617,12 @@ class MetadataRegen(PollScheduler): from portage.cache.cache_errors import CacheError dead_nodes = {} + while self._schedule(): + self._poll_loop() + + while self._jobs: + self._poll_loop() + if self._global_cleanse: for mytree in portdb.porttrees: try: @@ -11627,14 +11634,23 @@ class MetadataRegen(PollScheduler): del e dead_nodes = None break + else: + cp_set = self._cp_set + cpv_getkey = portage.cpv_getkey + for mytree in portdb.porttrees: + try: + dead_nodes[mytree] = set(cpv for cpv in \ + portdb.auxdb[mytree].iterkeys() \ + if cpv_getkey(cpv) in cp_set) + except CacheError, e: + portage.writemsg("Error listing cache entries for " + \ + "'%s': %s, continuing...\n" % (mytree, e), + noiselevel=-1) + del e + dead_nodes = None + break - while self._schedule(): - self._poll_loop() - - while self._jobs: - self._poll_loop() - - if self._global_cleanse and dead_nodes: + if dead_nodes: for y in self._valid_pkgs: for mytree in portdb.porttrees: if portdb.findname2(y, mytree=mytree)[0]: diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 1b11fd06f..50974cd76 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -7167,6 +7167,8 @@ def dep_wordreduce(mydeplist,mysettings,mydbapi,mode,use_cache=1): def cpv_getkey(mycpv): myslash=mycpv.split("/") mysplit=pkgsplit(myslash[-1]) + if mysplit is None: + return None mylen=len(myslash) if mylen==2: return myslash[0]+"/"+mysplit[0]