Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 16:08:18 -0700] rev 26379
revlog: use existing file handle when reading during _addrevision
_addrevision() may need to read from revlogs as part of computing
deltas. Previously, we would flush existing file handles and open
a new, short-lived file handle to perform the reading.
If we have an existing file handle, it seems logical to reuse it
for reading instead of opening a new file handle. This patch
makes that the new behavior.
After this patch, revlog files are only reopened when adding
revisions if the revlog is switched from inline to non-inline.
On Linux when unbundling a bundle of the mozilla-central repo, this
patch has the following impact on system call counts:
Call Before After Delta
write 827,639 673,390 -154,249
open 700,103 684,089 -16,014
read 74,489 74,489 0
fstat 493,924 461,896 -32,028
close 249,131 233,117 -16,014
stat 242,001 242,001 0
lstat 18,676 18,676 0
lseek 20,268 20,268 0
ioctl 14,652 13,173 -1,479
TOTAL 3,180,758 2,930,679 -250,079
It's worth noting that many of the open() calls fail due to missing
files. That's why there are many more open() calls than close().
Despite the significant system call reduction, this change does not
seem to have a significant performance impact on Linux.
On Windows 10 (not a VM, on a SSD), this patch appears to reduce
unbundle time for mozilla-central from ~960s to ~920s. This isn't
as significant as I was hoping. But a decrease it is nonetheless.
Still, Windows unbundle performance is still >2x slower than Linux.
Despite the lack of significant gains, fewer system calls is fewer
system calls. If nothing else, this will narrow the focus of potential
areas to optimize in the future.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 15:59:19 -0700] rev 26378
revlog: always open revlogs for reading and appending
An upcoming patch will teach revlogs to use the existing file
handle to read revision data instead of opening a new file handle
just for quick reads. For this to work, files must be opened for
reading as well.
This patch is merely cosmetic: there are no behavior changes.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 15:48:35 -0700] rev 26377
revlog: support using an existing file handle when reading revlogs
Currently, the low-level revlog reading code always opens a new file
handle. In some key scenarios, the revlog is already opened and an
existing file handle could be used to read. This patch paves the
road to that by teaching various revlog reading functions to accept
an optional existing file handle to read from.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 15:31:50 -0700] rev 26376
revlog: add docstring for checkinlinesize()
The name is deceptive: it does more than just "check." Add a docstring
to clarify what's going on.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 18:46:53 -0700] rev 26375
windows: insert file positioning call between reads and writes
fopen() and fdopen() have a unique-to-Windows requirement that
transitions between read and write operations in files opened
in modes r+, w+, and a+ perform a file positioning call
(fsetpos, fseek, or rewind) in between. While the MSDN docs don't
say what will happen if this is not done, observations reveal
that Python raises an IOError with errno 0. Furthermore, I
/think/ this behavior isn't deterministic. But I can reproduce
it reliably with subsequent patches applied that open revlogs
in a+ mode and perform both reads and writes.
This patch introduces a proxy class for file handles opened
in r+, w+, and a+ mode on Windows. The class intercepts calls
and audits whether a file positioning function has been called
between read and write operations. If not, a dummy, no-op seek
to the current file position is performed. This appears to be
sufficient to "trick" Windows into allowing transitions between
read and writes without raising errors.
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Sep 2015 15:20:32 +0900] rev 26374
tests: suppress verbose output of svn transaction
Subversion 1.9 shows more verbose messages than 1.8 and the tests fail
because of them. These outputs are not important in our tests, so let's
suppress them by -q or grep -v.
Yuya Nishihara <yuya@tcha.org> [Wed, 23 Sep 2015 21:54:47 +0900] rev 26373
formatter: use dict.update() to set arguments passed to write functions
This isn't important, but update() is better than loop in general.
Yuya Nishihara <yuya@tcha.org> [Wed, 23 Sep 2015 21:51:48 +0900] rev 26372
formatter: verify number of arguments passed to write functions
zip() takes the shortest length, which can be a source of bug.
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Sep 2015 11:50:47 +0900] rev 26371
help: unify handling of DEPRECATED/EXPERIMENTAL keywords
This fixes listexts() to exclude translated "(DEPRECATED)" marker correctly.
On the other hand, help_() doesn't need translated keywords, but I don't think
it's worth to separate untranslated keywords just for it.
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Sep 2015 11:38:39 +0900] rev 26370
help: include parens in DEPRECATED/EXPERIMENTAL keywords
In some languages that have no caps, "DEPRECATED" and "deprecated" can be
translated to the same byte sequence. So it is too wild to exclude messages
by _("DEPRECATED").
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Sep 2015 11:25:38 +0900] rev 26369
help: define list of keywords that should be excluded from non-verbose output
This list will be reused by the other deprecated/experimental handling.
Matt Mackall <mpm@selenic.com> [Fri, 25 Sep 2015 23:10:47 -0500] rev 26368
merge with stable
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 25 Sep 2015 13:30:49 -0700] rev 26367
unbundle: cleanly abort on unknown bundle2 feature
The exception wasn't caught and resulted in a traceback.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Mon, 14 Sep 2015 19:25:34 -0400] rev 26366
phases: return zero for no-op operations (issue4751) (BC)
It is rather unhelpful to return 1 if there were no changes because
the request matches the current state of phases. So we just undo that.
timeless@mozdev.org [Thu, 24 Sep 2015 14:45:17 -0400] rev 26365
help: add config.troubleshooting section at the top
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 25 Sep 2015 11:16:20 -0400] rev 26364
dispatch: don't stack trace on commands like `hg .log`
This used to stack trace because it raised a util.Abort which wasn't
handled in this block. We now handle it. Additionally, we error out
earlier instead of plodding on and showing the "log" entry of the
plain `hg help` output.
Anton Shestakov <av6@dwimlabs.net> [Fri, 25 Sep 2015 12:38:20 +0800] rev 26363
gitweb, monoblue: port highlighting linked lines from paper
This is adapted from 41c4bdd1d585, fbfe5748ef3e and f3393d458bf5.
Anton Shestakov <av6@dwimlabs.net> [Fri, 25 Sep 2015 03:02:38 +0800] rev 26362
gitweb, monoblue: fix vertical align of spans in .sourcelines
Empty lines in file view could produce an inexplicable margin before the next
line (most noticeable in browsers on webkit/blink engine). That was making
empty lines seem taller than the rest.
Instead of using default vertical align, let's set it to 'top'.
This issue is actually present in paper, and only recently got into gitweb
(2239626369f5) and monoblue (119202d4d7a4). There's a bit more to it in paper,
so that will be dealt with in a future patch.
Recipe to see live: preferably using a webkit/blink browser, such as chromium,
browse a file with empty lines, e.g. https://selenic.com/hg/file/3.5/README#l8
Selecting a block of text that includes empty lines will reveal white "breaks"
in the selection. Highlighted line (#l8) also shows such a break below itself.
timeless@mozdev.org [Fri, 25 Sep 2015 00:54:20 -0400] rev 26361
merge: fix mergestate comment
timeless@mozdev.org [Thu, 24 Sep 2015 17:51:05 -0400] rev 26360
rebase: avoid losing branch commits with --keepbranch (issue4835)
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 16:03:26 -0700] rev 26359
lock.release: do not unlink inherited locks
This is part of a series that will allow locks to be inherited by subprocesses
in limited circumstances. A subprocess unlinking a lock will lead to potential
corruption from other concurrent processes.
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 16:00:41 -0700] rev 26358
lock: add a method to reacquire the lock after subprocesses exit
This is part of a series that will allow locks to be inherited by subprocesses
in limited circumstances.
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 10:37:13 -0700] rev 26357
lock: add a method to prepare the lock for inheritance
This is part of a series that will allow locks to be inherited by subprocesses
in limited circumstances.
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 15:57:11 -0700] rev 26356
lock: introduce state to keep track of inheritance
This is part of a series that will allow locks to be inherited by subprocesses
in limited circumstances. In upcoming patches we will refer to this state.
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 10:53:16 -0700] rev 26355
error: add an exception to indicate lock inheritance API contract violations
Sean Farley <sean@farley.io> [Thu, 24 Sep 2015 15:52:11 -0700] rev 26354
clone: check update rev for being True
In 30be3aeb5344, there was an attempt to fallback to looking up the update
revision assuming it was always a rev but the documentation states:
True means update to default rev, anything else is treated as a revision
Therefore, we should only fallback to looking up the update rev if it is not
True. This bug was found in hg-git and I couldn't think of a test that does
this in pure Mercurial since the source repository is checked for the revision
as well (and therefore gracefully falls back).
Sean Farley <sean@farley.io> [Thu, 24 Sep 2015 15:47:23 -0700] rev 26353
clone: fix over-indented continuation line
timeless@mozdev.org [Fri, 25 Sep 2015 03:51:46 -0400] rev 26352
resolve: consistently describe re-merge + unresolved
liscju <piotr.listkiewicz@gmail.com> [Thu, 10 Sep 2015 16:53:07 +0200] rev 26351
mercurial: add debugextensions command (issue4676)
Add debugextensions command to help users debug their extension
problems. If there are no extensions command prints nothing,
otherwise it prints names of extension modules. If quiet or
verbose option is not specified it prints(after extensions name)
last version of mercurial in which given module was tested for
non internal modules or not tested with user mercurial version.
If verbose is specified it prints following information for every
extension: extension name, import source, testedwith and buglink
information.
Extensions are printed sorted by extension name.
Daniel Colascione <dancol@fb.com> [Thu, 24 Sep 2015 10:15:37 +0300] rev 26350
dispatch: stop warning about EPIPE in --debug mode
It seems silly for "hg --debug manifest | less" to print a scary
message after the user hits "q" in less. hg should just exit silently
instead, since EPIPE on stdout is a perfectly reasonable result.
Laurent Charignon <lcharignon@fb.com> [Mon, 14 Sep 2015 17:31:48 -0700] rev 26349
rebase: don't rebase obsolete commit whose successor is already rebased
This patch avoids unnecessary conflicts to resolve during rebase for the users
of changeset evolution.
This patch modifies rebase to skip obsolete commits if they are being rebased on
their successors.
It introduces a new rebase state 'revprecursor' for these revisions that are
being skipped and a new message to inform the user of what is happening.
This feature is gated behind the config flag experimental.rebaseskipobsolete
When an obsolete commit is skipped, the output is:
not rebasing 14:9ad579b4a5de "I", already in destination as 17:fc37a630c901 "K"
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:34:15 -0700] rev 26348
check-code: forbid mutable value for default argument
default value are common to all call. Using mutable value is a classical source
of bug in Python. We forbid it.
The regexp (Courtesy of Matt Mackall) is only catching such value on the first
line of a definition, but that will be good enough for now.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:54:30 -0700] rev 26347
httpconnection: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:52:21 -0700] rev 26346
transplant: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:50:06 -0700] rev 26345
mq: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs. The
underlying function already handle "None" as an option value, so we do not need
to do anything else.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:49:02 -0700] rev 26344
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:48:24 -0700] rev 26343
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:48:02 -0700] rev 26342
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:46:37 -0700] rev 26341
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:46:12 -0700] rev 26340
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:44:59 -0700] rev 26339
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:44:32 -0700] rev 26338
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:41:43 -0700] rev 26337
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:40:53 -0700] rev 26336
largefiles: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:38:34 -0700] rev 26335
histedit: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:07:09 -0700] rev 26334
templater: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:06:41 -0700] rev 26333
templater: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:06:10 -0700] rev 26332
templater: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:05:21 -0700] rev 26331
templater: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:04:58 -0700] rev 26330
templater: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:04:10 -0700] rev 26329
addremove: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:00:43 -0700] rev 26328
match: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs. We
added support for None in the underlying function in the parent commit.
therefore we do not need to do anything but passing None.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:00:25 -0700] rev 26327
match: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:00:05 -0700] rev 26326
match: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:59:26 -0700] rev 26325
match: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:58:33 -0700] rev 26324
addremove: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:56:30 -0700] rev 26323
tag: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs. We
just added support of None for the underlying function, so nothing else the
required.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:56:18 -0700] rev 26322
commit: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs.
Siddharth Agarwal <sid0@fb.com> [Tue, 22 Sep 2015 14:09:42 -0700] rev 26321
lock: move acquirefn call to inside the lock
We're going to need to call it again as part of reinitialization after a
subprocess inherits the lock.
Siddharth Agarwal <sid0@fb.com> [Tue, 22 Sep 2015 13:25:41 -0700] rev 26320
localrepo: call lock.lock with releasefn as a keyword arg
We'll be adding an acquirefn argument soon, and this makes that clearer.
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 15:11:17 -0500] rev 26319
copies: move debug statement to appropriate place
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 14:05:42 -0500] rev 26318
bidmerge: choose shortest list of diverge and rename/delete warnings
Slightly less arbitrary than choosing the first set.
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 14:04:54 -0500] rev 26317
copies: rename diverge2 to divergeset for clarity
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 13:40:18 -0500] rev 26316
copies: begin separating mergecopies sides