Siddharth Agarwal <sid0@fb.com> [Sun, 21 May 2017 13:26:17 -0700] rev 32425
python3: allow hgloader to work with lazy loaders
Don't clobber the loader returned from find_spec.
This brings `hg version` down from 0.27 seconds to 0.17.
Siddharth Agarwal <sid0@fb.com> [Sun, 21 May 2017 12:51:01 -0700] rev 32424
init: turn on demandimport for Python 3.6 and above
This uses the new demandimport implementation for Python 3 introduced in
previous patches.
This doesn't yet enhance performance because it isn't integrated with the
custom source file loader we use on Python 3. We'll integrate the two in
upcoming patches.
Siddharth Agarwal <sid0@fb.com> [Sun, 21 May 2017 12:23:04 -0700] rev 32423
demandimport: add python 3 implementation
This implementation uses the new importlib finder/loader functionality
available in Python 3.5 and up.
# no-check-commit
Siddharth Agarwal <sid0@fb.com> [Sun, 21 May 2017 12:10:53 -0700] rev 32422
demandimport: move ignore list to __init__.py
We're going to use the same ignore list for Python 3.
Siddharth Agarwal <sid0@fb.com> [Sun, 21 May 2017 13:44:26 -0700] rev 32421
check: check modules in hgdemandimport
A few places only check modules in mercurial and hgext. Add
hgdemandimport to the list in those places.
Siddharth Agarwal <sid0@fb.com> [Sun, 21 May 2017 12:10:53 -0700] rev 32420
demandimport: move to separate package
In Python 3, demand loading is per-package. Keeping demandimport in the
mercurial package would disable demand loading for any modules in
mercurial.
Siddharth Agarwal <sid0@fb.com> [Sun, 21 May 2017 12:09:01 -0700] rev 32419
import-checker: add a way to directly import certain symbols
We'll use this for the 'demandimport' symbol in an upcoming patch.
Siddharth Agarwal <sid0@fb.com> [Sun, 21 May 2017 13:34:42 -0700] rev 32418
check-code: allow skipping hasattr check in py3-only code
hasattr is safe in Python 3, and in an upcoming patch we can't use
util.safehasattr.
Jun Wu <quark@fb.com> [Mon, 22 May 2017 01:17:49 -0700] rev 32417
profiling: allow loading profiling extension before everything else
6d642ecf1a89 makes profiler start early without loading extensions. That
makes it impossible for an extension to add customized profilers.
This patch adds a special case: if a profiler is not found but an extension
with the same name could be loaded, load that extension first, and expect it
to have a "profile" contextmanager method. This allows customized profilers
and extension setup time is still profiled.
Jun Wu <quark@fb.com> [Mon, 22 May 2017 00:51:56 -0700] rev 32416
extensions: allow loading a whitelisted subset of extensions
This feature will be used by the next patch.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 22 May 2017 08:49:34 -0700] rev 32415
match: catch attempts to create case-insenstive exact matchers
Exact matchers are only created internally (as opposed to from user
input) based on a set of files that the caller collected before, so
they should always match the list exactly (i.e. case-sensitively).
Boris Feld <boris.feld@octobus.net> [Mon, 22 May 2017 19:29:21 +0200] rev 32414
test: remove aliases forcing date, use default-date
Now that we have the default-date by default and all code have been updated,
remove the old commands alias that forced the date as they are not longer
useful.
Writing tests now should be easier for everyone now that all dates should be
stable.
Boris Feld <boris.feld@octobus.net> [Mon, 22 May 2017 19:28:47 +0200] rev 32413
test: prepare tests for removing date aliases
In the next patch, I'm gonna removing the global command aliases that force
the epoch date but some tests either fail or their output change after that.
Instead I'm copying the needed aliases in the test files that will otherwise
change.
Update test-rebase-obsolete.t because a revision hash is based on the epoch
date after a 'commit --amend' and the output will change after removing date
aliases.
Update test-subrepo-git.t as the git subrepo doesn't use traditional date
mechanisms. I'm not sure that updating the git subrepo to support default-date
make sense. Add the commit alias to the test in order for making it pass after
removing the date aliases globally.
Boris Feld <boris.feld@octobus.net> [Tue, 16 May 2017 18:36:08 +0200] rev 32412
devel: update blackbox to use default-date
Blackbox now obeys the 'devel.default-date' option. As a side effect we can
delete the mock for blackblox related tests.
Boris Feld <boris.feld@octobus.net> [Fri, 19 May 2017 12:08:47 +0200] rev 32411
devel: use default-date config field when creating obsmarkers
Also use the default-date when creating obsmarkers. Currently they are created
with the current date and without any option to force their value.
To test the feature, we remove some of the many 'glob' used to match obsmarker
date in the tests.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 22 May 2017 16:59:57 +0200] rev 32410
devel: activate default-date in tests
It will make writing future tests more easier for everyone as we won't need to
glob dates anymore in tests.
Boris Feld <boris.feld@octobus.net> [Fri, 19 May 2017 12:18:25 +0200] rev 32409
devel: add a config field to force dates to timestamp 0
Add a new config field named default-date under the devel section to force all
implicits date to a specific value. If a explicit date is passed, it will
override the default.
This patch only affect changesets. Other usages (blackbox, obsmarkers) are
updated in later patchs.
The test runner is setting a bunch of alias to force the '--date' argument. We
will replace theses aliases in a later patch.
Boris Feld <boris.feld@octobus.net> [Fri, 19 May 2017 12:07:41 +0200] rev 32408
ui: add the possiblity to get a date config field
Add the method configdate to read a date from configuration. It uses the
util.rawparsedate refactored earlier to support all standard date formats.
Boris Feld <boris.feld@octobus.net> [Fri, 19 May 2017 12:07:23 +0200] rev 32407
util: refactor util.parsedate to raises ValueError
Split most of util.parsedate in util.rawparsedate and make it raises ValueError instead
of error.Abort.
The util.parsedate function is now just a shell function converting ValueError
to error.Abort for existing users.
I need to parse a date from config in a later patch and use util.rawparsedate
with ui.configwith which expect a convert that raises ValueError.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 22 May 2017 11:08:18 -0700] rev 32406
match: implement __repr__() and update users (API)
fsmonitor and debugignore currently access matcher fields that I would
consider implementation details, namely patternspat, includepat, and
excludepat. Let' instead implement __repr__() and have the few users
use that instead.
Marked (API) because the fields can now be None.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 22 May 2017 10:41:32 -0700] rev 32405
fsmonitor: fix silly "*kwargs" bug in merge.update() override
Everyone knows that it's supposed to be spelled with two asterisks.
It started failing in
fad5e299cfc7 (update: accept --merge to allow
merging across topo branches (
issue5125), 2017-02-13) because until
then there was only one argument that was covered by the kwargs, so
*kwargs or **kwargs both worked (or at least that's what I think with
my limited understanding of Python).
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 19 May 2017 20:06:45 +0530] rev 32404
revset: make `hg log -r 'wdir()^'` work (
issue4905)
This patch catches the WdirUnsupported exception to support wdir()^.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 19 May 2017 19:12:06 +0530] rev 32403
revlog: raise WdirUnsupported when wdirrev is passed
revlog.parentrevs() is called while evaluating ^ operator in revsets. When wdir
is passed, it raises IndexError. This patch raises WdirUnsupported if wdir is
passed in the function. The error will be caugth in future patches.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 19 May 2017 19:10:37 +0530] rev 32402
error: add a new exception named WdirUnsupported
This series intents to support wdir() predicate with different operators
like ~, ^.
Currently the storage class don't support wdir(). This exception is introduced
so that it can be raised from places where wdir() is passed and is not
supported and we can catch this where we want to support the predicate.
Also throwing an error at low level and catching at some higher level is better
than using if-else especially for perf.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 22:20:59 -0700] rev 32401
match: replace icasefsmatch() function by flag to regular match()
match() will soon gain more logic and we don't want to duplicate that
in icasefsmatch(), so merge the two functions instead and use a flag
to get case-insensitive behavior.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 16:48:02 -0700] rev 32400
match: delete icasefsmatcher now that it's same as matcher
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 15:45:50 -0700] rev 32399
match: pass in normalize() function to matchers
This will let us delete icasefsmatcher.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 16:05:46 -0700] rev 32398
match: don't print explicitly listed files with wrong case (BC)
On case-insensitive file systems, if file A exists and you try to
remove it (or add, etc.) by specifying a different case, you will see
something like this:
$ hg rm a
removing file A
I honestly found this surprising because it seems to me like it was
explicitly listed by the user. Still, there is a comment in the code
describing it, so it is very clearly intentional. The code was added
in
baa11dde8c0e (match: add a subclass for dirstate normalizing of the
matched patterns, 2015-04-12).
I'm going to do a lot of refactoring to matchers and the feature
mentioned above is going to get in my way. I'm therefore removing it
for the time being and we can hopefully add it back when I'm done.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 15:25:16 -0700] rev 32397
match: move body of _normalize() to a static function
matcher._normalize() no longer depends on any of the matcher's state,
and making it static will enable further refactoring. Note that the
subdirmatcher subclass calls _normalize(), so we can't remove it
completely.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 15:11:04 -0700] rev 32396
match: pass 'warn' argument to _normalize() for consistency
No other arguments are passed via the matcher's state, so we should
treat 'warn' the consistently. More importantly, this will let us make
it a static function, which will help with further refactoring.