]> code.ossystems Code Review - openembedded-core.git/commitdiff
cache: do not chdir unnecessarily
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Fri, 4 Jun 2010 12:04:42 +0000 (14:04 +0200)
committerRichard Purdie <rpurdie@linux.intel.com>
Fri, 2 Jul 2010 14:41:35 +0000 (15:41 +0100)
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>
bitbake/lib/bb/cache.py

index 59ea8cfc7bca6258a519013a8c8f5658c5c42c0f..f77a3f185e335dfe718327deb2d03089fa904f76 100644 (file)
@@ -444,6 +444,7 @@ class Cache:
         Load and parse one .bb build file
         Return the data and whether parsing resulted in the file being skipped
         """
+        chdir_back = False
 
         from bb import data, parse
 
@@ -451,15 +452,22 @@ class Cache:
         data.setVar('TMPDIR', data.getVar('TMPDIR', config, 1) or "", config)
         bbfile_loc = os.path.abspath(os.path.dirname(bbfile))
         oldpath = os.path.abspath(os.getcwd())
-        if parse.cached_mtime_noerror(bbfile_loc):
-            os.chdir(bbfile_loc)
+        parse.cached_mtime_noerror(bbfile_loc)
         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:
             bb_data = parse.handle(bbfile, bb_data) # read .bb data
-            os.chdir(oldpath)
+            if chdir_back: os.chdir(oldpath)
             return bb_data
         except:
-            os.chdir(oldpath)
+            if chdir_back: os.chdir(oldpath)
             raise
 
 def init(cooker):