Wed, 26 Apr 2017 22:05:59 +0900 mpatch: proxy through mdiff module
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 22:05:59 +0900] rev 32247
mpatch: proxy through mdiff module See the previous commit for why.
Wed, 26 Apr 2017 22:03:37 +0900 bdiff: proxy through mdiff module
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 22:03:37 +0900] rev 32246
bdiff: proxy through mdiff module See the previous commit for why. mdiff seems a good place to host bdiff functions. bdiff.bdiff was already aliased as textdiff, so we use it.
Wed, 26 Apr 2017 21:56:47 +0900 base85: proxy through util module
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 21:56:47 +0900] rev 32245
base85: proxy through util module I'm going to replace hgimporter with a simpler import function, so we can access to pure/cext modules by name: # util.py base85 = policy.importmod('base85') # select pure.base85 or cext.base85 # cffi/base85.py from ..pure.base85 import * # may re-export pure.base85 functions This means we'll have to use policy.importmod() function in place of the standard import statement, but we wouldn't want to write it every place where C extension modules are used. So this patch makes util host base85 functions.
Tue, 02 May 2017 17:05:22 +0900 mdiff: move re-exports to top
Yuya Nishihara <yuya@tcha.org> [Tue, 02 May 2017 17:05:22 +0900] rev 32244
mdiff: move re-exports to top This style seems more common in our codebase.
Tue, 02 May 2017 19:10:55 +0900 test-commit-interactive-curses: remove unused import of parsers
Yuya Nishihara <yuya@tcha.org> [Tue, 02 May 2017 19:10:55 +0900] rev 32243
test-commit-interactive-curses: remove unused import of parsers
Mon, 08 May 2017 11:35:23 -0700 strip: make tree stripping O(changes) instead of O(repo)
Durham Goode <durham@fb.com> [Mon, 08 May 2017 11:35:23 -0700] rev 32242
strip: make tree stripping O(changes) instead of O(repo) The old tree stripping logic iterated over every tree revlog in the repo looking for commits that had revs to be stripped. That's very inefficient in large repos. Instead, let's look at what files are touched by the strip and only inspect those revlogs. I don't have actual perf numbers, since internally we don't use a true treemanifest, but simply iterating over hundreds of thousands of revlogs takes many, many seconds, so this should help tremendously when stripping only a few commits.
Mon, 08 May 2017 11:35:23 -0700 strip: move tree strip logic to it's own function
Durham Goode <durham@fb.com> [Mon, 08 May 2017 11:35:23 -0700] rev 32241
strip: move tree strip logic to it's own function This will allow external extensions to modify tree strip behavior more precisely.
Mon, 08 May 2017 09:39:21 -0700 manifest: remove unused property _oldmanifest
Martin von Zweigbergk <martinvonz@google.com> [Mon, 08 May 2017 09:39:21 -0700] rev 32240
manifest: remove unused property _oldmanifest The last use seems to have gone away in 7c7d845f8b64 (manifest: make manifestlog use it's own cache, 2016-11-10).
Fri, 05 May 2017 04:48:42 +0530 py3: convert key to str to make kwargs.pop work in mq
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 04:48:42 +0530] rev 32239
py3: convert key to str to make kwargs.pop work in mq The keys are passed here and there as unicodes and our transformer make things bytes. Due to that, mq was not poped and this results in error on Py3. Here we abuse r'' to make that str on Python 3.
Fri, 05 May 2017 04:41:45 +0530 py3: convert kwargs' keys to str before passing in cmdutil.getcommiteditor
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 04:41:45 +0530] rev 32238
py3: convert kwargs' keys to str before passing in cmdutil.getcommiteditor
Wed, 03 May 2017 23:50:41 -0700 diff: add a fast path to avoid loading binary contents
Jun Wu <quark@fb.com> [Wed, 03 May 2017 23:50:41 -0700] rev 32237
diff: add a fast path to avoid loading binary contents When diffing binary contents, with certain configs, we can show "Binary file <name> has changed" without actual content. That allows a fast path where we could avoid providing actual binary contents. Note: in that case we still need to test if two contents are the same, that's done by using "filectx.cmp", which could have its own fast path.
Fri, 05 May 2017 17:20:32 -0700 diff: correct binary testing logic
Jun Wu <quark@fb.com> [Fri, 05 May 2017 17:20:32 -0700] rev 32236
diff: correct binary testing logic This seems to be more correct given the table drawn in the previous patch. Namely, "losedatafn" and "opts.git" are removed, "not opts.text" is added. - losedatafn: diff output (binary) should not be affected by "losedatafn" - opts.git: binary testing is helpful for detecting a fast path in the next path. the fast path can also be used if opts.git is False - opts.text: if it's set, we should treat the content as non-binary
Fri, 05 May 2017 16:48:58 -0700 diff: draw a table about binary diff behaviors
Jun Wu <quark@fb.com> [Fri, 05 May 2017 16:48:58 -0700] rev 32235
diff: draw a table about binary diff behaviors The table should make it easier to reason about future changes.
Wed, 03 May 2017 22:20:44 -0700 diff: use fctx.size() to test empty
Jun Wu <quark@fb.com> [Wed, 03 May 2017 22:20:44 -0700] rev 32234
diff: use fctx.size() to test empty fctx.size() could have a fast path that does not require loading content.
Wed, 03 May 2017 22:16:54 -0700 diff: use fctx.isbinary() to test binary
Jun Wu <quark@fb.com> [Wed, 03 May 2017 22:16:54 -0700] rev 32233
diff: use fctx.isbinary() to test binary The end goal is to avoid calling fctx.data() when unnecessary. For example, if diff.nobinary=1 and files are binary, the expected behavior is to print "Binary file has changed". That could avoid reading fctx.data() sometimes. This is mainly to enable an external LFS extension to skip expensive binary file loading sometimes (read: most of the time with diff.nobinary=1 and diff.text=0), without any behavior changes to mercurial (i.e. whether a file is LFS or not does not change any behavior, LFS could be 100% transparent to users).
Thu, 20 Apr 2017 22:16:12 +0900 pycompat: extract helper to raise exception with traceback
Yuya Nishihara <yuya@tcha.org> [Thu, 20 Apr 2017 22:16:12 +0900] rev 32232
pycompat: extract helper to raise exception with traceback It uses "raise excobj, None, tb" form which I think is simpler and more useful than "raise exctype, args, tb".
Mon, 01 May 2017 17:23:48 +0900 check-code: ignore re-exports of os.environ in encoding.py
Yuya Nishihara <yuya@tcha.org> [Mon, 01 May 2017 17:23:48 +0900] rev 32231
check-code: ignore re-exports of os.environ in encoding.py These are valid uses of os.environ.
Wed, 26 Apr 2017 21:51:19 +0900 check-code: exclude demandimport.py and policy.py from Python 3 checks
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 21:51:19 +0900] rev 32230
check-code: exclude demandimport.py and policy.py from Python 3 checks These modules can't depend on pycompat.py, which means we have to write Py3 hacks in them.
Mon, 01 May 2017 17:10:22 +0900 check-code: rewrite py3 exclusion pattern with negative lookahead
Yuya Nishihara <yuya@tcha.org> [Mon, 01 May 2017 17:10:22 +0900] rev 32229
check-code: rewrite py3 exclusion pattern with negative lookahead I want to add more patterns, but negative lookbehind requires patterns of the same length so not useful.
Wed, 03 May 2017 11:16:55 +0900 cleanup: remove useless re-raises of KeyboardInterrupt
Yuya Nishihara <yuya@tcha.org> [Wed, 03 May 2017 11:16:55 +0900] rev 32228
cleanup: remove useless re-raises of KeyboardInterrupt KeyboardInterrupt is no longer a subclass of Exception since Python 2.5. https://docs.python.org/2/whatsnew/2.5.html#pep-352-exceptions-as-new-style-classes
Fri, 12 Aug 2016 11:36:42 +0900 make: drop deprecated rule to process temporary copy of pure modules
Yuya Nishihara <yuya@tcha.org> [Fri, 12 Aug 2016 11:36:42 +0900] rev 32227
make: drop deprecated rule to process temporary copy of pure modules Pure modules never be copied to mercurial/ since 511a4384b033.
Fri, 05 May 2017 08:49:46 -0700 dirstate: optimize walk() by using match.visitdir()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 08:49:46 -0700] rev 32226
dirstate: optimize walk() by using match.visitdir() We already have the logic for restricting directory walks in match.visitdir() that we use for treemanifests. We should take advantage of it when walking the working copy as well. This speeds up "hg st -I rootfilesin:." on the Firefox repo from 0.587s to 0.305s on warm disk (and much more on cold disk). More time is spent reading the dirstate than walking the working copy after. I tried to find scenarios where calling match.visitdir() would be a noticeable overhead, but I couldn't find any. I encourage the reader to try for themselves, since this is performance-critical code.
Fri, 05 May 2017 08:49:07 -0700 match: optimize visitdir() for patterns matching only root directory
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 08:49:07 -0700] rev 32225
match: optimize visitdir() for patterns matching only root directory Because _rootsanddirs() returns a list of directories to visit recursively and a list of directories to visit non-recursively. For patterns such as 'rootfilesin:foo/bar', we clearly need to visit the directory foo/bar, but we also need to visit its parents. The method therefore uses util.dirs() to find the parent directories of 'foo/bar'. That method does not include the root directory, but since we obviously need to visit the root directory, we always added '.' to the set of directories to visit non-recursively. The visitdir() method had special handling to consider set(['.']) to mean that no includes had been specified and would thus visit all directories. However, when the pattern is 'rootfilesin:.', set(['.']) is actually the real set of directories to visit and the special handling of that set meant that all directories got visited instead of just the root directory. The fix is simple: add '.' to the set of parent directories in _rootsanddirs() and stop treating set(['.']) specially. This makes hg files -r . -I rootfilesin:. in a treemanifest version of the Firefox repo go from 1.5s to 0.26s on warm disk (and a *much* bigger improvement on cold disk). Note that the -I is necessary for no good reason. We just haven't optimized visitdir() for regular (non-include, non-exclude) patterns yet.
Sat, 11 Mar 2017 12:25:56 -0800 rebase: don't update state dict same way for each root
Martin von Zweigbergk <martinvonz@google.com> [Sat, 11 Mar 2017 12:25:56 -0800] rev 32224
rebase: don't update state dict same way for each root The update statement does not depend on anything in the loop, so just move it before the loop and do it once. There are no cases where update would happen 0 times before (and 1 now); the function returns early in all such cases.
Thu, 04 May 2017 21:11:40 -0700 forget: access status fields by name, not index
Martin von Zweigbergk <martinvonz@google.com> [Thu, 04 May 2017 21:11:40 -0700] rev 32223
forget: access status fields by name, not index
Wed, 03 May 2017 18:26:57 -0700 demandimport: add urwid.command_map to ignore list
Phil Cohen <phillco@fb.com> [Wed, 03 May 2017 18:26:57 -0700] rev 32222
demandimport: add urwid.command_map to ignore list The useful pudb debugger can be used with Mercurial, but its import of urwid fails when demandimport is enabled. Add urwid.command_map to the ignore list so pudb can be used with hg without disabling all of demandimport.
Fri, 05 May 2017 10:08:36 -0700 outgoing: run on filtered repo
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 10:08:36 -0700] rev 32221
outgoing: run on filtered repo outgoing has been using an unfiltered repo since fe67107094fd (discovery: outgoing pass unfiltered repo to findcommonincoming (issue3776), 2013-01-28). If I'm reading code and history correctly, it should be safe to run _outgoing() on a filtered repo since c5456b64eb07 (discovery: run discovery on filtered repository, 2015-01-07). By running _outgoing() on a filtered repo, we can also remove the workaround there for ignoring filtered revisions.
Fri, 05 May 2017 14:10:58 -0700 manifest: remove check for non-contexts in _dirmancache
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 14:10:58 -0700] rev 32220
manifest: remove check for non-contexts in _dirmancache It looks like the _dirmancache has contained only manifest contexts since d79c141fdf41 (manifest: remove usages of manifest.read, 2016-11-10).
Thu, 04 May 2017 12:48:45 +0200 bundle: factor the 'getchangegroup' out
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:48:45 +0200] rev 32219
bundle: factor the 'getchangegroup' out The call in the two branches is identical, so we can just issue it outside of the conditional.
Thu, 04 May 2017 12:47:27 +0200 bundle: avoid reset of the 'outgoing' variable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:47:27 +0200] rev 32218
bundle: avoid reset of the 'outgoing' variable We have a cleaner way to achieve the same effect. Not resetting the variable will help us to simplify the code.
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip