summaryrefslogtreecommitdiffstats
path: root/pym/portage/cache/flat_hash.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-09-24 05:48:33 +0000
committerZac Medico <zmedico@gentoo.org>2009-09-24 05:48:33 +0000
commit3b645fcd73d9a1c3c2fdaa682f18f90fad5184ce (patch)
treef6117bef560360e995528364a92cbe0affdf1c14 /pym/portage/cache/flat_hash.py
parentc301287914076f616562960d5e2f1fc1b0f41a8d (diff)
downloadportage-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/flat_hash.py')
-rw-r--r--pym/portage/cache/flat_hash.py17
1 files changed, 7 insertions, 10 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)
-