Commit Graph

32181 Commits

Author SHA1 Message Date
Augie Fackler
47d21819fe cmdutil: comprehensively document the interface of export
I want to make some improvements here, but in order to make future
patches easier to review I want to document the current state of the
world.
2017-05-20 17:58:04 -04:00
Durham Goode
3033fcec75 tests: hide warning from test-xdg.t
The test-xdg.t test uses the system hgrc because it unsets HGRCPATH. If the
system has an extension enabled that doesn't work with the development version
of Mercurial it prints an 'extension failed to load' warning. Let's just hide
that by piping stderr to /dev/null.
2017-05-22 15:56:47 -07:00
Jun Wu
714cce3396 policy: define C module versions individually
This allows us to bump the version for a single module without changing all
of them.
2017-05-22 22:59:40 -07:00
Pierre-Yves David
b02205e9d6 repoview: rename '_getdynamicblockers' to 'revealedrevs' (API)
Recent mailing list discussion made me realised we could clarify these. We make
the function "public" to encourage extensions to wrap it and we use a more
explicit name that mirror "hideablerevs".
2017-05-20 19:43:58 +02:00
Pierre-Yves David
2795351073 repoview: move '_getdynamicblock' next to 'hideablerevs'
There are the two functions that extensions should use to augment the hidding
logic. It seem better to have them together at the top of the file.
2017-05-20 19:43:29 +02:00
Siddharth Agarwal
dae5a54ac2 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.
2017-05-21 13:26:17 -07:00
Siddharth Agarwal
0afdb2c4b2 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.
2017-05-21 12:51:01 -07:00
Siddharth Agarwal
71d917f14d demandimport: add python 3 implementation
This implementation uses the new importlib finder/loader functionality
available in Python 3.5 and up.

