Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: tools/isolate/isolate_common.py

Issue 10540172: Add variables support to trace_test_cases.py, removing the last use of --product-dir. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/isolate/isolate.py ('k') | tools/isolate/isolate_smoke_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/isolate/isolate_common.py
diff --git a/tools/isolate/isolate_common.py b/tools/isolate/isolate_common.py
index e37781c93a5e9ed7264a91483566d6b73e868533..b04b8a15462e75f4f453a58d504713196ab9ca2f 100644
--- a/tools/isolate/isolate_common.py
+++ b/tools/isolate/isolate_common.py
@@ -9,8 +9,13 @@
import logging
import os
import posixpath
+import re
import sys
+import trace_inputs
+
+
+PATH_VARIABLES = ('DEPTH', 'PRODUCT_DIR')
KEY_TRACKED = 'isolate_dependency_tracked'
KEY_UNTRACKED = 'isolate_dependency_untracked'
@@ -54,43 +59,86 @@ def get_flavor():
def default_blacklist(f):
"""Filters unimportant files normally ignored."""
return (
- f.endswith('.pyc') or
+ f.endswith(('.pyc', 'testserver.log')) or
_GIT_PATH in f or
_SVN_PATH in f)
-def generate_dict(files, cwd_dir, product_dir):
- """Converts the list of files into a .isolate dictionary.
+def classify_files(files):
+ """Converts the list of files into a .isolate 'variables' dictionary.
Arguments:
- - files: list of files to generate a dictionary out of.
- - cwd_dir: directory to base all the files from, relative to root_dir.
- - product_dir: directory to replace with <(PRODUCT_DIR), relative to root_dir.
+ - files: list of files names to generate a dictionary out of.
+ """
+ files = list(files)
+ tracked = sorted(f for f in files if not f.endswith('/') and ' ' not in f)
+ untracked = sorted(f for f in files if f.endswith('/') or ' ' in f)
+ variables = {}
+ if tracked:
+ variables[KEY_TRACKED] = tracked
+ if untracked:
+ variables[KEY_UNTRACKED] = untracked
+ return variables
+
+
+def generate_simplified(files, root_dir, variables, relative_cwd):
+ """Generates a clean and complete .isolate 'variables' dictionary.
+
+ Cleans up and extracts only files from within root_dir then processes
+ variables and relative_cwd.
"""
- cwd_dir = cleanup_path(cwd_dir)
- product_dir = cleanup_path(product_dir)
+ # Constants.
+ # Skip log in PRODUCT_DIR.
+ LOG_FILE = re.compile(r'^\<\(PRODUCT_DIR\)\/[^/]+\.log$')
+ EXECUTABLE = re.compile(
+ r'^(\<\(PRODUCT_DIR\)\/[^/\.]+)' +
+ re.escape(variables.get('EXECUTABLE_SUFFIX', '')) +
+ r'$')
+
+ # Preparation work.
+ relative_cwd = cleanup_path(relative_cwd)
+ # Creates the right set of variables here. We only care about
+ # PATH_VARIABLES.
+ variables = dict(
+ ('<(%s)' % k, variables[k]) for k in PATH_VARIABLES if k in variables)
+
+ # Actual work: Process the files.
+ files = trace_inputs.extract_directories(root_dir, files)
+ files = (f.replace_variables(variables) for f in files)
def fix(f):
"""Bases the file on the most restrictive variable."""
logging.debug('fix(%s)' % f)
# Important, GYP stores the files with / and not \.
f = f.replace(os.path.sep, '/')
- if product_dir and f.startswith(product_dir):
- return '<(PRODUCT_DIR)/%s' % f[len(product_dir):]
- else:
- # cwd_dir is usually the directory containing the gyp file. It may be
+ # If it's not already a variable.
+ if not f.startswith('<'):
+ # relative_cwd is usually the directory containing the gyp file. It may be
# empty if the whole directory containing the gyp file is needed.
- return posix_relpath(f, cwd_dir) or './'
-
- corrected = [fix(f) for f in files]
- tracked = [f for f in corrected if not f.endswith('/') and ' ' not in f]
- untracked = [f for f in corrected if f.endswith('/') or ' ' in f]
- variables = {}
- if tracked:
- variables[KEY_TRACKED] = tracked
- if untracked:
- variables[KEY_UNTRACKED] = untracked
- return variables
+ f = posix_relpath(f, relative_cwd) or './'
+
+ # Now strips off known files we want to ignore and to any specific mangling
+ # as necessary. It's easier to do it here than generate a blacklist.
+ match = EXECUTABLE.match(f)
+ if match:
+ return match.group(1) + '<(EXECUTABLE_SUFFIX)'
+ if LOG_FILE.match(f):
+ return None
+ return f
+
+ return classify_files(filter(None, (fix(f.path) for f in files)))
+
+
+def generate_isolate(files, root_dir, variables, relative_cwd):
+ """Generates a clean and complete .isolate file."""
+ result = generate_simplified(files, root_dir, variables, relative_cwd)
+ return {
+ 'conditions': [
+ ['OS=="%s"' % get_flavor(), {
+ 'variables': result,
+ }],
+ ],
+ }
def pretty_print(variables, stdout):
« no previous file with comments | « tools/isolate/isolate.py ('k') | tools/isolate/isolate_smoke_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698