timeless <timeless@mozdev.org> [Thu, 31 Dec 2015 08:17:15 +0000] rev 27638
cleanup: remove superfluous space after space after equals (C)
timeless <timeless@mozdev.org> [Thu, 31 Dec 2015 08:16:59 +0000] rev 27637
cleanup: remove superfluous space after space after equals (python)
Bryan O'Sullivan <bos@serpentine.com> [Mon, 04 Jan 2016 21:54:46 -0800] rev 27636
tests: make a stab at approximating wall-clock times
Vaguely empirical observations:
* ".py" tests are about an order of magnitude faster than ".t" tests
* dividing size by 1000 gives an approximation to wall-clock
run time (in seconds) that is not completely ridiculous.
Bryan O'Sullivan <bos@serpentine.com> [Mon, 04 Jan 2016 21:54:46 -0800] rev 27635
tests: only stat a test file if we don't already know its "cost"
Bryan O'Sullivan <bos@serpentine.com> [Mon, 04 Jan 2016 21:54:44 -0800] rev 27634
tests: write recent run times to a file named tests/.testtimes
This is an effortless way to track how long each test takes without
having to pass any extra command line options.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Dec 2015 11:56:24 -0800] rev 27633
wireproto: support disabling bundle1 only if repo is generaldelta
I recently implemented the server.bundle1* options to control whether
bundle1 exchange is allowed.
After thinking about Mozilla's strategy for handling generaldelta
rollout a bit more, I think server operators need an additional
lever: disable bundle1 if and only if the repo is generaldelta.
bundle1 exchange for non-generaldelta repos will not have the potential
for CPU explosion that generaldelta repos do. Therefore, it makes sense
for server operators to continue to allow bundle1 exchange for
non-generaldelta repos without having to set a per-repo hgrc option
to change the policy depending on whether the repo is generaldelta.
This patch introduces a new set of options to control bundle1 behavior
for generaldelta repos. These options enable server operators to limit
bundle1 restrictions to the class of repos that can be performance
issues. It also allows server operators to tie bundle1 access to store
format. In many server environments (including Mozilla's), legacy repos
will not be generaldelta and new repos will or might be. New repos often
aren't bound by legacy access requirements, so setting a global policy
that disallows access to new/generaldelta repos via bundle1 could be a
reasonable policy in many server environments. This patch makes this
policy very easy to implement (modify global hgrc, add options to
existing generaldelta repos to grandfather them in).
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 02 Jan 2016 15:14:55 -0800] rev 27632
streamclone: use read()
We have a convenience API for reading the full contents of a file.
Use it.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 16:21:57 -0700] rev 27631
internals: document revlog format
It seems like a good idea to document the revlog format.
There is a lot more that could be added to this documentation.
But you have to start somewhere.
timeless <timeless@mozdev.org> [Tue, 22 Dec 2015 23:25:17 +0000] rev 27630
histedit: hide --outgoing warnings
timeless <timeless@mozdev.org> [Wed, 23 Dec 2015 08:57:04 +0000] rev 27629
histedit: list action when intervention is required
timeless <timeless@mozdev.org> [Wed, 23 Dec 2015 08:52:52 +0000] rev 27628
error: make InterventionRequired take a hint
timeless <timeless@mozdev.org> [Thu, 24 Dec 2015 20:41:17 +0000] rev 27627
histedit: hook afterresolvedstates
timeless <timeless@mozdev.org> [Thu, 24 Dec 2015 20:41:40 +0000] rev 27626
rebase: hook afterresolvedstates
timeless <timeless@mozdev.org> [Thu, 24 Dec 2015 20:46:06 +0000] rev 27625
graft: hook afterresolvedstates
timeless <timeless@mozdev.org> [Thu, 24 Dec 2015 19:25:44 +0000] rev 27624
resolve: suggest the next action
Expose afterresolvedstates to allow graft and similar to
suggest a message when resolving results in no unresolved
files.
If there isn't a matching state in afterresolvedstates,
then if verbose, suggest commiting.
Bryan O'Sullivan <bos@serpentine.com> [Mon, 04 Jan 2016 21:52:44 -0800] rev 27623
dispatch: report similar names consistently
Durham Goode <durham@fb.com> [Mon, 04 Jan 2016 16:14:04 -0800] rev 27622
cmdutil: pass node instead of ctx to diffordiffstat
93bcc73df8d5 changed showpatch to use ctx's more, but it accidentally passed
prev as a context and node as a binary string, when both should be passed as
binary strings (since diffordiffstat tries to resolve them via repo[X]).
This affected hggit since the existing ctx belongs to the git overlay, but the
resolved context (from the repo[X] resolution) should belong to the main repo.
This broke a test because it tried to look in the git repo for data that didn't
exist.
This feels like a deeper issue in hggit somewhere, but the fix is here trivial and
obviously more correct
Yuya Nishihara <yuya@tcha.org> [Sun, 27 Dec 2015 23:37:14 +0900] rev 27621
import-checker: list package directory as stdlib module
Before this patch, a directory containing __init__.py wasn't counted as a
module and __init__.pyc was listed as foo.bar.__init__ module.
Yuya Nishihara <yuya@tcha.org> [Sun, 27 Dec 2015 23:48:19 +0900] rev 27620
import-checker: normalize directory separator to get module name on Windows
It didn't work if a path contains "\\". Therefore, ctypes.util couldn't be
found on Windows.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 02 Jan 2016 11:47:07 -0800] rev 27619
mail: use print function
We no longer use the print statement in mercurial.* \o/
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 02 Jan 2016 11:45:29 -0800] rev 27618
lsprofcalltree: use print function
While I was here, some single element tuples have been removed in
favor of the shorter syntax. Some commented lines of code containing
print statements have also been removed because it was unclear what
purpose they served.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 02 Jan 2016 11:40:53 -0800] rev 27617
lsprof: use print function
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 21 Jun 2015 23:14:54 -0700] rev 27616
keepalive: use print function
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 21 Jun 2015 21:45:41 -0700] rev 27615
dispatch: use print function
Python 3 doesn't have a print statement.
timeless <timeless@mozdev.org> [Fri, 01 Jan 2016 16:59:13 +0000] rev 27614
help: include section heading if section depth changes
This makes it easier to distinguish between:
"format"
--------
"usestore"
...
Enabled by default.
and
"progress.format"
Format of the progress bar.
timeless <timeless@mozdev.org> [Wed, 30 Dec 2015 21:07:51 +0000] rev 27613
import: refactor nocommit and importbranch handling
timeless <timeless@mozdev.org> [Wed, 30 Dec 2015 21:06:31 +0000] rev 27612
import: refactor date and user handling
timeless <timeless@mozdev.org> [Wed, 30 Dec 2015 21:05:42 +0000] rev 27611
import: limit scope of msg in tryimportone
Matt Mackall <mpm@selenic.com> [Sat, 02 Jan 2016 02:13:56 +0100] rev 27610
merge with stable
Augie Fackler <raf@durin42.com> [Thu, 31 Dec 2015 13:45:48 -0500] rev 27609
lazymanifest: check error return in filter
Augie Fackler <raf@durin42.com> [Thu, 31 Dec 2015 13:44:59 -0500] rev 27608
lazymanifest: add missing closing parenthesis in comment
timeless <timeless@mozdev.org> [Wed, 30 Dec 2015 17:10:56 +0000] rev 27607
help: rename the Format section to Structure
This reduces the confusion from `hg help config.format` which deals with
repository format. (But also profiling.format, and progress.format)
timeless <timeless@mozdev.org> [Wed, 30 Dec 2015 17:04:08 +0000] rev 27606
help: refactor version/defaults from format section
The old messages implied that disabling a single setting would ensure
compatibility, but if you disabled one of the older flags, and
left a newer flag, that would not actually do what the docs say.
timeless <timeless@mozdev.org> [Wed, 30 Dec 2015 17:06:11 +0000] rev 27605
help: sort format section from newest to oldest
timeless <timeless@mozdev.org> [Wed, 30 Dec 2015 04:04:51 +0000] rev 27604
histedit: fix comment in newnodestoabort
timeless <timeless@mozdev.org> [Wed, 30 Dec 2015 04:02:04 +0000] rev 27603
histedit: fix comment in applychanges
timeless <timeless@mozdev.org> [Tue, 29 Dec 2015 04:30:38 +0000] rev 27602
run-tests: fix get port to try differing ports
The code was moving its offset each time through the loop,
but because it failed to update port, the port was not
going to be available...
Augie Fackler <augie@google.com> [Thu, 31 Dec 2015 13:19:20 -0500] rev 27601
httpclient: update to 938f2107d6e2 of httpplus
This enhances proxy support in httpclient a little bit, though I don't
know that we used that functionality at all. It also switches httpplus
to using absolute_import.
timeless <timeless@mozdev.org> [Thu, 31 Dec 2015 15:39:38 +0000] rev 27600
histedit: remove unused variable state
Siddharth Agarwal <sid0@fb.com> [Wed, 23 Dec 2015 12:51:45 -0800] rev 27599
filemerge: default change/delete conflicts to 'leave unresolved' (BC)
It makes far more sense to leave these conflicts unresolved and kick back to
the user than to just assume that the local version be chosen. There are almost
certainly buggy scripts and applications using Mercurial in the wild that do
merges or rebases non-interactively, and then assume that if the operation
succeeded there's nothing the user needs to pay attention to.
(This wasn't possible earlier because there was no way to re-resolve
change/delete conflicts -- but now it is.)
Siddharth Agarwal <sid0@fb.com> [Wed, 23 Dec 2015 12:41:20 -0800] rev 27598
tests: explicitly request changed version in test-rebase-newancestor.t
We're going to change the default for this in an upcoming patch, but in this
instance we do want to continue picking the changed version.
Siddharth Agarwal <sid0@fb.com> [Wed, 23 Dec 2015 12:41:20 -0800] rev 27597
tests: explicitly request changed version in c/d conflict in test-commit-amend.t
We're going to change the default for this in an upcoming patch, but in this
instance we do want to continue picking the changed version.
Siddharth Agarwal <sid0@fb.com> [Wed, 23 Dec 2015 12:41:20 -0800] rev 27596
test-copy-move-merge.t: explicitly request changed version
We're going to change the default for this in an upcoming patch, but in this
instance we do want to continue picking the changed version.
Laurent Charignon <lcharignon@fb.com> [Sat, 26 Dec 2015 19:40:38 -0800] rev 27595
match: add option to return line and lineno from readpattern
This will be used to display the line and linenumber of ignorefile that matched
an ignored file (issue4856).
Laurent Charignon <lcharignon@fb.com> [Wed, 23 Dec 2015 11:52:54 -0800] rev 27594
dirstate: extract logic to compute the list of ignorefiles
We are going to reuse this logic to improve debugignore in the next patches
of the series.
Laurent Charignon <lcharignon@fb.com> [Wed, 23 Dec 2015 13:16:03 -0800] rev 27593
dirstate: call the C implementation of nonnonormalentries when available
Before this patch, we were using python code for computing the nonnormal
dirstate entries. This patch makes us use the C implementation of the function
when it is available.
Using the nonnormal set in hgwatchman improves hg status performance. Below
are the numbers for mozilla-central.
with the changes:
$ hg perfstatus
! wall 0.010632 comb 0.000000 user 0.000000 sys 0.000000 (best of 246)
without the changes:
$ hg perfstatus
! wall 0.036442 comb 0.030000 user 0.030000 sys 0.000000 (best of 100)
On mozilla-central the improvement to hg status is ~20% (0.25s to 0.2s),
on our big repos at Facebook, the win is ~40% (1.2s to 0.72s).
Laurent Charignon <lcharignon@fb.com> [Mon, 21 Dec 2015 16:27:16 -0800] rev 27592
dirstate: add a C implementation for nonnormalentries
Before this patch, there was only a python version of nonnormalentries.
On mozilla-central we have a 10x win by putting this function in C:
% python -m timeit -s \
'from mercurial import hg, ui, parsers; \
repo = hg.repository(ui.ui(), "mozilla-central"); \
m = repo.dirstate._map' \
'parsers.nonnormalentries(m)'
100 loops, best of 3: 3.15 msec per loop
The python implementation runs in 31ms, a similar test gives:
10 loops, best of 3: 31.7 msec per loop
On our big repos, the win is still of 10x with the python implementation running
in 350ms and the C implementation running in 30ms.
Laurent Charignon <lcharignon@fb.com> [Mon, 21 Dec 2015 16:26:44 -0800] rev 27591
dirstate: add test for non-normal set consistency
This adds a test extension to check that the non-normal set contains the
expected entries. It wraps several methods of the dirstate to check that
the non-normal set has the correct values before and after the call. The
extension lives in contrib so that paranoid developers can easily
enable it to make sure that the non-normal set is consistent across more
complex operations than the included tests.
Laurent Charignon <lcharignon@fb.com> [Fri, 01 Jan 2016 23:40:54 +0100] rev 27590
dirstate: add code to update the non-normal set
Before this patch, we were only populating the non-normal set when parsing
or packing the dirstate. This was not enough to keep the non-normal set up to
date at all time as we don't write and read the dirstate whenever a change
happens. This patch solves this issue by updating the non-normal set when it
should be updated. note: pack_dirstate changes the dmap and we have it keep
it unchanged for retrocompatibility so we are forced to recompute the
non-normal set after calling it.
Laurent Charignon <lcharignon@fb.com> [Wed, 23 Dec 2015 13:13:22 -0800] rev 27589
dirstate: attach the nonnormalset to a propertycache
This patch attaches the nonnormalset to a property cache so that we build it
only when needed.
Laurent Charignon <lcharignon@fb.com> [Mon, 21 Dec 2015 16:22:43 -0800] rev 27588
dirstate: add a function to compute non-normal entries from the dmap
This patch adds a new python function in the dirstate to compute the set of
non-normal files from the dmap. These files are useful to compute the repository
status.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27587
revset: use decorator to mark a predicate as safe
Using decorator can localize changes for adding (or removing) a "safe"
revset predicate function in source code.
To avoid accidentaly treating unsuitable predicates as safe, this
patch uses False as default value of "safe" argument. This forces safe
predicates to be decorated with explicit 'safe=True'.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27586
revset: use delayregistrar to register predicate in extension easily
Previous patch introduced 'revset.predicate' decorator to register
revset predicate function easily.
But it shouldn't be used in extension directly, because it registers
specified function immediately. Registration itself can't be restored,
even if extension loading fails after that.
Therefore, registration should be delayed until 'uisetup()' or so.
This patch uses 'extpredicate' decorator derived from 'delayregistrar'
to register predicate in extension easily.
This patch also tests whether 'registrar.delayregistrar' avoids
function registration if 'setup()' isn't invoked on it, because
'extpredicate' is the first user of it.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27585
registrar: add delayregistrar class to register function in extensions
'delayregistrar' delays actual registration of function until
'setup()' invocation on it.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27584
revset: use decorator to register a function as revset predicate
Using decorator can localize changes for adding (or removing) a revset
predicate function in source code.
It is also useful to pick predicates up for specific purpose. For
example, subsequent patch marks predicates as "safe" by decorator.
This patch defines 'parsefuncdecl()' in 'funcregistrar' class, because
this implementation can be uesd by other decorator class for fileset
predicate and template function.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27583
registrar: add funcregistrar class to register function for specific purpose
This class centralizes the common logic to register function for
specific purpose like below:
- template keyword, filter and function
- revset predicate
- fileset predicate
- webcommand
'funcregistrar' also formats help document of the function with the
'decl'(aration) specified at the construction.
This can avoid (1) redundancy between 'decl' and help document, and
(2) accidental typo of help document. For example, 'foo' should appear
twice like below, if without such formatting:
@keyword('foo')
def foo(....):
""":foo: Explanation of keyword foo ..."""
Almost all cases needs very simple document formatting like below:
- "``DECL``\n EXPLANATION"
- ":DECL: EXPLANATION"
But webcommand needs a little complicated formatting like:
/PATH/SPEC
----------
EXPLANATION ....
To make minirst recognize the section header, hyphen line should be as
long as "/PATH/SPEC". It should be arranged by program.
Implementing 'formatdoc()' in derived class can support complicated
formatting in the latter case. But it seems redundant for simple one
in the former case.
Therefore, 'funcregistrar' does:
- invoke 'self.formatdoc', if it is callable (for the latter case)
- use it as the format string, otherwise (for the former case)
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:15:10 -0700] rev 27582
hgweb: support rendering a sub-topic
If the requested topic contains a "." we assume a sub-topic is
requested and display it.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:34:51 -0700] rev 27581
hgweb: support rendering sub-topic indexes
If the requested topic name is the name of a sub-topic, we now render
an index of topics within that sub-topic.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:26:33 -0700] rev 27580
templates: support linking to main help page
Currently, the "helptopics" template assumes it is only used as the
main index and therefore doesn't hyperlink "help" in the navigation
list. Sub-topics will introduce an additional consumer of this
template. So teach the template to hyperlink the "help" navigation
entry when necessary.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:01:28 -0700] rev 27579
templates: differentiate between partial and full topic name
In order to support sub-topics, we need to support linking to a full
topic name while displaying the base topic name. Change the {helpentry}
template to grab the display name from an optional seperate variable
(which will be defined in a future patch).