While pinning setuptools/pip versions is still somewhat desirable, we
can't pin it everywhere easily, and the current solution will break
stuff on Windows.
webelem.javascript_escape got renamed to javascript.string_escape, and a
new javascript.assemble got added to make it easier to call a function
inside a .js file.
Per one of the diff comments on #1597:
> I used to use a tuple for constant things, but nowadays I'd actually
> prefer a list as a tuple is something more heterogeneous (i.e. it
> makes sense to have a `(x, y)` point as a tuple, but a list of points
> would be a list).
> At some point I should probably change it to a list everywhere 😉
* Don't flag attributes as unused if they are used as global variables in
another module.
* Don't consider "True" and "False" variable names.
* Abort with error message when invoked on .pyc files.
This means we can remove the whitelisted globals in run_vulture.py and
the associated xfailing test.
We also needed to adjust run_vulture.py slightly as the file attribute
got renamed to filename.
In various situations (especially on OS X), pytest segfaults on exit probably
due to Qt/PyQt bugs.
We now have a wrapper script which ignores those segfaults if pytest did run
successfully.
While this makes things a little more complicated and means we'll need to use
`-r` to recreate tox environments, it has several advantages:
- Full support from requires.io (including PRs)
- Workaround for https://bitbucket.org/hpk42/tox/issues/332/ so we can update
virtualenv/pip
Version 4.1 --- 2016-05-21
- The internal attribute Reporter.file_reporters was removed in 4.1b3.
It should have come has no surprise that there were third-party tools
out there using that attribute. It has been restored, but with a
deprecation warning.
Version 4.1b3 --- 2016-05-10
- When running your program, execution can jump from an except X: line
to some other line when an exception other than X happens. This jump
is no longer considered a branch when measuring branch coverage.
- When measuring branch coverage, yield statements that were never
resumed were incorrectly marked as missing. This is now fixed.
- During branch coverage of single-line callables like lambdas and
generator expressions, coverage.py can now distinguish between them
never being called, or being called but not completed.
- The HTML report now has a map of the file along the rightmost edge of
the page, giving an overview of where the missed lines are. Thanks,
Dmitry Shishov.
- The HTML report now uses different monospaced fonts, favoring Consolas
over Courier. Along the way not properly handling one-space indents
was fixed. The index page also has slightly different styling, to try
to make the clickable detail pages more apparent.
- Missing branches reported with coverage report -m will now say ->exit
for missed branches to the exit of a function, rather than a negative
number.
- coverage --help and coverage --version now mention which tracer is
installed, to help diagnose problems. The docs mention which features
need the C extension.
- Officially support PyPy 5.1, which required no changes, just updates
to the docs.
- The Coverage.report function had two parameters with non-None
defaults, which have been changed. show_missing used to default to
True, but now defaults to None. If you had been calling
Coverage.report without specifying show_missing, you'll need to
explicitly set it to True to keep the same behavior. skip_covered used
to default to False. It is now None, which doesn't change the
behavior.
- It's never been possible to pass a namespace module to one of the
analysis functions, but now at least we raise a more specific error
message, rather than getting confused.
- The coverage.process_startup function now returns the Coverage
instance it creates.
- Make a small tweak to how we compare threads, to avoid buggy custom
comparison code in thread classes.
Version 4.1b2 --- 2016-01-23
- Problems with the new branch measurement in 4.1 beta 1 were fixed:
- Class docstrings were considered executable. Now they no longer are.
- yield from and await were considered returns from functions, since
they could tranfer control to the caller. This produced unhelpful
"missing branch" reports in a number of circumstances. Now they no
longer are considered returns.
- In unusual situations, a missing branch to a negative number was
reported.
- The XML report now produces correct package names for modules found in
directories specified with source=.
- coverage report won't produce trailing whitespace.
Version 4.1b1 --- 2016-01-10
- Branch analysis has been rewritten: it used to be based on bytecode,
but now uses AST analysis. This has changed a number of things:
- More code paths are now considered runnable, especially in
try/except structures. This may mean that coverage.py will identify
more code paths as uncovered. This could either raise or lower your
overall coverage number.
- Python 3.5's async and await keywords are properly supported
- Some long-standing branch coverage bugs were fixed:
- functions with only a docstring for a body would incorrectly
report a missing branch on the def line.
- code in an except block could be incorrectly marked as a missing
branch.
- context managers (with statements) in a loop or try block could
confuse the branch measurement, reporting incorrect partial
branches.
- In Python 3.5, an actual partial branch could be marked as
complete.
- Pragmas to disable coverage measurement can now be used on decorator
lines, and they will apply to the entire function or class being
decorated.
- Multiprocessing support is now available on Windows.
- Files with two encoding declarations are properly supported.
- Non-ascii characters in regexes in the configuration file worked in
3.7, but stopped working in 4.0. Now they work again.
- Form-feed characters would prevent accurate determination of the
beginning of statements in the rest of the file. This is now fixed.
This means:
- An annotation like (int, str) is now typing.Union[int, str].
- utils.typing got expanded so it acts like the real typing.py, with
issubclass() working properly with typing.Union and __union_params__
being set.
- A literal string doesn't exist anymore as annotation, instead
@cmdutils.argument now has a 'choices' argument which can be used like
@cmdutils.argument('arg', choices=['val1', 'val2']).
- Argument validating/converting is now entirely handled by
argparser.type_conv instead of relying on python's argparse, i.e.
type/choices is now not passed to argparse anymore.
Change the unit tests to expect the new tabular format.
Also generally clean up the tests -- refactor from a class to
module-level functions as there was no need for a class here.
This way we can update pip independently before installing the rest, and
avoid installing codecov (and thus coverage which attempts to build C
extension) where it's not needed.
Having a Python script was a good idea back when we could do almost the
same steps on every CI configuration.
This turned out to grow into a complicated script, so it's easier to
split off things for Linux/OS X into a small shell script (and keep
Python for Windows, as I really don't want to use .bat/.ps).
Since Archlinux switched to PyQt 5.6, we can now use the autobuilt image
without a handbuilt PyQt. This means we have an up-to-date image with
each build again.
This means we can now run things like running pylint --version without having
to set PYTHONPATH correctly now.
When using skip_install=true, the plugins wouldn't work as they need to import
qutebrowser.
We have to keep setting PYTHONPATH in run_pylint_on_tests.py, otherwise we get
this error I don't quite understand:
F: 1, 0: error while code parsing: Unable to load file
'/home/florian/proj/qutebrowser/git/__init__.py' ([Errno 2] No such
file or directory: '...') (parse-error)
We patch sources.list to use the US loudbalancer instead of the hardcoded GCE
mirror which Travis uses by default - because that seems to be quite unstable.
There are a lot of problems and flakiness with using a real clipboard.
Instead we now have a :debug-set-fake-clipboard command to set a text, and use
logging when getting the contents.
Fixes#1285.
This way we can instruct update_3rdparty to download a specific version
of pdfjs, e.g. to make debugging easier or to match the version of a
system package.
Syntax:
update_3rdparty.py -p 1.2.109
or
update_3rdparty.py --pdfjs=1.2.109
If the command line argument is not given, the script will automatically
download the latest release.
Unfortunately running coverage means our tests need more than a minute longer
to run.
We still run it in the following scenarios:
- Full 'tox' run
- On Travis CI on Linux
- On the buildbot on Archlinux
But not anymore in the following scenarios:
- When running 'tox -e py35' (or py34)
- On Travis CI on OS X
- On AppVeyor
- On the buildbot except on Archlinux
freeze.py now optionally includes pdfjs if it's present. This means we don't
need to download it every time to run frozen tests, but we can include it in
build_release.py when building a windows package.
You cannot open a file twice on windows, so the call to
urllib.request.urlretrieve was invalid, since we already opened the
temporary file. urlretrieve without a filename will automatically create
and return a temp-file, so we're fine.
* No modified pdfjs installation needed
-> Groundwork for using a system-wide installation
* Script update_3rdparty.py to download and upack the latest pdfjs
release
If we do it in tox.ini, there are two drawbacks:
- We have more stuff in PYTHONPATH even if we don't when actually using
qutebrowser.
- The separator is platform specific, so we can't easily do this in a portable
way in tox.ini.