# no-check-commit
2017-05-21 12:23:04 -07:00
Siddharth Agarwal
8ffb99bcb0 demandimport: move ignore list to __init__.py
We're going to use the same ignore list for Python 3.
2017-05-21 12:10:53 -07:00
Siddharth Agarwal
1ce1a31421 check: check modules in hgdemandimport
A few places only check modules in mercurial and hgext. Add
hgdemandimport to the list in those places.
2017-05-21 13:44:26 -07:00
Siddharth Agarwal
a41c665cd6 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.
2017-05-21 12:10:53 -07:00
Siddharth Agarwal
59a34a8229 import-checker: add a way to directly import certain symbols
We'll use this for the 'demandimport' symbol in an upcoming patch.
2017-05-21 12:09:01 -07:00
Siddharth Agarwal
a03b2b7cab 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.
2017-05-21 13:34:42 -07:00
Jun Wu
610c5f87a9 profiling: allow loading profiling extension before everything else
459366b580cf 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.
2017-05-22 01:17:49 -07:00
Jun Wu
1e83688564 extensions: allow loading a whitelisted subset of extensions
This feature will be used by the next patch.
2017-05-22 00:51:56 -07:00
Martin von Zweigbergk
243fda7165 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).
2017-05-22 08:49:34 -07:00
Boris Feld
59e3c73ea0 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.
2017-05-22 19:29:21 +02:00
Boris Feld
389d0518ad 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.
2017-05-22 19:28:47 +02:00
Boris Feld
44d2fb42d7 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.
2017-05-16 18:36:08 +02:00
Boris Feld
527b4d3011 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.
2017-05-19 12:08:47 +02:00
Pierre-Yves David
bb04bb0f0e 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.
2017-05-22 16:59:57 +02:00
Boris Feld
b66380af61 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.
2017-05-19 12:18:25 +02:00
Boris Feld
04a3cbe923 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.
2017-05-19 12:07:41 +02:00
Boris Feld
db6502431a 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.
2017-05-19 12:07:23 +02:00
Martin von Zweigbergk
ee3be3c6ea 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.
2017-05-22 11:08:18 -07:00
Martin von Zweigbergk
ac1b56578a 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 7013de107975 (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).
2017-05-22 10:41:32 -07:00
Pulkit Goyal
6b98477968 revset: make hg log -r 'wdir()^' work (issue4905)
This patch catches the WdirUnsupported exception to support wdir()^.
2017-05-19 20:06:45 +05:30
Pulkit Goyal
26a5b62b59 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.
2017-05-19 19:12:06 +05:30
Pulkit Goyal
8c8779ddbb 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.
2017-05-19 19:10:37 +05:30
Martin von Zweigbergk
722dff8abb 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.
2017-05-18 22:20:59 -07:00
Martin von Zweigbergk
8daa488d75 match: delete icasefsmatcher now that it's same as matcher 2017-05-18 16:48:02 -07:00
Martin von Zweigbergk
a7219ec491 match: pass in normalize() function to matchers
This will let us delete icasefsmatcher.
2017-05-18 15:45:50 -07:00
Martin von Zweigbergk
04a6ac40df 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 d70aa474bd84 (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.
2017-05-18 16:05:46 -07:00
Martin von Zweigbergk
6b512ea877 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.
2017-05-18 15:25:16 -07:00
Martin von Zweigbergk
57f69ee76c 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.
2017-05-18 15:11:04 -07:00
Martin von Zweigbergk
ab0ee38146 match: replace match class by match function (API)
The matcher class is getting hard to understand. It will be easier to
follow if we can break it up into simpler matchers that we then
compose. I'm hoping to have one matcher that accepts regular
(non-include) patterns, one for exact file matches, one that always
matches (and maybe one that never does) and then compose them by
intersection and difference.

This patch takes a simple but important step towards that goal by
making match.match() a function (and renaming the matcher class itself
from "match" to "matcher"). The new function will eventually be
responsible for creating the simple matchers and composing them.

icasefsmatcher similarly gets a factory function (called
"icasefsmatch"). I also moved the other factory functions nearby.
2017-05-12 23:11:41 -07:00
Augie Fackler
542631c0ed checklink: degrade gracefully on posix when fs is readonly (issue5511)
In the unlucky case, checklink tries to make a new file for the
symlink test to target. If the filesystem is readonly (perhaps due to
permissions in a repo owned by someone else) we just report the
filesystem as not supporting symlinks, since the user probably can't
write anyway.
2017-05-21 18:36:28 -04:00
Gregory Szorc
7d51a8278d revlog: remove some revlogNG terminology
RevlogNG is not such a good name when it is no longer the
newest revlog version. Since we'll soon have revlog version 2,
let's remove some references to it.
2017-05-19 20:14:31 -07:00
Gregory Szorc
5bcef1853c revlog: tweak wording and logic for flags validation
First, the logic around the if..elif..elif was subtly wrong
and sub-optimal because all branches would be tested as long as
the revlog was valid. This patch changes things so it behaves like
a switch statement over the revlog version.

While I was here, I also tweaked error strings to make them
consistent and to read better.
2017-05-19 20:10:50 -07:00
Gregory Szorc
bf38320f87 tests: tests for revlog version and flags loading
We didn't have explicit test coverage of these branches.
Better late than never.
2017-05-19 20:01:35 -07:00
Pierre-Yves David
55566b12d1 perf: allow to clear the obsstore in 'perfvolatilesets'
Loading the obsstore can become a large part of the time necessary to compute
the important volatile set. We add a flag purging all known obsstore related
data.

For example, computing the 'bumped' set currently requires reading the full
obsstore, so timing greatly differ with or without that flag:

Without:
! bumped
! wall 0.005047 comb 0.000000 user 0.000000 sys 0.000000 (best of 446)

With:
! bumped
! wall 0.512367 comb 0.510000 user 0.480000 sys 0.030000 (best of 15)
2017-05-21 13:32:07 +02:00
Pierre-Yves David
b50d7d0364 obsolete: test an important corner case
Receiving markers affecting changeset we'll receives later is legitimate and
not so uncommon case. Working on cache highlighted that this was only testing
in the evolve extension. We add a test for this case in core.
2017-05-21 13:49:48 +02:00
Martin von Zweigbergk
7b0b647fd2 largefiles: replace always() method, not _always field
We will soon have matchers that don't have an _always field, so
largefiles needs to stop assuming that they do. _always is only used
by always(), so we safely replace that method instead.
2017-05-18 22:47:42 -07:00
Augie Fackler
0e18802e22 merge with stable 2017-05-21 02:45:32 -04:00
Yuya Nishihara
c8c29352a4 cext: mark constant variables 2017-05-21 13:41:01 +09:00
Yuya Nishihara
79ebd14e1e cext: move util.h to cext tree
Since util.h isn't useful in plain C module, it should be placed in CPython
extension directory.
2017-05-21 13:35:19 +09:00
Yuya Nishihara
0174b4e600 cext: move back finalization of dirstateTupleType where it should be 2017-05-21 13:31:27 +09:00
Martin von Zweigbergk
d0f5db29a6 cleanup: reuse existing wctx variables instead of calling repo[None]
Incidentally, this apparently means we load .hgsub one time less as
well, which affects a test case.
2017-05-20 22:27:52 -07:00
Augie Fackler
39eba5889f localrepo: extract bookmarkheads method to bookmarks.py
This method is only used internally by destutil, and it's obscure
enough I'm willing to just move it without a deprecation warning,
especially since the new method has more constrained functionality.

Design-wise I'd also like to get active bookmark handling folded into
the bookmark store, so that we don't squirrel away an extra attribute
for the active bookmark on the repository object.
2017-05-18 16:43:56 -04:00
Augie Fackler
d523c2a5f9 tests: avoid renamed files triggering check-commit failures
I had to flag some revisions to not undergo check-commit scrutiny
today to get the tests to pass, because they renamed files that had
existing failures which we're not cleaning up. Let's prevent that in
the future by using the extended git diff format to elide moved code.
2017-05-20 20:50:29 -04:00