| Index: packagerChrome.py |
| diff --git a/packagerChrome.py b/packagerChrome.py |
| index bf28457acf544c84b276cab5f71fb089bfc4ba5d..cf636fa5090ba4a3708f2b2287e5e61f72a573e1 100644 |
| --- a/packagerChrome.py |
| +++ b/packagerChrome.py |
| @@ -7,12 +7,10 @@ import io |
| import json |
| import os |
| import re |
| -import shutil |
| from StringIO import StringIO |
| import struct |
| import subprocess |
| import sys |
| -import tempfile |
| from ensure_dependencies import read_deps |
| from packager import (readMetadata, getDefaultFileName, getBuildVersion, |
| @@ -142,6 +140,13 @@ def createManifest(params, files): |
| return manifest.encode('utf-8') |
| +def toJson(data): |
| + return json.dumps( |
| + data, ensure_ascii=False, sort_keys=True, |
| + indent=2, separators=(',', ': ') |
| + ).encode('utf-8') + '\n' |
| + |
| + |
| def create_bundles(params, files): |
| base_extension_path = params['baseDir'] |
| info_templates = { |
| @@ -149,62 +154,52 @@ def create_bundles(params, files): |
| 'edge': 'edgeInfo.js.tmpl', |
| 'gecko-webext': 'geckoInfo.js.tmpl' |
| } |
| - info_module = None |
| # Historically we didn't use relative paths when requiring modules, so in |
| # order for webpack to know where to find them we need to pass in a list of |
| # resolve paths. Going forward we should always use relative paths, once we |
| # do that consistently this can be removed. See issues 5760, 5761 and 5762. |
| - resolve_paths = ' '.join( |
| - [os.path.join(base_extension_path, dir, 'lib') |
| - for dir in ['', 'adblockpluscore', 'adblockplusui']] |
| - ) |
| + resolve_paths = [os.path.join(base_extension_path, dir, 'lib') |
| + for dir in ['', 'adblockpluscore', 'adblockplusui']] |
| - temp_dir = tempfile.mkdtemp() |
| - try: |
| - info_module = os.path.join(temp_dir, 'info.js') |
| - template = getTemplate(info_templates[params['type']]) |
| - with open(info_module, 'w') as info_file: |
| - info_file.write( |
| - template.render( |
| - basename=params['metadata'].get('general', 'basename'), |
| - version=params['metadata'].get('general', 'version') |
| - ).encode('utf-8') |
| - ) |
| + info_template = getTemplate(info_templates[params['type']]) |
| + info_module = info_template.render( |
| + basename=params['metadata'].get('general', 'basename'), |
| + version=params['metadata'].get('general', 'version') |
| + ).encode('utf-8') |
| - for item in params['metadata'].items('bundles'): |
| - name, value = item |
| - base_item_path = os.path.dirname(item.source) |
| - |
| - bundle_file = os.path.relpath(os.path.join(base_item_path, name), |
| - base_extension_path) |
| - entry_files = [os.path.join(base_item_path, module_path) |
| - for module_path in value.split()] |
| - subprocess.check_call( |
| - ['npm', 'run-script', 'webpack', '--silent'], |
| - cwd=os.path.dirname(__file__), |
| - env={ |
| - 'EXTENSION_PATH': base_extension_path, |
| - 'ENTRY_POINTS': ' '.join(entry_files), |
| - 'OUTPUT_PATH': temp_dir, |
| - 'BUNDLE_NAME': bundle_file, |
| - 'RESOLVE_PATHS': resolve_paths, |
| - 'INFO_PATH': info_module, |
| - 'PATH': os.environ['PATH'] |
| - } |
| - ) |
| - for file_name in [bundle_file, bundle_file + '.map']: |
| - with open(os.path.join(temp_dir, file_name), 'r') as f: |
| - files[file_name] = f.read() |
| - finally: |
| - shutil.rmtree(temp_dir) |
| + configuration = { |
| + 'bundles': [], |
| + 'extension_path': base_extension_path, |
| + 'info_module': info_module, |
| + 'resolve_paths': resolve_paths, |
| + } |
| + for item in params['metadata'].items('bundles'): |
| + name, value = item |
| + base_item_path = os.path.dirname(item.source) |
| + |
| + bundle_file = os.path.relpath(os.path.join(base_item_path, name), |
| + base_extension_path) |
| + entry_files = [os.path.join(base_item_path, module_path) |
| + for module_path in value.split()] |
| + configuration['bundles'].append({ |
| + 'bundle_name': bundle_file, |
| + 'entry_points': entry_files, |
| + }) |
| + |
| + command = ['node', |
| + os.path.join(os.path.dirname(__file__), 'webpack_runner.js')] |
| + process = subprocess.Popen( |
| + command, stdout=subprocess.PIPE, stdin=subprocess.PIPE |
| + ) |
| + output = process.communicate(input=toJson(configuration))[0] |
| + if process.returncode != 0: |
| + raise subprocess.CalledProcessError(process.returncode, cmd=command) |
| -def toJson(data): |
| - return json.dumps( |
| - data, ensure_ascii=False, sort_keys=True, |
| - indent=2, separators=(',', ': ') |
| - ).encode('utf-8') + '\n' |
| + bundles = json.loads(output) |
| + for bundle in bundles: |
| + files[bundle] = bundles[bundle].encode('utf-8') |
| def import_string_webext(data, key, source): |