| Index: chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py b/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py
|
| index 42da7a145853cdc1000aad860c4cfff101efe1bb..3bfbec22f6d316d7c7d836a26b31a28ab879f9b8 100755
|
| --- a/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py
|
| +++ b/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py
|
| @@ -32,6 +32,7 @@ ways:
|
|
|
| import optparse
|
| import os
|
| +import re
|
| import shutil
|
| import sys
|
|
|
| @@ -171,6 +172,22 @@ def ReadSources(roots=[], source_files=[], need_source_text=False,
|
| return sources
|
|
|
|
|
| +def _GetBase(sources):
|
| + '''Gets the closure base.js file if present among the sources.
|
| +
|
| + Args:
|
| + sources: Dictionary with input path names as keys and SourceWithPaths
|
| + as values.
|
| + Returns:
|
| + SourceWithPath: The source file providing the goog namespace.
|
| + '''
|
| + for source in sources.itervalues():
|
| + if (os.path.basename(source.GetInPath()) == 'base.js' and
|
| + 'goog' in source.provides):
|
| + return source
|
| + Die('goog.base not provided by any file.')
|
| +
|
| +
|
| def CalcDeps(bundle, sources, top_level):
|
| '''Calculates dependencies for a set of top-level files.
|
|
|
| @@ -180,23 +197,36 @@ def CalcDeps(bundle, sources, top_level):
|
| top_level, list: List of top-level input paths to calculate dependencies
|
| for.
|
| '''
|
| - def GetBase(sources):
|
| - for source in sources.itervalues():
|
| - if (os.path.basename(source.GetInPath()) == 'base.js' and
|
| - 'goog' in source.provides):
|
| - return source
|
| - Die('goog.base not provided by any file')
|
| -
|
| providers = [s for s in sources.itervalues() if len(s.provides) > 0]
|
| deps = depstree.DepsTree(providers)
|
| namespaces = []
|
| for path in top_level:
|
| namespaces.extend(sources[path].requires)
|
| # base.js is an implicit dependency that always goes first.
|
| - bundle.Add(GetBase(sources))
|
| + bundle.Add(_GetBase(sources))
|
| bundle.Add(deps.GetDependencies(namespaces))
|
|
|
|
|
| +def _MarkAsCompiled(sources):
|
| + '''Sets COMPILED to true in the Closure base.js source.
|
| +
|
| + Args:
|
| + sources: Dictionary with input paths names as keys and SourcWithPaths
|
| + objects as values.
|
| + '''
|
| + base = _GetBase(sources)
|
| + new_content, count = re.subn('^var COMPILED = false;$',
|
| + 'var COMPILED = true;',
|
| + base.GetSource(),
|
| + count=1,
|
| + flags=re.MULTILINE)
|
| + if count != 1:
|
| + Die('COMPILED var assignment not found in %s' % base.GetInPath())
|
| + sources[base.GetInPath()] = SourceWithPaths(
|
| + new_content,
|
| + base.GetInPath(),
|
| + base.GetOutPath())
|
| +
|
| def LinkOrCopyFiles(sources, dest_dir):
|
| '''Copies a list of sources to a destination directory.'''
|
|
|
| @@ -278,11 +308,12 @@ def main():
|
| options, args = CreateOptionParser().parse_args()
|
| if len(args) < 1:
|
| Die('At least one top-level source file must be specified.')
|
| + will_output_source_text = options.mode in ('bundle', 'compressed_bundle')
|
| path_rewriter = PathRewriter(options.prefix_map)
|
| - sources = ReadSources(options.roots,
|
| - args,
|
| - options.mode in ('bundle', 'compressed_bundle'),
|
| + sources = ReadSources(options.roots, args, will_output_source_text,
|
| path_rewriter)
|
| + if will_output_source_text:
|
| + _MarkAsCompiled(sources)
|
| bundle = Bundle()
|
| if len(options.roots) > 0:
|
| CalcDeps(bundle, sources, args)
|
|
|