Sun, 21 May 2017 15:35:21 +0200 hidden: use _domainancestors to compute revs revealed by dynamic blocker
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 21 May 2017 15:35:21 +0200] rev 32476
hidden: use _domainancestors to compute revs revealed by dynamic blocker The complexity of computing the revealed changesets is now 'O(revealed)'. This massively speeds up the computation on large repository. Moving it to the millisecond range. Below are timing from two Mozilla repositories with different contents: 1) mozilla repository with: * 400667 changesets * 35 hidden changesets (first rev-268334) * 288 visible drafts * obsolete working copy (dynamicblockers), Before: ! visible ! wall 0.030247 comb 0.030000 user 0.030000 sys 0.000000 (best of 100) After: ! visible ! wall 0.000585 comb 0.000000 user 0.000000 sys 0.000000 (best of 4221) The timing above include the computation of obsolete changeset: ! obsolete ! wall 0.000396 comb 0.000000 user 0.000000 sys 0.000000 (best of 6816) So adjusted time give 30ms before versus 0.2ms after. A 150x speedup. 2) mozilla repository with: * 405645 changesets * 4312 hidden changesets (first rev-326004) * 264 visible drafts * obsolete working copy (dynamicblockers), Before: ! visible ! wall 0.168658 comb 0.170000 user 0.170000 sys 0.000000 (best of 48) After ! visible ! wall 0.008612 comb 0.010000 user 0.010000 sys 0.000000 (best of 325) The timing above include the computation of obsolete changeset: ! obsolete ! wall 0.006408 comb 0.010000 user 0.010000 sys 0.000000 (best of 404) So adjusted time give 160ms before versus 2ms after. A 75x speedup.
Sun, 21 May 2017 15:21:46 +0200 hidden: add a function returning ancestors of revs within a domain
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 21 May 2017 15:21:46 +0200] rev 32475
hidden: add a function returning ancestors of revs within a domain See documentation for details. This will be used to improve the hidden computation algorithm. See new changesets for usage.
Fri, 26 May 2017 14:52:54 -0700 tests: hint how to run slow tests when rejecting
Kyle Lippincott <spectral@google.com> [Fri, 26 May 2017 14:52:54 -0700] rev 32474
tests: hint how to run slow tests when rejecting
Fri, 26 May 2017 13:24:07 -0700 zsh_completion: install as _hg not hg
Kyle Lippincott <spectral@google.com> [Fri, 26 May 2017 13:24:07 -0700] rev 32473
zsh_completion: install as _hg not hg The contrib/zsh_completion file itself says to name it _hg. With a name like `hg`, if the user has a line like `autoload ${^fpath}/*(N-.:t)` in their zshrc, it will create a shell function named `hg` that will hide the actual hg command and make hg unusable. Separately from that though, the underscore prefix makes it actually work. The zsh man page states: The convention for autoloaded functions used in completion is that they start with an underscore This does not seem to just be a "convention", though. With the ill-advised line removed from my zshrc and the file named `/usr/local/share/zsh/site-functions/hg` (without the underscore), these completions did not seem to get loaded and the ones from the zsh installation were loaded instead. If I renamed them to be `/usr/local/share/zsh/site-functions/_hg`, however, they were loaded. I manually tested the above statement by starting a new zsh instance with the file in `/usr/local/share/zsh/site-functions` with the following names: - As `hg`, `which _hg_labels` did not show anything - As `_hg`, `which _hg_labels` showed the expected function.
Mon, 20 Mar 2017 17:50:31 -0400 osx: include chg by default
Augie Fackler <augie@google.com> [Mon, 20 Mar 2017 17:50:31 -0400] rev 32472
osx: include chg by default
Fri, 26 May 2017 20:03:05 -0400 osx: override default exclude filter for pkgbuild
Augie Fackler <augie@google.com> [Fri, 26 May 2017 20:03:05 -0400] rev 32471
osx: override default exclude filter for pkgbuild To quote `man 1 pkgbuild`: --filter filter-expression By default, --root will include the entire contents of the given root-path in the package payload, except for any .svn or CVS directories, and any .DS_Store files. You can override these default filters by specifying one or more --filter options. Each filter-expression is an re_format(7) ``extended'' expression: any path in the root which matches any of the given expressions will be excluded from the pack- age payload. (Note that specifying even one --filter inhibits the default filters, so you must respecify the default fil- ters if you still want them to be used.) It turns out the default filter these days *also* includes .git and .hg. Notice how that filter expression is a regular expression? That (presumably unintentionally) prevents a file named "chg" or "_hg" from getting included in the distribution. Many many thanks to spectral@ for trying to include a _hg file which led us to figure this bug out. Bug filed with Apple for this as rdar://problem/32437369, mentioning both the gap in documentation and the wrong defaults.
Fri, 26 May 2017 20:05:59 -0400 osx: update Mac packaging tests for bdiff.so install location change
Augie Fackler <augie@google.com> [Fri, 26 May 2017 20:05:59 -0400] rev 32470
osx: update Mac packaging tests for bdiff.so install location change
Fri, 26 May 2017 19:33:20 -0700 debian: add less as a build dependency stable
Rodrigo Damazio Bovendorp <rdamazio@google.com> [Fri, 26 May 2017 19:33:20 -0700] rev 32469
debian: add less as a build dependency For builds that run on hermetic environments, it's possible that the "less" package is not installed by default, yet it's needed for tests to pass after revision bf5e13e38390 (which sets less as the fallback pager).
Fri, 05 May 2017 18:15:42 +0200 strip: use the 'writenewbundle' function to get bundle on disk
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 05 May 2017 18:15:42 +0200] rev 32468
strip: use the 'writenewbundle' function to get bundle on disk This will ensure the backup bundle use the best available logic (eg: includes relevant caches so that we loose less of them on strip.)
Tue, 23 May 2017 02:23:07 +0200 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 23 May 2017 02:23:07 +0200] rev 32467
perfphases: add 'perfphases' command This commands benchmark the time spend computing the data in a repository.
Tue, 16 May 2017 22:15:42 -0700 match: remove support for excludes from matcher class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 16 May 2017 22:15:42 -0700] rev 32466
match: remove support for excludes from matcher class The support is now provided by differencematcher() and still available via the match() function.
Tue, 16 May 2017 16:36:48 -0700 match: handle excludes using new differencematcher
Martin von Zweigbergk <martinvonz@google.com> [Tue, 16 May 2017 16:36:48 -0700] rev 32465
match: handle excludes using new differencematcher As I've said on earlier patches, I'm hoping to use more composition of simpler matchers instead of the single complex matcher we currently have. This extracts a first new matcher that composes two other matchers. It matches if the first matcher matches but the second does not. As such, we can use it for excludes, which this patch also does. We'll remove the now-unncessary code for excludes in the next patch.
Thu, 25 May 2017 09:52:56 -0700 match: override matchfn() the usual way in subdirmatcher
Martin von Zweigbergk <martinvonz@google.com> [Thu, 25 May 2017 09:52:56 -0700] rev 32464
match: override matchfn() the usual way in subdirmatcher
Thu, 25 May 2017 09:52:49 -0700 match: make matchfn a method on the class
Martin von Zweigbergk <martinvonz@google.com> [Thu, 25 May 2017 09:52:49 -0700] rev 32463
match: make matchfn a method on the class This makes it easier to override in subclasses, so they don't have to assign the attribute with a lambda.
Wed, 24 May 2017 17:50:17 +0200 util: raise ParseError when parsing dates (BC)
Boris Feld <boris.feld@octobus.net> [Wed, 24 May 2017 17:50:17 +0200] rev 32462
util: raise ParseError when parsing dates (BC) a7dce526c462 refactored util.parsedate in order to raise ValueError instead of Abort for using with ui.configwith. It causes several problems, putting arbitrary bytes in ValueError can cause issues with Python 3. Moreover, we added a function to convert ValueError exceptions back to Abort. A better approach would be to make parsedate raises ParseError, removing the convert function and update configwith to also catch ParseError. The side-effect is that error message when giving an invalid date in CLI change from: abort: invalid date: 'foo bar' to: hg: parse error: invalid date: 'foo bar' I'm not sure if it's an acceptable change, I found personally the error message more clear but more verbose too.
Tue, 16 May 2017 14:31:21 -0700 match: fix visitdir for roots of includes
Martin von Zweigbergk <martinvonz@google.com> [Tue, 16 May 2017 14:31:21 -0700] rev 32461
match: fix visitdir for roots of includes I'm hoping to rewrite the matcher so excludes are handled by composition of one matcher with another matcher where the second matcher has only includes. For that to work, we need to make visitdir() to return 'all' for directory 'foo' for a '-I foo' matcher.
Wed, 17 May 2017 23:02:42 -0700 match: make subdirmatcher extend basematcher
Martin von Zweigbergk <martinvonz@google.com> [Wed, 17 May 2017 23:02:42 -0700] rev 32460
match: make subdirmatcher extend basematcher This makes the subdirmatcher not depend on the main matcher, giving us more freedom to modify that (specifically, it will lose it _always field in a while).
Fri, 19 May 2017 10:17:08 -0700 match: make basematcher._files a @propertycache
Martin von Zweigbergk <martinvonz@google.com> [Fri, 19 May 2017 10:17:08 -0700] rev 32459
match: make basematcher._files a @propertycache This will make it easier to override in subclasses (otherwise the function @propertycache object will be replaced by the super-constructor call)..
Wed, 17 May 2017 23:45:13 -0700 match: extract base class for matchers
Martin von Zweigbergk <martinvonz@google.com> [Wed, 17 May 2017 23:45:13 -0700] rev 32458
match: extract base class for matchers We will soon start splitting up the current matcher class into more specialized classes, so we'll want a base class for all the things that don't vary much between different matchers.
Mon, 22 May 2017 11:08:52 -0700 debugwalk: also print matcher representation
Martin von Zweigbergk <martinvonz@google.com> [Mon, 22 May 2017 11:08:52 -0700] rev 32457
debugwalk: also print matcher representation This will make the effect of coming patches clearer.
Thu, 25 May 2017 23:42:37 -0400 wix: add 'ro' and 'ru' locales stable
Matt Harbison <matt_harbison@yahoo.com> [Thu, 25 May 2017 23:42:37 -0400] rev 32456
wix: add 'ro' and 'ru' locales Also noticed when diffing an MSI installation against an Inno installation. OTOH, the Inno install doesn't include 'i18n' with the *.po files.
Thu, 25 May 2017 23:03:56 -0400 wix: include zstd.pyd in the installation stable
Matt Harbison <matt_harbison@yahoo.com> [Thu, 25 May 2017 23:03:56 -0400] rev 32455
wix: include zstd.pyd in the installation When trying to create a zstd bundle, the MSI based install said: abort: compression engine zstd could not be loaded The Inno installer is unaffected. The name will need to be updated to include 'cext' when merging into default.
Wed, 24 May 2017 22:59:59 -0400 clonebundles: fix missing newline character stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 24 May 2017 22:59:59 -0400] rev 32454
clonebundles: fix missing newline character Previously, the line displayed as '( )' instead of '(\n)'.
Wed, 24 May 2017 15:25:24 -0700 exchange: print full reason variable stable
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 24 May 2017 15:25:24 -0700] rev 32453
exchange: print full reason variable This commit essentially reverts 69ac9aebbc55. urllib2.URLError receives a "reason" argument. It isn't always a tuple. Mozilla has experienced at least IndexError failures due to the reason[1] access. https://bugzilla.mozilla.org/show_bug.cgi?id=1364687
Thu, 25 May 2017 01:45:52 +0200 transaction: run _writejournal unfiltered
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 25 May 2017 01:45:52 +0200] rev 32452
transaction: run _writejournal unfiltered The function use the length of the repository, something affected by filtering. It seems better to use the unfiltered length here. Credit for finding this goes to Durham Goode.
Mon, 22 May 2017 19:18:12 -0400 bookmarks: warn about bookmark names that unambiguously resolve to a node (BC)
Augie Fackler <augie@google.com> [Mon, 22 May 2017 19:18:12 -0400] rev 32451
bookmarks: warn about bookmark names that unambiguously resolve to a node (BC) I just burned myself on this today because I left out the -r in my `hg bookmark` command, which then left me confused because I didn't notice the bookmark I created in the wrong place that was silently shadowing the revision I was trying to check out. Let's warn the user. This patch only enforces the check on bookmark names 4 characters long or longer. We can tweak that if we'd like, I selected that since that's the fewest characters shortest will use in the templater output. A previous version of this patch rejected such bookmarks. It was proposed during review (and I agree) that the behavior change for a bookmark named "cafe" or similar as history accumulated was a little too weird, but that the warning definitely has merit.
Thu, 04 May 2017 11:51:07 +0900 pycompat: try __bytes__() to convert object to bytestr
Yuya Nishihara <yuya@tcha.org> [Thu, 04 May 2017 11:51:07 +0900] rev 32450
pycompat: try __bytes__() to convert object to bytestr It should be better than using __str__() unconditionally.
Tue, 23 May 2017 15:44:50 +0200 ui: fix ui.configdate for invalid dates
Boris Feld <boris.feld@octobus.net> [Tue, 23 May 2017 15:44:50 +0200] rev 32449
ui: fix ui.configdate for invalid dates a7dce526c462 introduced util._parsedate with the aim to be used in ui.configdate but ui.configdate was using util.parsedate instead. It have the impact of raising an AbortError in case of an invalid date instead of a ConfigError exception. Fix ui.configdate to use the right function and add a test for invalid dates. Thanks to Yuya for the catch!
Fri, 28 Apr 2017 00:01:22 +0900 demandimport: stop overriding __getattribute__()
Yuya Nishihara <yuya@tcha.org> [Fri, 28 Apr 2017 00:01:22 +0900] rev 32448
demandimport: stop overriding __getattribute__() Proxy __dict__ and __doc__ explicitly instead. I'm not sure which is less evil, but this seems slightly simpler than hooking all attribute accesses.
Fri, 28 Apr 2017 23:46:16 +0900 demandimport: look for 'mod' suffix as alternative name for module reference
Yuya Nishihara <yuya@tcha.org> [Fri, 28 Apr 2017 23:46:16 +0900] rev 32447
demandimport: look for 'mod' suffix as alternative name for module reference It's widely used in our codebase.
Mon, 01 May 2017 14:26:56 +0900 demandimport: insert empty line per method
Yuya Nishihara <yuya@tcha.org> [Mon, 01 May 2017 14:26:56 +0900] rev 32446
demandimport: insert empty line per method _demandmod class is getting bigger, and I don't want to put more things in a dense form.
Mon, 01 May 2017 13:43:31 +0900 demandimport: strictly compare identity of proxy object
Yuya Nishihara <yuya@tcha.org> [Mon, 01 May 2017 13:43:31 +0900] rev 32445
demandimport: strictly compare identity of proxy object This looks better, and __eq__() may be overridden in an undesired way.
Tue, 23 May 2017 08:49:01 -0700 match: use ProgrammingError where appropriate
Martin von Zweigbergk <martinvonz@google.com> [Tue, 23 May 2017 08:49:01 -0700] rev 32444
match: use ProgrammingError where appropriate
Tue, 23 May 2017 01:30:36 +0530 revlog: raise error.WdirUnsupported from revlog.node() if wdirrev is passed
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 23 May 2017 01:30:36 +0530] rev 32443
revlog: raise error.WdirUnsupported from revlog.node() if wdirrev is passed When we try to run, 'hg debugrevspec 'branch(wdir())'', it throws an index error and blows up. Lets raise the WdirUnsupported if wdir() is passed so that we can catch that later.
Tue, 23 May 2017 01:22:33 +0530 revset: add support for ancestors(wdir())
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 23 May 2017 01:22:33 +0530] rev 32442
revset: add support for ancestors(wdir()) This is a part of extending support for wdir() predicate.
Tue, 23 May 2017 01:08:19 +0530 revset: add support for using ~ operator on wdir() predicate
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 23 May 2017 01:08:19 +0530] rev 32441
revset: add support for using ~ operator on wdir() predicate We catch the WdirUnsupported exception and handles the wdir() case here.
Mon, 22 May 2017 02:14:22 +0530 revset: add support for p2(wdir()) to get second parent of working directory
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 22 May 2017 02:14:22 +0530] rev 32440
revset: add support for p2(wdir()) to get second parent of working directory This adds support for finding the second parent of working directory using the p2 predicate.
Mon, 22 May 2017 02:03:43 +0530 revset: use try-except instead of if-else because of perf
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 22 May 2017 02:03:43 +0530] rev 32439
revset: use try-except instead of if-else because of perf For wdir(), we now raises an exception which will be raised when wdir() will be passed, so catching that exception is better checking for wdir() using if-else.
Mon, 22 May 2017 01:38:00 +0530 revset: remove redundant condition and change to else from elif
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 22 May 2017 01:38:00 +0530] rev 32438
revset: remove redundant condition and change to else from elif Before going to this piece of code, we already check whether n is in [0, 1, 2], so dropping the redundant condition.
Mon, 22 May 2017 01:35:53 +0530 tests: add tests for predicates and operators which works with wdir()
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 22 May 2017 01:35:53 +0530] rev 32437
tests: add tests for predicates and operators which works with wdir() This one is cluttering up the test file though.
Mon, 22 May 2017 01:01:45 +0530 revset: add support for "wdir()^n"
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 22 May 2017 01:01:45 +0530] rev 32436
revset: add support for "wdir()^n" This patch catches the WdirUnsupported exception raised, and adds support for wdir^n which will give us the nth parent of the working directory.
Mon, 22 May 2017 00:54:02 +0530 revset: add parentheses after wdir since its a function
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 22 May 2017 00:54:02 +0530] rev 32435
revset: add parentheses after wdir since its a function wdir was shown in help rather than wdir().
Mon, 22 May 2017 15:05:18 -0400 cmdutil: avoid redefining write() function in export if possible
Augie Fackler <augie@google.com> [Mon, 22 May 2017 15:05:18 -0400] rev 32434
cmdutil: avoid redefining write() function in export if possible Doing less work inside the loop just feels better to me.
Mon, 22 May 2017 13:34:03 -0400 cmdutil: extract closure that performs the actual export formatting
Augie Fackler <augie@google.com> [Mon, 22 May 2017 13:34:03 -0400] rev 32433
cmdutil: extract closure that performs the actual export formatting This simplifies things a little by making the actual act of turning a revision into patch data a single function. After this, adding formatter support to `hg export` should be much simpler.
Mon, 22 May 2017 13:35:22 -0400 cmdutil: use a generator expression instead of a list comprehension
Augie Fackler <augie@google.com> [Mon, 22 May 2017 13:35:22 -0400] rev 32432
cmdutil: use a generator expression instead of a list comprehension
Sat, 20 May 2017 20:15:05 -0400 cmdutil: rename template param to export to fntemplate
Augie Fackler <augie@google.com> [Sat, 20 May 2017 20:15:05 -0400] rev 32431
cmdutil: rename template param to export to fntemplate It's actually a template for the filename, not a formatter template.
Sat, 20 May 2017 17:58:04 -0400 cmdutil: comprehensively document the interface of export
Augie Fackler <augie@google.com> [Sat, 20 May 2017 17:58:04 -0400] rev 32430
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.
Mon, 22 May 2017 15:56:47 -0700 tests: hide warning from test-xdg.t
Durham Goode <durham@fb.com> [Mon, 22 May 2017 15:56:47 -0700] rev 32429
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.
Mon, 22 May 2017 22:59:40 -0700 policy: define C module versions individually
Jun Wu <quark@fb.com> [Mon, 22 May 2017 22:59:40 -0700] rev 32428
policy: define C module versions individually This allows us to bump the version for a single module without changing all of them.
Sat, 20 May 2017 19:43:58 +0200 repoview: rename '_getdynamicblockers' to 'revealedrevs' (API)
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 20 May 2017 19:43:58 +0200] rev 32427
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".
Sat, 20 May 2017 19:43:29 +0200 repoview: move '_getdynamicblock' next to 'hideablerevs'
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 20 May 2017 19:43:29 +0200] rev 32426
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.
Sun, 21 May 2017 13:26:17 -0700 python3: allow hgloader to work with lazy loaders
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.
Sun, 21 May 2017 12:51:01 -0700 init: turn on demandimport for Python 3.6 and above
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.
Sun, 21 May 2017 12:23:04 -0700 demandimport: add python 3 implementation
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
Sun, 21 May 2017 12:10:53 -0700 demandimport: move ignore list to __init__.py
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.
Sun, 21 May 2017 13:44:26 -0700 check: check modules in hgdemandimport
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.
Sun, 21 May 2017 12:10:53 -0700 demandimport: move to separate package
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.
Sun, 21 May 2017 12:09:01 -0700 import-checker: add a way to directly import certain symbols
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.
Sun, 21 May 2017 13:34:42 -0700 check-code: allow skipping hasattr check in py3-only code
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.
Mon, 22 May 2017 01:17:49 -0700 profiling: allow loading profiling extension before everything else
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.
(0) -30000 -10000 -3000 -1000 -300 -100 -60 +60 +100 +300 +1000 +3000 +10000 tip