diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-09-24 05:48:33 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-09-24 05:48:33 +0000 |
commit | 3b645fcd73d9a1c3c2fdaa682f18f90fad5184ce (patch) | |
tree | f6117bef560360e995528364a92cbe0affdf1c14 /pym/portage/cache | |
parent | c301287914076f616562960d5e2f1fc1b0f41a8d (diff) | |
download | portage-3b645fcd73d9a1c3c2fdaa682f18f90fad5184ce.tar.gz portage-3b645fcd73d9a1c3c2fdaa682f18f90fad5184ce.tar.bz2 portage-3b645fcd73d9a1c3c2fdaa682f18f90fad5184ce.zip |
Misc performance enhancements. Thanks to Marat Radchenko
<marat@slonopotamus.org> for this patch from bug #276813.
svn path=/main/trunk/; revision=14398
Diffstat (limited to 'pym/portage/cache')
-rw-r--r-- | pym/portage/cache/flat_hash.py | 17 | ||||
-rw-r--r-- | pym/portage/cache/metadata.py | 2 |
2 files changed, 8 insertions, 11 deletions
diff --git a/pym/portage/cache/flat_hash.py b/pym/portage/cache/flat_hash.py index 918c935f5..983055a4b 100644 --- a/pym/portage/cache/flat_hash.py +++ b/pym/portage/cache/flat_hash.py @@ -9,6 +9,7 @@ from portage.cache import cache_errors import errno import stat import sys +import os as _os from portage import os from portage import _encodings from portage import _unicode_encode @@ -32,33 +33,33 @@ class database(fs_template.FsBased): self._ensure_dirs() def _getitem(self, cpv): - fp = os.path.join(self.location, cpv) + # Don't use os.path.join, for better performance. + fp = self.location + _os.sep + cpv try: myf = codecs.open(_unicode_encode(fp, encoding=_encodings['fs'], errors='strict'), mode='r', encoding=_encodings['repo.content'], errors='replace') try: - d = self._parse_data(myf.readlines(), cpv) + d = self._parse_data(myf.read().split("\n"), cpv) if '_mtime_' not in d: # Backward compatibility with old cache # that uses mtime mangling. - d['_mtime_'] = long(os.fstat(myf.fileno()).st_mtime) + d['_mtime_'] = long(_os.fstat(myf.fileno()).st_mtime) return d finally: myf.close() except (IOError, OSError) as e: if e.errno != errno.ENOENT: raise cache_errors.CacheCorruption(cpv, e) - raise KeyError(cpv) + raise KeyError(cpv, e) def _parse_data(self, data, cpv): try: - d = dict(map(lambda x:x.rstrip("\n").split("=", 1), data)) + return dict( x.split("=", 1) for x in data ) except ValueError as e: # If a line is missing an "=", the split length is 1 instead of 2. raise cache_errors.CacheCorruption(cpv, e) - return d def _setitem(self, cpv, values): # import pdb;pdb.set_trace() @@ -101,7 +102,6 @@ class database(fs_template.FsBased): os.remove(fp) raise cache_errors.CacheCorruption(cpv, e) - def _delitem(self, cpv): # import pdb;pdb.set_trace() try: @@ -112,11 +112,9 @@ class database(fs_template.FsBased): else: raise cache_errors.CacheCorruption(cpv, e) - def __contains__(self, cpv): return os.path.exists(os.path.join(self.location, cpv)) - def __iter__(self): """generator for walking the dir struct""" dirs = [self.location] @@ -140,4 +138,3 @@ class database(fs_template.FsBased): continue yield p[len_base+1:] dirs.pop(0) - diff --git a/pym/portage/cache/metadata.py b/pym/portage/cache/metadata.py index 81b1f17fd..2704bd513 100644 --- a/pym/portage/cache/metadata.py +++ b/pym/portage/cache/metadata.py @@ -52,7 +52,7 @@ class database(flat_hash.database): d.clear() try: for i, key in enumerate(self.auxdbkey_order): - d[key] = data[i].rstrip("\n") + d[key] = data[i] except IndexError: pass break |