Commit Graph

14 Commits

Author SHA1 Message Date
Andrew Halberstadt
3aae3c7cfa Bug 1388721 - [lint] Support --fix in the flake8 linter via autopep8, r=sylvestre
This adds autopep8 to flake8_requirements.txt. When --fix is passed in,
autopep8 will run prior to the normal flake8 run, so only errors that couldn't
be fixed automatically will be shown.

There is one caveat, namely autopep8 will only use the root .flake8 file
(there's no support for passing in subconfigs).

MozReview-Commit-ID: FJ0doey2KVb
2018-05-25 17:02:43 -04:00
Sylvestre Ledru
9fcc3a48bc Bug 1460402 - Update the flake8 support to use the pip class r=ahal
MozReview-Commit-ID: 9BWa0cnWJdS
2018-05-09 21:55:21 +02:00
Dorel Luca
a5dd93f753 Backed out 4 changesets (bug 1460402) for lint failure on intl/locales/en-US/hyphenation/hyph_en_US.dic. CLOSED TREE
Backed out changeset c2e8fbd72ca6 (bug 1460402)
Backed out changeset 3676e913dbff (bug 1460402)
Backed out changeset bb12ffd4b96e (bug 1460402)
Backed out changeset 3e50885329c4 (bug 1460402)
2018-05-11 00:47:34 +03:00
Sylvestre Ledru
b7088215e6 Bug 1460402 - Update the flake8 support to use the pip class r=ahal
MozReview-Commit-ID: 9BWa0cnWJdS
2018-05-09 21:55:21 +02:00
Dorel Luca
488319102d Backed out 4 changesets (bug 1460402) for breaking taskcluster images. CLOSED TREE
Backed out changeset 5b40f3f18f42 (bug 1460402)
Backed out changeset 17526c61b995 (bug 1460402)
Backed out changeset e1caff997e5a (bug 1460402)
Backed out changeset 06ceda084d69 (bug 1460402)
2018-05-10 23:54:38 +03:00
Sylvestre Ledru
48ef89eb36 Bug 1460402 - Update the flake8 support to use the pip class r=ahal
MozReview-Commit-ID: 9BWa0cnWJdS
2018-05-09 21:55:21 +02:00
Andrew Halberstadt
8e584ffc44 Bug 1436802 - [lint] Add some tests for the flake8 linter integration r=andi
This essentially tests tools/lint/python/flake8.py. Though it also adds
a basic framework for testing all the other linters as well. Getting this
added now will allow others to collaborate on adding more tests without
needing to get to 100% coverage for all linters right off the bat.

All python tests under tools/lint/test will run as part of the 'ml' task
on Linux, and the build task on Windows (OSX coverage is currently missing
for python tests).

The flake8 linter currently has a bug where the 'exclude' argument is
ignored. This is why we need to also exclude 'tools/lint/test/files' in
topsrcdir/.flake8, even though it is already listed in the
'mach_commands.py'. Other linters shouldn't need to do this, the exclusion
in 'mach_commands.py' should be good enough. See bug 1277851 for more
details.

MozReview-Commit-ID: 9ho8C83eeuj
2018-03-22 17:24:15 -04:00
Andrew Halberstadt
589049ea6c Bug 1369711 - [mozlint] Make sure KeyboardInterrupts are handled well wherever they happen r=gps
There a few pieces needed here to properly handle KeyboardInterrupts.

1. All in-progress work needs to abort. Ideally the underlying linters will be
able to catch KeyboardInterrupt, and return partial results (like the flake8
linter does). Linters may alternatively allow the KeyboardInterrupt to
propagate up. Mozlint will catch and handle this appropriately, though any
results found will be lost. The only change to this behaviour was fixing a bug
in the flake8 linter.

2. Any unstarted jobs need to be canceled. In concurrent.futures, there are two
different queues. First, jobs are placed on the work queue, which is just a list
maintained by the parent process. As workers become available, jobs are moved
off the work queue, and onto the call queue (which is a multiprocessing.Queue).
Jobs that live on the work queue can be canceled with 'future.cancel()', whereas
jobs that live on the call queue cannot. The number of extra jobs that are stored
on the call queue is determined by this variable:
https://hg.mozilla.org/mozilla-central/file/deb7714a7bcd/third_party/python/futures/concurrent/futures/process.py#l86

In this patch, the parent process' sigint handler (which will be called on Ctrl-C)
is responsible for canceling all the jobs on the work queue. For the jobs on the
call queue, the best we can do is set a global variable that tells workers to
abort early.

3. Idle workers should exit gracefully. When there are no more jobs left, workers
will block on the call queue (either waiting for more jobs, or waiting for the
executor to send the shutdown signal). If a KeyboardInterrupt is received while a
worker is blocking, it isn't possible to intercept that anywhere (due to quirks
of how concurrent.futures is implemented). The InterruptableQueue class was
created to solve this problem. It will return None instead of propagating
KeyboardInterrupt. A None value will wake the worker up and tell it to gracefully
shutdown. This way, we avoid cryptic tracebacks in the output.

