author | Victor Porof <vporof@mozilla.com> |
Thu, 04 Jul 2019 14:50:06 +0200 | |
changeset 481448 | c7e91f614eb78c4447a623f1c88a66421113ab07 |
parent 481447 | 43a37d64c7626713c30efba2deb562304eeb4b5b |
child 481449 | 602865e4e969900b82d0fc740fabd9ef34c01d2f |
child 481511 | 2514efbfbb783ebbdbf6c84751e2c464a8d65d83 |
push id | 36245 |
push user | vporof@mozilla.com |
push date | Fri, 05 Jul 2019 16:10:30 +0000 |
treeherder | mozilla-central@c7e91f614eb7 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | sylvestre, CLOSED |
bugs | 1563300 |
milestone | 69.0a1 |
first release with | nightly linux32
c7e91f614eb7
/
69.0a1
/
20190705161030
/
files
nightly linux64
c7e91f614eb7
/
69.0a1
/
20190705161030
/
files
nightly mac
c7e91f614eb7
/
69.0a1
/
20190705161030
/
files
nightly win32
c7e91f614eb7
/
69.0a1
/
20190705161030
/
files
nightly win64
c7e91f614eb7
/
69.0a1
/
20190705161030
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
69.0a1
/
20190705161030
/
pushlog to previous
nightly linux64
69.0a1
/
20190705161030
/
pushlog to previous
nightly mac
69.0a1
/
20190705161030
/
pushlog to previous
nightly win32
69.0a1
/
20190705161030
/
pushlog to previous
nightly win64
69.0a1
/
20190705161030
/
pushlog to previous
|
new file mode 100755 --- /dev/null +++ b/tools/lint/hooks_js_format.py @@ -0,0 +1,79 @@ +#!/usr/bin/env 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/. + +import os +import subprocess +from subprocess import check_output, CalledProcessError +import sys + +here = os.path.dirname(os.path.realpath(__file__)) +topsrcdir = os.path.join(here, os.pardir, os.pardir) + +EXTRA_PATHS = ("python/mozversioncontrol",) +sys.path[:0] = [os.path.join(topsrcdir, p) for p in EXTRA_PATHS] + +from mozversioncontrol import get_repository_object, InvalidRepoPath + + +def run_js_format(hooktype, changedFiles): + try: + vcs = get_repository_object(topsrcdir) + except InvalidRepoPath: + return + + if not changedFiles: + # No files have been touched + return + + extensions = (".js", ".jsx", ".jsm") + path_list = [] + for filename in sorted(changedFiles): + # Ignore files unsupported in eslint and prettier + if filename.endswith(extensions): + path_list.append(filename) + + if not path_list: + # No files have been touched + return + + arguments = ["eslint", "--fix"] + path_list + # On windows we need this to call the command in a shell, see Bug 1511594 + if os.name == "nt": + js_format_cmd = ["sh", "mach"] + arguments + else: + js_format_cmd = [os.path.join(topsrcdir, "mach")] + arguments + if "commit" in hooktype: + # don't prevent commits, just display the eslint and prettier results + subprocess.call(js_format_cmd) + + # Add the modified files back to the repo (expect a string) + # one by one (fails otherwise, see bug #1541409) + for f in path_list: + vcs.add_remove_files(f) + + return False + print("warning: '{}' is not a valid js-format hooktype".format(hooktype)) + return False + + +def git(): + hooktype = os.path.basename(__file__) + if hooktype == "hooks_js_format.py": + hooktype = "pre-push" + + try: + changedFiles = check_output( + ["git", "diff", "--staged", "--diff-filter=d", "--name-only", "HEAD"] + ).split() + # TODO we should detect if we are in a "add -p" mode and show a warning + return run_js_format(hooktype, changedFiles) + + except CalledProcessError: + print("Command to retrieve local files failed") + return 1 + + +if __name__ == "__main__": + sys.exit(git())