mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-06-16 21:38:59 +00:00
faf71bc44a
- Bug 1181869 - Update Bindings to use normal Rooted primitives; r=shu (b5356d1610) - Bug 1182124 - Remove InternalHandle and its last use; r=bbouvier (3ea8a6e41a) - Bug 1189490 - Part 2: Stop using mozilla::LinkedList for the allocations and tenure promotions logs and use js::TraceableFifo instead. r=terrence (d383bb76e5) - Bug 1189490 - Follow ups: Move [Traceable]Fifo to js/src/ds. r=terrence (89e18e65bf) - Bug 1189809 - Remove the ill-fated DynamicTraceable; r=jonco (e1821ecdc4) - Bug 1181292 - Make JSPropertyDescriptor a StaticTraceable; r=efaust (a9efa1a42d) - spaces (1978675795) - Bug 1176620 - Use absolute_import in mach; r=ahal (4cb6d9188f) - Bug 1163112 - [mach core] Consolidate functionality between Main._run and Registrar.dispatch, r=gps (9f02ab04aa) - Bug 1182677 - Support calling a function during mach command dispatch; r=smacleod (4a6511624e) - Bug 1176698 - Use fallible allocator for attribute values in the HTML parser. r=wchen. (4da29e3a8a) - Bug 1191756: Improve tests to not always exit with status 3 (OOM); r=jonco (5f6bc24914) - put back some windows, crash and other details (9afa0117e0) - Bug 1194023 - Part 1: Filter out warnings about sort operations on CREATE INDEX statements. r=mak (b221de9e96) - Bug 1194023 - Part 2: Only check for sort operations if mozStorage logging is enabled. r=mak (be53dfc219) - Merge branch 'dev' of https://github.com/rmottola/Arctic-Fox into dev (9fb1457bf1) - Bug 1205111 - return a transient error on 401 fetching info/collections using FxA. r=rnewman (1766c092b7) - Bug 1188760 - Added a regex check to execute and executeCached of Sqlite.jsm. r=mak (ce509ec9a7) - Bug 1177709 - Avoid a TypeError in browser-content.js by making the _findAsYouType getter a normal property. r=mossop (b40f489a5d) - Bug 1199434 - Send printer error messages to the parent process to report to the user. r=Mossop (4e402ba484) - add some missing jsm, which are actally present (b2a450d2d3) - Bug 1192242 - Adjust the button design in some circumstances. r=Gijs (4a642459cd) - Bug 1195866 - Make allocations log report whether an allocation was in the nursery; r=terrence (5512ec437d) - bug 1207862 - Add DocManager::TopLevelRemoteDocs() r=davidb (6f919ad9db) - bug 1201395 - call ProxyCreated with the correct interfaces when creating top level documents r=davidb (97713189cd) - bug 1159722 - make atk expose more interfaces for proxied accessibles (529e246a13) - bug 1162654 - allow proxies to implement the document interface r=davidb (33fd1a5ed2) - Bug 930414 - Add ModuleObject and CompileModule() function r=shu (3b59e2fa52) - fix preferences (b98953f5c0) - parts of, hoping to to break classic UI Bug 951747 - [Australis] (52a5e193dc) - Bug 1152422 - Ask to save the new password in a change form with no username even if we have no logins for the site. r=dolske (e69e714b21) - Bug 1155390 - Don't prompt to update a password when there is no username field and the password is identical. r=dolske (470e9dad0e) - Bug 1145754 - Allow per-site recipes to adjust the username/password field detection for capture. r=dolske (45e31ce7e3) - Bug 1166990 - Create a wrapper object for form-like elements in password manager. r=dolske (1f48addcc0) - Bug 1166990 - Create a wrapper object for form-like elements in password manager. r=dolske (e00d01bf7a) - Bug 1166970 - Support non-<form> elements in _getFormFields. r=dolske (0478218f5c) - Bug 1166965 - Support non-<form> elements in onFormSubmit. r=dolske (bc34427760) - Bug 1167409 - 4/4 - Inititalize ScriptSourceObject even when off-main-thread compilation fails. r=smaug (0a83446019) - Bug 1176880 part 1 - Add a flag on the Debugger & Compartment to record code-coverage information. r=shu (160fc0321d) - missing parts of Bug 1254164 - Make aliasedBodyLevelLexicalBegin a uint32. (6c8129c0e1) - Bug 1176880 part 2 - Add Debugger.Script.getOffsetsCoverage. r=shu (5024d2e99b) - Bug 1176880 part 3 - Debugger.Script.getOffsetsCoverage: Add documentation. r=shu (d3d4af6d7c) - adapted from Bug 1145789 - Unify code paths for the password save and change notifications. r=MattN (be507f66e0) - add some missing locales and props (4c09b831b3) - Bug 1145913 - Make the username in the password notification editable. r=MattN (1f1ec8cc3c) - Bug 1171348 - Switch password manager to richer logging via Console.jsm. r=dolske (f999f1a4c2) - Bug 1144245 - Add a LoginTestUtils.jsm module. r=MattN (1bc74b9bff) - Bug 1147561 - Fallback to logins with the same hostPort but different scheme for the form action. r=MattN (cd210eb54e) - let var (fd473feeef) - Bug 1173748 - Part 1: allow inserting result matches at given indices. r=adw (c3671f3ea8) - Bug 1162830 - unified auto-complete tests now check what the default item is. r=mak (0194fdb717) - most of Bug 1095421 - Convert xpcshell-tests in toolkit/components/places/tests/unifiedcomplete to Bookmarks.jsm API r=mak (b1f102aca3) - Bug 1163888 - Autofilled entries in unified complete are missing the favicon even if it's available. r=markh (a618f1b1e0) - Bug 1173751 - Add unit tests for search suggestions in awesomebar. r=mak (6bb6039efa) - Bug 1173754 - Add a restrict token for search suggestions in the awesomebar. r=mak (2102660da1) - Bug 1162140 - Allow user to select search suggestions in Awesome Bar. r=adw (f5088b7eca) - Bug 1176107 - Search suggestions in awesomebar: update input and perform search with selected suggestion. r=mak (8d907c3f39) - Bug 1173748 - Part 2: mixup search suggestions at a given frecency threshold. r=adw (44f08b719e) - Bug 1192023 - Use enum class instead of CheckpointMode_ prefix. r=khuey (5e922429ca) - Bug 1203386 - Fix two implicit constructors in ActorsChild.h; r=baku (57cb7fafaf) - Bug 1068975 - Remove FileInfo from File; r=baku (4b3ceb3bd8) - Merge pull request #121 from rmottola/dev-js (6fba455908) - Bug 1192023 - Make UpdateType an enum class. r=khuey (5a1908fa73) - Bug 1182792 - Disable search suggestions in the URL bar in private windows. r=mak (55989509d7) - Bug 1184410: Track whether or not the transaction has been active on the connection thread. r=janv (44efc2f663) - Bug 1184667 - Remove some unnecessary const_casts from ActorsParent.cpp. r=janv (1dcc45534b) - Bug 1192023 - Use enum class instead of MaintenanceAction_ prefix. r=khuey (e2f6c8b0e5) - Bug 1130775 followup: Add 'override' keyword to macro-provided AddRef/Release methods for QuotaClient::GetDirectoryLockListener. rs=ehsan (bf871fd57a) - Bug 1185836: Replace several EnumerateRead calls with the new hashtable iterators. r=baku (dbfdaba7b8) - Bug 1192023 - Flatten away AppId enum. r=khuey (78522f8547) - missingbit of Bug 871846 (d8330545a0) - try to fix som emisspatch (29a6a9f63f) - bug 1109891 - part 3 - remove mGeckoTextAccessible r=tbsaunde (147c7ace9d) - Bug 1171995 - Part 6: Handle proxies in mozAccessible accessibilityHitTest and accessibilityFocusedUIElement r=tbsaunde (636508c113) - Bug 1171995 - Part 7: Check for proxy in accessibilityIsIgnored for mozButtonAccessible and mozTextAccessible r=tbsaunde (ffb5d84e85) - Bug 1187413 - Check for ProxyAccessible in mozAccessible childAt r=tbsaunde (fc06b79804) - Bug 1187417 - (Part 1) Check for ProxyAccessible in mozAccessible position r=tbsaunde (2fc3c196aa) - Bug 1187417 - (Part 2) Check for ProxyAccessible in mozAccessible size r=tbsaunde (7c7bcd9e10) - Bug 1137748 - Expose correct roles, subroles, and roledescriptions for various WAI-ARIA roles on OS X, r=surkov (d522b4b7fc) - Bug 1178018 - Add and adjust more roles, subroles, and role descriptions on OS X to match Webkit and Blink, r=surkov (d900416342) - Bug 1187609 - Check for proxies in mozAccessible role, subrole r=tbsaunde (c29076091e) - Bug 1187995 - Add proxy handling to mozTextAccessible r=tbsaunde (f6d1014aca) - Bug 1187742 - Handle proxies in mozAccessible {isEnabled,title,value,help,isExpired} r=tbsaunde (c977aa1320) - Bug 1187739 - (Part 1) Handle proxies in mozActionElements r=tbsaunde (b077cb6964) - Bug 1187739 - (Part 2) Handle proxies in mozActionElements click, value r=tbsaunde (ac604e762c) - Bug 1185836: Fix warnings r=me. (19a8596eea) - Bug 1185836. Nuke warnings from orbit. r=me (70930b2239) - bug 1191433 - add methods to downcast ProxyAccessible to DocAccessibleParent r=lsocks (9063e95d4a) - bug 1191433 - add ProxyAccessible::Document r=lsock (88e4eb64c4) - bug 1195471 - make getChildCountCB work with proxies r=davidb (86bfb6b5c4) - Bug 1187740 - Handle proxies in mozHTMLAccessible r=tbsaunde (ee018fce11) - misspatch (6e0ab73997) - Bug 1199785 - Make atk methods in nsMaiInterfaceComponent.cpp to work with ipc proxies, r=tbsaunde (173a4460ef) - Bu 1169701 - Add wrapper to get mozAccessibles from ProxyAccessibles r=tbsaunde (79e11612f1) - Bug 1172946 - (part 1) Add mozilla a11y namespace to mozAccessible.h r=tbsaunde (ce796e8af9) - Bug 1172946 - (part 2) Add handling for proxies in mozAccessible parent r=tbsaunde (a03158b8eb) - Bug 1172946 - (part 3) Add handling for proxies in mozAccessible children r=tbsaunde (c72aefa608) - Bug 1198291 - Remove exposure of the NSAccessibilityDescription attribute to guarantee we always expose AccName and AccDescription correctly, r=davidb, r=surkov (56daff1c4a) - Bug 1179147 - merror and mstyle should be exposed as AXMathRow. r=MarcoZ (b107c9fba6) - Bug 1187611 - (part 1) Handle ProxyAccessibles in mozAccessible focus r=tbsaunde (ba2524a2db) - Bug 1187611 - (part 2) Handle ProxyAccessibles in mozAccessible window r=tbsaunde (05024ee697) - Bug 1187611 - (part 3) Handle ProxyAccessibles in mozAccessible canBeFocused r=tbsaunde (93cb5e4dbb) - Bug 107957 - Fixed sorting order for password manager autocomplete. r=MattN (334b9693f8) - Bug 1169243 - Re-enable the tests disabled while investigating these failures now that the underlying machine configuration issue is resolved. (b1e7e0f434) - Bug 1168707 - Run password autofill code when a password field is added to a document outside of a <form>. r=dolske (ffb6cea44f) - Bug 930414 - Add module requestedModules field r=shu (7e6df12133) - Bug 930414 - Add module importEntries field r=shu (bc63be0a51) - Bug 930414 - Add module fields relating to exports r=shu (26a2b2a8b1) - Bug 930414 - Hook up module environements, alising everything at top level for now r=shu (e54b5c2782) - Bug 930414 - Add module scopes, using ModuleObject as the static scope and ModuleEnvironementObject as the dynamic scope r=shu (f6b271c963) - Bug 1088214 - Remove JSCLASS_IMPLEMENTS_BARRIERS now this is implemented everywhere r=terrence (db6c745c64) - Bug 930414 - Add hook for HostResolveImportedModule r=shu (8feaf54c8f) - Bug 930414 - Implement module ResolveExport method r=shu (1b79054512) - Bug 930414 - Add option for Reflect.parse to parse as a module, and allow modules to be parsed without a script r=shu (5f07bf6147) - Bug 930414 - Implement ModuleDeclarationInstantiation method r=shu (cdfedb8ba2) - Bug 1199165 - Rename isHeavyweight to needsCallObject. r=shu (ca28a2d080) - Bug 930414 - Implement ModuleEvaluation method r=shu (c0d8c2bfcb) - Bu 1193583 - Support emitting block scopes in the prologue. (r=jorendorff) (d4f2a5c8e0) - Bug 930414 - Add initial bytecode emitter support for modules r=shu (a5a865dbbe) - Bug 1193583 - Fix eval to always execute under a non-extensible lexical scope. (r=jorendorff) (11fb2a11b6) - Bug 1193583 - Teach Debugger tests that eval frames now always have a lexical environment. (r=jorendorff) (667c16944a) - Bug 1193583 - Test. (r=jorendorff) (610a2f58ed) - Bug 1193583 - Change the semantics of Debugger.evalInGlobal to be like executing a series of statements at the global level instead of like an indirect eval. (r=jimb) (fbcb2668ba) - Bug 1193583 - Fix scratchpad test that expects vars introduced by webconsole's JS evaluation to be configurable. (r=jimb) (dc7e659d15) - Bug 1199172 - Only treat non-static constructor methods as the actual class constructor. (r=shu) (93e3989329) - Bug 930414 - Fix base class initialization in ModuleBox constructor r=me on a CLOSED TREE (79e94a08da) - Bug 930414 - Check for duplicate module exports r=shu (85f4a622e4) - Bug 930414 - Implement default module exports r=shu (2098810a25) - Bug 930414 - Make module imports into defintions r=shu (563f45d217) - Bug 1201869 - Part 0: Rename MNewArray::count to MNewArray::length. r=Waldo (91769a96b5) - Bug 1201869 - Part 1: Fix the maximum length of a dense array. r=arai (e7593b0212) - Bug 1201869 - Part 2: Make an array sparse when exceeds the limit of dense array length. r=Waldo (dfb803fba2) - Bug 1200642 - Fix some more OOM handling problems r=terrence (94137d9ce3) - Bug 1203733 - Fix emitting super.prop1.prop2. (r=jorendorff) (a478a7a31b) - Bug 1155618 - Fix more out of memory handling issues r=terrence (6b317db195) - Bug 1207943 - Fix an assert in MacroAssembler::guardObjectType. r=bhackett (0df1efc695) - Bug 1201057 - Use AutoEnterOOMUnsafeRegion in places where we can't handle OOM r=terrence (66ddcd0410) - Bug 1199345 - Extend JSOP_NEWARRAY/JSOP_INITELEM_ARRAY/JSOP_SPREADCALLARRAY operand to uint32. r=Waldo (2858b788aa) - Bug 1199546 - Properly perform ToPropertyKey operations involved in computed property names in both object literals and destructuring patterns. r=abargull (6e9b58619f) - missing bit of unidentifed FOR_IN patch (d9e850e24a) - missing bit of Bug 1135708 - Implement es7 exponentiation operator. (747d361cea) - Bug 1208067 - Ensure that self-hosted functions with innner functions aren't relazified. r=jande (bb76be6bb0) - Bug 1200642 - Add OOM simulation to hastables r=terrence (d64bf852a1) - Bug 1200642 - Add checkSimulatedOOM() to AllocPolicy r=Waldo (d833f61a8d) - js: export JSPropertyDescriptor struct, fix build with --enable-shared-js specified
320 lines
12 KiB
Python
320 lines
12 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
import argparse
|
|
import logging
|
|
import mozpack.path as mozpath
|
|
import os
|
|
import platform
|
|
import subprocess
|
|
import sys
|
|
import which
|
|
|
|
from mozbuild.base import (
|
|
MachCommandBase,
|
|
)
|
|
|
|
from mach.decorators import (
|
|
CommandArgument,
|
|
CommandProvider,
|
|
Command,
|
|
)
|
|
|
|
ESLINT_NOT_FOUND_MESSAGE = '''
|
|
Could not find eslint! We looked at the --binary option, at the ESLINT
|
|
environment variable, and then at your path. Install eslint and needed plugins
|
|
with
|
|
|
|
mach eslint --setup
|
|
|
|
and try again.
|
|
'''.strip()
|
|
|
|
NODE_NOT_FOUND_MESSAGE = '''
|
|
nodejs is either not installed or is installed to a non-standard path.
|
|
Please install nodejs from https://nodejs.org and try again.
|
|
|
|
Valid installation paths:
|
|
'''.strip()
|
|
|
|
NPM_NOT_FOUND_MESSAGE = '''
|
|
Node Package Manager (npm) is either not installed or installed to a
|
|
non-standard path. Please install npm from https://nodejs.org (it comes as an
|
|
option in the node installation) and try again.
|
|
|
|
Valid installation paths:
|
|
'''.strip()
|
|
|
|
ESLINT_PROMPT = '''
|
|
Would you like to use eslint
|
|
'''.strip()
|
|
|
|
ESLINT_PLUGIN_MOZILLA_PROMPT = '''
|
|
eslint-plugin-mozilla is an eslint plugin containing rules that help enforce
|
|
JavaScript coding standards in the Mozilla project. Would you like to use this
|
|
plugin
|
|
'''.strip()
|
|
|
|
ESLINT_PLUGIN_REACT_PROMPT = '''
|
|
eslint-plugin-react is an eslint plugin containing rules that help React
|
|
developers follow strict guidelines. Would you like to install it
|
|
'''.strip()
|
|
|
|
|
|
@CommandProvider
|
|
class MachCommands(MachCommandBase):
|
|
@Command('python', category='devenv',
|
|
description='Run Python.')
|
|
@CommandArgument('args', nargs=argparse.REMAINDER)
|
|
def python(self, args):
|
|
# Avoid logging the command
|
|
self.log_manager.terminal_handler.setLevel(logging.CRITICAL)
|
|
|
|
self._activate_virtualenv()
|
|
|
|
return self.run_process([self.virtualenv_manager.python_path] + args,
|
|
pass_thru=True, # Allow user to run Python interactively.
|
|
ensure_exit_code=False, # Don't throw on non-zero exit code.
|
|
# Note: subprocess requires native strings in os.environ on Windows
|
|
append_env={b'PYTHONDONTWRITEBYTECODE': str('1')})
|
|
|
|
@Command('python-test', category='testing',
|
|
description='Run Python unit tests.')
|
|
@CommandArgument('--verbose',
|
|
default=False,
|
|
action='store_true',
|
|
help='Verbose output.')
|
|
@CommandArgument('--stop',
|
|
default=False,
|
|
action='store_true',
|
|
help='Stop running tests after the first error or failure.')
|
|
@CommandArgument('tests', nargs='+',
|
|
metavar='TEST',
|
|
help='Tests to run. Each test can be a single file or a directory.')
|
|
def python_test(self, tests, verbose=False, stop=False):
|
|
self._activate_virtualenv()
|
|
import glob
|
|
|
|
# Python's unittest, and in particular discover, has problems with
|
|
# clashing namespaces when importing multiple test modules. What follows
|
|
# is a simple way to keep environments separate, at the price of
|
|
# launching Python multiple times. This also runs tests via mozunit,
|
|
# which produces output in the format Mozilla infrastructure expects.
|
|
return_code = 0
|
|
files = []
|
|
# We search for files in both the current directory (for people running
|
|
# from topsrcdir or cd'd into their test directory) and topsrcdir (to
|
|
# support people running mach from the objdir). The |break|s in the
|
|
# loop below ensure that we don't run tests twice if we're running mach
|
|
# from topsrcdir
|
|
search_dirs = ['.', self.topsrcdir]
|
|
last_search_dir = search_dirs[-1]
|
|
for t in tests:
|
|
for d in search_dirs:
|
|
test = mozpath.join(d, t)
|
|
if test.endswith('.py') and os.path.isfile(test):
|
|
files.append(test)
|
|
break
|
|
elif os.path.isfile(test + '.py'):
|
|
files.append(test + '.py')
|
|
break
|
|
elif os.path.isdir(test):
|
|
files += glob.glob(mozpath.join(test, 'test*.py'))
|
|
files += glob.glob(mozpath.join(test, 'unit*.py'))
|
|
break
|
|
elif d == last_search_dir:
|
|
self.log(logging.WARN, 'python-test',
|
|
{'test': t},
|
|
'TEST-UNEXPECTED-FAIL | Invalid test: {test}')
|
|
if stop:
|
|
return 1
|
|
|
|
for f in files:
|
|
file_displayed_test = [] # Used as a boolean.
|
|
|
|
def _line_handler(line):
|
|
if not file_displayed_test and line.startswith('TEST-'):
|
|
file_displayed_test.append(True)
|
|
|
|
inner_return_code = self.run_process(
|
|
[self.virtualenv_manager.python_path, f],
|
|
ensure_exit_code=False, # Don't throw on non-zero exit code.
|
|
log_name='python-test',
|
|
# subprocess requires native strings in os.environ on Windows
|
|
append_env={b'PYTHONDONTWRITEBYTECODE': str('1')},
|
|
line_handler=_line_handler)
|
|
return_code += inner_return_code
|
|
|
|
if not file_displayed_test:
|
|
self.log(logging.WARN, 'python-test', {'file': f},
|
|
'TEST-UNEXPECTED-FAIL | No test output (missing mozunit.main() call?): {file}')
|
|
|
|
if verbose:
|
|
if inner_return_code != 0:
|
|
self.log(logging.INFO, 'python-test', {'file': f},
|
|
'Test failed: {file}')
|
|
else:
|
|
self.log(logging.INFO, 'python-test', {'file': f},
|
|
'Test passed: {file}')
|
|
if stop and return_code > 0:
|
|
return 1
|
|
|
|
return 0 if return_code == 0 else 1
|
|
|
|
@Command('eslint', category='devenv',
|
|
description='Run eslint or help configure eslint for optimal development.')
|
|
@CommandArgument('-s', '--setup', default=False, action='store_true',
|
|
help='configure eslint for optimal development.')
|
|
@CommandArgument('path', nargs='?', default='.',
|
|
help='Path to files to lint, like "browser/components/loop" '
|
|
'or "mobile/android". '
|
|
'Defaults to the current directory if not given.')
|
|
@CommandArgument('-e', '--ext', default='[.js,.jsm,.jsx]',
|
|
help='Filename extensions to lint, default: "[.js,.jsm,.jsx]".')
|
|
@CommandArgument('-b', '--binary', default=None,
|
|
help='Path to eslint binary.')
|
|
@CommandArgument('args', nargs=argparse.REMAINDER) # Passed through to eslint.
|
|
def eslint(self, setup, path, ext=None, binary=None, args=[]):
|
|
'''Run eslint.'''
|
|
|
|
if setup:
|
|
return self.eslint_setup()
|
|
|
|
if not binary:
|
|
binary = os.environ.get('ESLINT', None)
|
|
if not binary:
|
|
try:
|
|
binary = which.which('eslint')
|
|
except which.WhichError:
|
|
pass
|
|
|
|
if not binary:
|
|
print(ESLINT_NOT_FOUND_MESSAGE)
|
|
return 1
|
|
|
|
# The cwd below is unfortunate. eslint --config=PATH/TO/.eslintrc works,
|
|
# but --ignore-path=PATH/TO/.eslintignore treats paths as relative to
|
|
# the current directory, rather than as relative to the location of
|
|
# .eslintignore (see https://github.com/eslint/eslint/issues/1382).
|
|
# mach commands always execute in the topsrcdir, so we could make all
|
|
# paths in .eslint relative to the topsrcdir, but it's not clear if
|
|
# that's a good choice for future eslint and IDE integrations.
|
|
# Unfortunately, running after chdir does not print the full path to
|
|
# files (convenient for opening with copy-and-paste). In the meantime,
|
|
# we just print the active path.
|
|
|
|
self.log(logging.INFO, 'eslint', {'binary': binary, 'path': path},
|
|
'Running {binary} in {path}')
|
|
|
|
cmd_args = [binary,
|
|
'--ext', ext, # This keeps ext as a single argument.
|
|
] + args
|
|
# Path must come after arguments. Path is '.' due to cwd below.
|
|
cmd_args += ['.']
|
|
|
|
return self.run_process(cmd_args,
|
|
cwd=path,
|
|
pass_thru=True, # Allow user to run eslint interactively.
|
|
ensure_exit_code=False, # Don't throw on non-zero exit code.
|
|
)
|
|
def eslint_setup(self, update_only=False):
|
|
"""Ensure eslint is optimally configured.
|
|
|
|
This command will inspect your eslint configuration and
|
|
guide you through an interactive wizard helping you configure
|
|
eslint for optimal use on Mozilla projects.
|
|
"""
|
|
sys.path.append(os.path.dirname(__file__))
|
|
|
|
# At the very least we need node installed.
|
|
nodePath = self.getNodeOrNpmPath("node")
|
|
if not nodePath:
|
|
return 1
|
|
|
|
npmPath = self.getNodeOrNpmPath("npm")
|
|
if not npmPath:
|
|
return 1
|
|
|
|
# Install eslint.
|
|
print("Installing eslint...")
|
|
with open(os.devnull, "w") as fnull:
|
|
subprocess.call([npmPath, "install", "eslint", "-g"],
|
|
stdout=fnull, stderr=fnull)
|
|
|
|
# Install eslint-plugin-mozilla.
|
|
print("")
|
|
print("Installing eslint-plugin-mozilla...")
|
|
with open(os.devnull, "w") as fnull:
|
|
subprocess.call([npmPath, "link"],
|
|
cwd="testing/eslint-plugin-mozilla",
|
|
stdout=fnull, stderr=fnull)
|
|
|
|
# Install eslint-plugin-react.
|
|
print("")
|
|
print("Installing eslint-plugin-react...")
|
|
with open(os.devnull, "w") as fnull:
|
|
subprocess.call([npmPath, "install", "-g", "eslint-plugin-react"],
|
|
stdout=fnull, stderr=fnull)
|
|
|
|
def getPossibleNodePathsWin(self):
|
|
"""
|
|
Return possible nodejs paths on Windows.
|
|
"""
|
|
if platform.system() != "Windows":
|
|
return []
|
|
|
|
return {
|
|
"%s\\nodejs" % os.environ.get("SystemDrive"),
|
|
os.path.join(os.environ.get("ProgramFiles"), "nodejs"),
|
|
os.path.join(os.environ.get("PROGRAMW6432"), "nodejs"),
|
|
os.path.join(os.environ.get("PROGRAMFILES"), "nodejs")
|
|
}
|
|
|
|
def getNodeOrNpmPath(self, filename):
|
|
"""
|
|
Return the nodejs or npm path.
|
|
"""
|
|
try:
|
|
appPath = which.which(filename)
|
|
return appPath
|
|
except which.WhichError:
|
|
pass
|
|
|
|
if platform.system() == "Windows":
|
|
try:
|
|
for ext in ["", ".cmd", ".exe"]:
|
|
nodeOrNpmPath = which.which(filename + ext,
|
|
path=self.getPossibleNodePathsWin())
|
|
if self.is_valid(nodeOrNpmPath):
|
|
return nodeOrNpmPath
|
|
except which.WhichError:
|
|
pass
|
|
|
|
if filename == "node":
|
|
print(NODE_NOT_FOUND_MESSAGE)
|
|
elif filename == "npm":
|
|
print(NPM_NOT_FOUND_MESSAGE)
|
|
|
|
if platform.system() == "Windows":
|
|
appPaths = self.getPossibleNodePathsWin()
|
|
|
|
for p in appPaths:
|
|
print(" - " + p)
|
|
elif platform.system() == "Darwin":
|
|
print(" - /usr/local/bin/node")
|
|
elif platform.system() == "Linux":
|
|
print(" - /usr/bin/nodejs")
|
|
|
|
return None
|
|
|
|
def is_valid(self, path):
|
|
try:
|
|
with open(os.devnull, "w") as fnull:
|
|
subprocess.check_call([path, "--version"], stdout=fnull)
|
|
return True
|
|
except subprocess.CalledProcessError:
|
|
return False
|