| # Copyright 2016 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import subprocess |
| import sys |
| |
| import py_utils |
| from py_utils import binary_manager |
| from py_utils import dependency_util |
| |
| |
| def _NodeBinariesConfigPath(): |
| return os.path.realpath(os.path.join( |
| os.path.dirname(os.path.abspath(__file__)), 'node_binaries.json')) |
| |
| |
| class _NodeManager(object): |
| def __init__(self): |
| self.bm = binary_manager.BinaryManager( |
| [_NodeBinariesConfigPath()]) |
| self.os_name = dependency_util.GetOSNameForCurrentDesktopPlatform() |
| self.arch_name = dependency_util.GetArchForCurrentDesktopPlatform( |
| self.os_name) |
| self.node_path = self.bm.FetchPath('node', self.os_name, self.arch_name) |
| self.npm_path = os.path.abspath(os.path.join( |
| os.path.dirname(self.node_path), '..', 'lib', 'node_modules', 'npm', |
| 'bin', 'npm-cli.js')) |
| |
| self.node_initialized = False |
| |
| def InitNode(self): |
| if self.node_initialized: |
| return # So we only init once per run |
| self.node_initialized = True |
| old_dir = os.path.abspath(os.curdir) |
| os.chdir(os.path.join(os.path.abspath( |
| py_utils.GetCatapultDir()), 'common', 'node_runner', 'node_runner')) |
| subprocess.call([self.node_path, self.npm_path, 'install']) |
| os.chdir(old_dir) |
| |
| |
| _NODE_MANAGER = _NodeManager() |
| |
| |
| def InitNode(): |
| _NODE_MANAGER.InitNode() |
| |
| |
| def GetNodePath(): |
| return _NODE_MANAGER.node_path |
| |
| |
| def GetNodeModulesPath(): |
| _NODE_MANAGER.InitNode() |
| path = os.path.abspath(os.path.join(os.path.dirname(__file__), |
| 'node_modules')) |
| if sys.platform.startswith('win'): |
| # Escape path on Windows because it's very long and must be passed to NTFS. |
| path = u'\\\\?\\' + path |
| return path |
| |
| |
| def RunEslint(filenames=None): |
| cmd = [GetNodePath(), os.path.join( |
| GetNodeModulesPath(), 'eslint', 'bin', 'eslint.js'), '--color'] |
| if filenames: |
| cmd += filenames |
| try: |
| return subprocess.check_output(cmd, stderr=subprocess.STDOUT) |
| except subprocess.CalledProcessError as e: |
| return e.output |