class dbapi:
_category_re = re.compile(r'^\w[-.+\w]*$')
_pkg_dir_name_re = re.compile(r'^\w[-+\w]*$')
+ _categories = None
def __init__(self):
pass
can delete the self._categories attribute in cases when the cached
categories become invalid and need to be regenerated.
"""
- if hasattr(self, "_categories"):
+ if self._categories is not None:
return self._categories
categories = set()
cat_pattern = re.compile(r'(.*)/.*')
self._match_cache = {}
def _clear_cache(self):
- if hasattr(self, "_categories"):
- del self._categories
+ if self._categories is not None:
+ self._categories = None
if self._match_cache:
self._match_cache = {}
else:
global settings
self.mysettings = config(clone=settings)
- self._categories = set(self.mysettings.categories)
# This is strictly for use in aux_get() doebuild calls when metadata
# is generated by the depend phase. It's safest to use a clone for
# this purpose because doebuild makes many changes to the config
The caller must ensure that lockdb() and unlockdb() are called
before and after this method.
"""
- if hasattr(self.vartree.dbapi, "_categories"):
- del self.vartree.dbapi._categories
+ if self.vartree.dbapi._categories is not None:
+ self.vartree.dbapi._categories = None
# When others_in_slot is supplied, the security check has already been
# done for this slot, so it shouldn't be repeated until the next
# replacement or unmerge operation.
we won't be able to later if they get unmerged (happens
when namespace changes).
"""
- if hasattr(self.vartree.dbapi, "_categories"):
- del self.vartree.dbapi._categories
+ if self.vartree.dbapi._categories is not None:
+ self.vartree.dbapi._categories = None
if self.myroot == "/" and \
"sys-apps" == self.cat and \
"portage" == pkgsplit(self.pkg)[0] and \