Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Mar 2015 19:39:03 -0700] rev 24507
run-tests: wait for test threads after first error
The test runner has the ability to stop on first error.
Tests are executed in new Python threads. The test runner starts new
threads when it has capacity to do so. Before this patch, the "stop on
first error" logic would return immediately from the "run tests"
function, without waiting on test threads to complete. There was thus
a race between the test runner thread doing cleanup work and the test
thread performing activity. For example, the test thread could be in
the middle of executing a test shell script and the test runner
could remove the test's temporary directory. Depending on timing, this
could result in any number of output from the test runner.
This patch eliminates the race condition by having the test runner
explicitly wait for test threads to complete before continuing.
I discovered this issue as I modified the test harness in a subsequent
patch and was reliably able to tickle the race condition.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Mar 2015 00:21:30 -0700] rev 24506
run-tests: report code coverage from source directory
As part of testing code coverage output, I noticed some files were
being reported twice: there was an entry for the file in the install
location and for the file in the source tree. I'm not sure why this
is. But it resulted in under-reporting of coverage data since some
lines weren't getting covered in both locations.
I also noticed that files in the source directory and outside the
"mercurial" and "hgext" packages were getting included in the
coverage report. Cosmetically, this seemed odd to me. It's not
difficult to filter paths from the report. But I figure this data
can be useful (we could start reporting run-tests.py coverage,
for example).
This patch switches the coverage API to report code coverage from
the source directory. It registers a path alias so that data from
the install location is merged into data from the source directory.
We now get merged results for files that were being reported in
multiple locations.
Since code coverage reporting now relies on the profiled install
now being in sync with the source tree, an additional check to
disallow code coverage when --with-hg is specified has been added.
This should have been present before, as --local was previously
disallowed for the same reasons.
Merging the paths raises our aggregate line coverage from ~60 to
81%.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Mar 2015 00:47:58 -0700] rev 24505
run-tests: collect aggregate code coverage
Before this patch, every Python process during a code coverage run was
writing coverage data to the same file. I'm not sure if the coverage
package even tries to obtain a lock on the file. But what I do know is
there was some last write wins leading to loss of code coverage data, at
least with -j > 1.
This patch changes the code coverage mechanism to be multiple process
safe. The mechanism for initializing code coverage via sitecustomize.py
has been tweaked so each Python process will produce a separate coverage
data file on disk. Unless two processes generate the same random value,
there are no race conditions writing to the same file. At the end of the
test run, we combine all written files into an aggregate report.
On my machine, running the full test suite produces a little over
20,000 coverage files consuming ~350 MB. As you can imagine, it takes
several seconds to load and merge these coverage files. But when it is
done, you have an accurate picture of the aggregate code coverage for the
entire test suite, which is ~60% line coverage.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 27 Mar 2015 23:17:19 -0700] rev 24504
run-tests: obtain code coverage via Python API
Before, we were invoking the "coverage" program provided by the
"coverage" module. This patch changes the code to go through the
Python API. This makes the next patch a little bit easier to reason
about.
A side effect of this patch is that writing code coverage reports
will be slightly faster, as we won't have to redundantly load
coverage data.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Mar 2015 12:58:44 -0700] rev 24503
commands.debugrevlog: report max chain length
This is sometimes useful to know. Report it.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 27 Mar 2015 20:55:54 -0700] rev 24502
_lazymanifest: drop unnecessary call to sorted()
The entries returned from _lazymanifest.iterentries() are already
sorted.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 29 Mar 2015 00:00:14 -0400] rev 24501
test-git-export: add globs the test runner wants on Windows
The only difference for the first two was to add the globs, but the third line
of output on Windows was '..\dir2\copy'. I'm not sure why 'copy' is output on
Windows instead of '*'.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 29 Mar 2015 10:41:23 -0700] rev 24500
run-tests: explicitly handle unicode when writing xunit file
The xunit writer was passing a str to a minidom API. An implicit
.decode('ascii') was performed somewhere, causing UnicodeDecodeError
if test output contained non-ascii sequences.
This patch converts test output to utf-8 before passing it to minidom.
We use the "replace" strategy to ensure invalid utf-8 sequences get
munged into �.
André Sintzoff <andre.sintzoff@gmail.com> [Sun, 29 Mar 2015 19:06:23 +0200] rev 24499
parsers.c: avoid implicit conversion loses integer warnings
These warnings are raised by Apple LLVM version 6.0 (clang-600.0.57)
(based on LLVM 3.5svn) and were introduced in
539b3c7eea44
Matt Harbison <matt_harbison@yahoo.com> [Sun, 29 Mar 2015 00:20:56 -0400] rev 24498
test-annotate: conditionalize error output for Windows
It seems better to leave the actual output in place instead of globbing
everything but 'abort:', in case it starts aborting for other reasons.
It isn't clear the purpose for reversing the file name position, but that
originates in windows.posixfile.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 28 Mar 2015 23:57:16 -0400] rev 24497
test-diffstat: add a glob the test runner wants on Windows
The test gets a '~' status without it.
Mathias De Maré <mathias.demare@gmail.com> [Tue, 24 Mar 2015 21:36:38 +0100] rev 24496
tests: add testing for diff.showfunc
The diff.showfunc config knob did not have coverage before.
Drew Gottlieb <drgott@google.com> [Mon, 30 Mar 2015 10:43:52 -0700] rev 24495
manifest: make manifest.intersectfiles() internal
manifest.intersectfiles() is just a utility used by manifest.matches(), and
a future commit removes intersectfiles for treemanifest for optimization
purposes.
This commit makes the intersectfiles methods on manifestdict and treemanifest
internal, and converts its test to a more generic testMatches(), which has the
exact same coverage.
Adrian Buehlmann <adrian@cadifra.com> [Sat, 28 Mar 2015 11:19:34 +0100] rev 24494
win32: add comment about WinError
Prevent reintroducing the bug that was added in
e34106fa0dc3 (and fixed with
a2285e2fc949).
Yuya Nishihara <yuya@tcha.org> [Sat, 28 Mar 2015 20:22:03 +0900] rev 24493
templates: fix "log -q" output of phases style
It had the same problem as
6136704b975d, name conflicts of {node} keyword.
Laurent Charignon <lcharignon@fb.com> [Fri, 27 Mar 2015 14:11:13 -0700] rev 24492
record_curses: fix ui bug for newly added file
With record's curses interface toggling and untoggling a newly added
file would lead to a confusing UI (the header was marked as partial
and the hunks as unselected). Tested additionally using the curses
interface with newly added, removed and modified files in a test repo.
Matt Mackall <mpm@selenic.com> [Sat, 28 Mar 2015 00:08:26 -0500] rev 24491
import-checker: rotatecycle is actually the canonical cycle key
So refactor to drop cyclekey().
Matt Mackall <mpm@selenic.com> [Fri, 27 Mar 2015 23:52:23 -0500] rev 24490
import-checker: make search algorithm non-recursive breadth-first
Breadth-first allows finding the shortest cycle including the starting
module. This lets us terminate our search early when we've discovered
shorter paths already. This gives a tremendous speed-up to the
cycle-finding portion of the test, dropping total runtime from 39s to
3s.
Matt Mackall <mpm@selenic.com> [Fri, 27 Mar 2015 19:27:19 -0500] rev 24489
import-checker: drop set() from cyclekey()
Matt Mackall <mpm@selenic.com> [Fri, 27 Mar 2015 19:25:40 -0500] rev 24488
import-checker: drop duplicate element from cycle
This will allow optimizing cyclekey creation
Matt Mackall <mpm@selenic.com> [Fri, 27 Mar 2015 18:50:39 -0500] rev 24487
import-checker: fix rotatecycle
It was duplicating the last element sometimes.
Siddharth Agarwal <sid0@fb.com> [Fri, 27 Mar 2015 01:03:06 -0700] rev 24486
dirs.addpath: rework algorithm to search forward
This improves performance because it uses strchr rather than a loop.
For LLVM/clang version "Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM
3.5svn)" on OS X, for a repo with over 200,000 files, this improves perfdirs
from 0.248 seconds to 0.230 (7.3%)
For gcc 4.4.6 on Linux, for a test repo with over 500,000 files, this improves
perfdirs from 0.704 seconds to 0.658 (6.5%).
Yuya Nishihara <yuya@tcha.org> [Sat, 14 Mar 2015 17:40:47 +0900] rev 24485
changeset_printer: use changectx to get status tuple
log.parents() can't handle wdir() revision. Because repo.status() creates ctx
objects, there would be no benefit to get parent node from changelog.
Yuya Nishihara <yuya@tcha.org> [Sat, 14 Mar 2015 17:23:51 +0900] rev 24484
changeset_printer: replace _meaningful_parentrevs() by changeset_templater's
Because changeset_printer needs pctx object anyway, there would be no benefit
to avoid creation of pctx in _meaningful_parentrevs().