blob: 4ec4490961b11a337fa3c30c2b878b90c531f879 [file] [log] [blame]
# 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