cache: do not chdir unnecessarily

previously we called chdir() twice for every target, this patch reduces
the amount of chdir() calls via openembedded master from some 16000 to
4.

(Bitbake rev: fa45f5625e13a82bec70d5f10815f52fbe705166)

Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
Bernhard Reutner-Fischer 2010-06-04 14:04:42 +02:00 committed by Richard Purdie
parent 726802b980
commit 16553b8826
1 changed files with 12 additions and 4 deletions

View File

@ -444,6 +444,7 @@ class Cache:
Load and parse one .bb build file Load and parse one .bb build file
Return the data and whether parsing resulted in the file being skipped Return the data and whether parsing resulted in the file being skipped
""" """
chdir_back = False
from bb import data, parse from bb import data, parse
@ -451,15 +452,22 @@ class Cache:
data.setVar('TMPDIR', data.getVar('TMPDIR', config, 1) or "", config) data.setVar('TMPDIR', data.getVar('TMPDIR', config, 1) or "", config)
bbfile_loc = os.path.abspath(os.path.dirname(bbfile)) bbfile_loc = os.path.abspath(os.path.dirname(bbfile))
oldpath = os.path.abspath(os.getcwd()) oldpath = os.path.abspath(os.getcwd())
if parse.cached_mtime_noerror(bbfile_loc): parse.cached_mtime_noerror(bbfile_loc)
os.chdir(bbfile_loc)
bb_data = data.init_db(config) bb_data = data.init_db(config)
# The ConfHandler first looks if there is a TOPDIR and if not
# then it would call getcwd().
# Previously, we chdir()ed to bbfile_loc, called the handler
# and finally chdir()ed back, a couple of thousand times. We now
# just fill in TOPDIR to point to bbfile_loc if there is no TOPDIR yet.
if not data.getVar('TOPDIR', bb_data):
chdir_back = True
data.setVar('TOPDIR', bbfile_loc, bb_data)
try: try:
bb_data = parse.handle(bbfile, bb_data) # read .bb data bb_data = parse.handle(bbfile, bb_data) # read .bb data
os.chdir(oldpath) if chdir_back: os.chdir(oldpath)
return bb_data return bb_data
except: except:
os.chdir(oldpath) if chdir_back: os.chdir(oldpath)
raise raise
def init(cooker): def init(cooker):