Sat, 12 Dec 2015 09:57:05 -0800 treemanifest: don't iterate entire matching submanifests on match()
Martin von Zweigbergk <martinvonz@google.com> [Sat, 12 Dec 2015 09:57:05 -0800] rev 27343
treemanifest: don't iterate entire matching submanifests on match() Before 2773540c3650 (match: remove unnecessary optimization where visitdir() returns 'all', 2015-05-06), match.visitdir() used to return the special value 'all' to indicate that it was known that all subdirectories would also be included in the match. The purpose for that value was to avoid calling the matcher on all the paths. It turned out that calling the matcher was not a problem, so the special return value was removed and the code was simplified. However, if we use the same special value for not just avoiding calling the matcher on each file, but to avoid iterating over each file, it's a much bigger win. On commands like hg st --rev .^ --rev . dom/ we run the matcher (dom/) on the two manifests, then diff the narrowed manifest. If the size of the match is much larger than the size of the diff, this is wasteful. In the above case, we would end up iterating over the 15k-or-so files in dom/ for each of the manifests, only to later discover that they are mostly the same. This means that runningt the command above is usually slower than getting the status for the entire repo, because that code avoids calling treemanifest.match() and only calls treemanifest.diff(), which loads only what's needed for the diff. Let's fix this by reintroducing the 'all' value in match.visitdir() and making treemanifest.match() return a lazy copy of the manifest from dom/ and down (in the above case). This speeds up the above command on the Firefox repo from 0.357s to 0.137s (best of 5). The wider the match, the bigger the speedup.
Sat, 12 Dec 2015 20:59:37 -0800 pathencode: remove an unused assignment
Bryan O'Sullivan <bos@serpentine.com> [Sat, 12 Dec 2015 20:59:37 -0800] rev 27342
pathencode: remove an unused assignment
Sat, 12 Dec 2015 20:57:01 -0800 parsers: narrow scope of a variable to be less confusing
Bryan O'Sullivan <bos@serpentine.com> [Sat, 12 Dec 2015 20:57:01 -0800] rev 27341
parsers: narrow scope of a variable to be less confusing
Sat, 12 Dec 2015 20:10:33 -0800 manifest: fix formatting
Bryan O'Sullivan <bos@serpentine.com> [Sat, 12 Dec 2015 20:10:33 -0800] rev 27340
manifest: fix formatting One poor unfortunate line was hanging way off the right hand side of the universe. Rescued it.
Sat, 12 Dec 2015 13:39:29 -0500 parsers: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 Dec 2015 13:39:29 -0500] rev 27339
parsers: use absolute_import
Sat, 12 Dec 2015 13:46:32 -0500 osutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 Dec 2015 13:46:32 -0500] rev 27338
osutil: use absolute_import
Sat, 12 Dec 2015 13:37:56 -0500 mpatch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 Dec 2015 13:37:56 -0500] rev 27337
mpatch: use absolute_import While I was here, I removed the try..except around importing cStringIO because cStringIO should always be importable on modern Python versions. We already do an unconditional import in other files.
Sat, 12 Dec 2015 13:35:41 -0500 diffhelpers: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 Dec 2015 13:35:41 -0500] rev 27336
diffhelpers: use absolute_import
Sat, 12 Dec 2015 13:34:55 -0500 bdiff: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 Dec 2015 13:34:55 -0500] rev 27335
bdiff: use absolute_import
Sat, 12 Dec 2015 13:33:47 -0500 base85: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 Dec 2015 13:33:47 -0500] rev 27334
base85: use absolute_import
(0) -10000 -3000 -1000 -300 -100 -10 +10 +100 +300 +1000 +3000 +10000 tip