With all of these various pieces solved, pressing Ctrl-C appears to always exit
gracefully, sometimes even printing partial results.

MozReview-Commit-ID: 36Pe3bbUKmk
2018-02-23 08:55:06 -05:00
Andrew Halberstadt
9f3311bc41 Bug 1436639 - [lint] Make sure flake8 is run with same python as |mach lint| was, r=jmaher
This fixes a bug which can happen when the default version of python differs from
the version of python used with mach.

For example, mach explicitly looks for python2.7. This means running |mach lint -l flake8|
should also run flake8 with version 2.7. But if the default is python3, and flake8 is also
installed there, the subprocess call that invokes flake8 will run under python3. This can
lead to errors like "undefined name 'basestring'" and other 2to3 gotchas.

This patch ensures that we run the flake8 binary (and the pip for installing flake8) from
the same interpreter as mach, no matter the system default.

MozReview-Commit-ID: HSuMzDsAvsW
2018-02-07 23:28:33 -05:00
Noemi Erli
46ea22e585 Backed out changeset c9d150401eea (bug 1436639) for potential local workflow issues r=ahal on a CLOSED TREE 2018-02-08 19:45:07 +02:00
Andrew Halberstadt
02d7261051 Bug 1436639 - [lint] Make sure flake8 is run with same python as |mach lint| was, r=jmaher
This fixes a bug which can happen when the default version of python differs from
the version of python used with mach.

For example, mach explicitly looks for python2.7. This means running |mach lint -l flake8|
should also run flake8 with version 2.7. But if the default is python3, and flake8 is also
installed there, the subprocess call that invokes flake8 will run under python3. This can
lead to errors like "undefined name 'basestring'" and other 2to3 gotchas.

This patch ensures that we run:
python2.7 -m flake8

which explicitly runs flake8 against the same interpreter as mach, no matter the default.

MozReview-Commit-ID: HSuMzDsAvsW
2018-02-07 23:28:33 -05:00
Andrew Halberstadt
2359a4b0a5 Bug 1429457 - [mozlint] Create formal 'setup' mechanism for bootstrapping lint dependencies, r=gbrown
This allows linters to define a 'setup' method which will automatically be
called by |mach lint| before running the linter. Users can also explicitly run
these methods (without doing any actual linting) by running |mach lint --setup|.

MozReview-Commit-ID: 74aY1pfsaX1
2018-01-25 13:40:02 -05:00
Andrew Halberstadt
6f5a25c314 Bug 1434430 - [flake8] Drop support for the FLAKE8 environment variable r=rwood
The flake8 linter requires a specific version of flake8, so that running it
locally vs in CI vs in mozreview will all produce the same results.

Allowing consumers to specify a custom flake8 binary via the FLAKE8 environment
variable, subverts that goal and can result in unexplained errors showing up in
some configurations but not others.

MozReview-Commit-ID: 1s0nC8ZO6Qi
2018-01-31 14:05:52 -05:00
Andrew Halberstadt
1432d39374 Bug 1391019 - Move tools/lint/flake_/__init__.py to tools/lint/python/flake8.py, r=gps
This will allow us keep python related linting files in the same place.

MozReview-Commit-ID: ABtq9dnPo9T
2017-08-31 10:06:08 -04:00