Wed, 25 Mar 2015 22:20:44 -0400 revert: evaluate subrepos to revert against the working directory
Matt Harbison <matt_harbison@yahoo.com> [Wed, 25 Mar 2015 22:20:44 -0400] rev 24464
revert: evaluate subrepos to revert against the working directory Reverting to a revision where the subrepo didn't exist will now abort, and matching subrepos against the working directory is consistent with how filesets are evaluated since 5b85a5bc5bbb.
Wed, 25 Mar 2015 21:54:47 -0400 revert: handle subrepos missing in the given --rev
Matt Harbison <matt_harbison@yahoo.com> [Wed, 25 Mar 2015 21:54:47 -0400] rev 24463
revert: handle subrepos missing in the given --rev The list of subrepos to revert is currently based on the given --rev, so there is currently no way for this to fail. Using the --rev context is wrong though, because if the subrepo doesn't exist in --rev, it is skipped, so it won't be changed. This change makes it so that the revert aborts, which is what happens if a plain file is reverted to -1. Finding matches based on --rev is also inconsistent with evaluating files against the working directory (5b85a5bc5bbb). This change is made now, so as to not cause breakage when the context is switched in an upcoming patch.
Wed, 25 Mar 2015 16:21:58 -0700 osutil: mark end of string with null char, not 0
Siddharth Agarwal <sid0@fb.com> [Wed, 25 Mar 2015 16:21:58 -0700] rev 24462
osutil: mark end of string with null char, not 0 Noticed this while working on other stuff in the area.
Wed, 25 Mar 2015 15:55:31 -0700 osutil: use getdirentriesattr on OS X if possible
Siddharth Agarwal <sid0@fb.com> [Wed, 25 Mar 2015 15:55:31 -0700] rev 24461
osutil: use getdirentriesattr on OS X if possible This is a significant win for large repositories on OS X, especially with a cold cache. Unfortunately we need to keep the lstat-based implementation around for two reasons: - Not all filesystems support this call. - There's an edge case in which it's best to fall back to avoid a retry loop. More about this in the comments. The below tests are all performed on a Mac with an SSD running OS X 10.9, on a repository with over 200k files. The results are best of 5 with simulated best-effort conditions. The gains with a hot cache are pretty impressive: 'hg status' goes from 5.18 seconds to 3.79 seconds. However, a repository that large will probably already be using something like hgwatchman [1], which helps much more (for this repo, 'hg status' with hgwatchman is approximately 1 second). Where this really helps is when the cache is cold [2]: hg status goes from 31.0 seconds to 9.66. See http://lists.apple.com/archives/filesystem-dev/2014/Dec/msg00002.html for some more discussion about this function. This is based on a patch by Sean Farley <sean@farley.io>. [1] https://bitbucket.org/facebook/hgwatchman [2] There appears to be no easy way to clear the file cache (aka "vnodes") on OS X short of rebooting. purge(8) purportedly does that but in my testing had little effect. The workaround I came up with was to assume that vnode eviction was LRU, make sure the kern.maxvnodes sysctl is smaller than the size of the repository, then make sure we'd always miss the cache by running 'hg status' in another clone of the repository before running it in the test repository.
Wed, 25 Mar 2015 16:43:29 -0700 osutil._listdir: rename to _listdir_stat
Siddharth Agarwal <sid0@fb.com> [Wed, 25 Mar 2015 16:43:29 -0700] rev 24460
osutil._listdir: rename to _listdir_stat In upcoming patches we'll add another implementation of listdir on OS X. That implementation will have to fall back to this one under some circumstances, though. We'll make _listdir be able to detect those circumstances and use the right function as appropriate.
Mon, 16 Mar 2015 17:11:25 +0900 revset: optimize "x & fullreposet" case
Yuya Nishihara <yuya@tcha.org> [Mon, 16 Mar 2015 17:11:25 +0900] rev 24459
revset: optimize "x & fullreposet" case If self is a smartset and other is a fullreposet, nothing should be necessary. A small win for trivial query in mozilla-central repo: revset #0: (0:100000) 0) wall 0.017211 comb 0.020000 user 0.020000 sys 0.000000 (best of 163) 1) wall 0.001324 comb 0.000000 user 0.000000 sys 0.000000 (best of 2160)
Mon, 16 Mar 2015 18:36:53 +0900 debugrevspec: show nesting structure of smartsets if verbose
Yuya Nishihara <yuya@tcha.org> [Mon, 16 Mar 2015 18:36:53 +0900] rev 24458
debugrevspec: show nesting structure of smartsets if verbose This shows how smartsets are constructed from the query. It will be somewhat useful to track problems such as stack overflow.
(0) -10000 -3000 -1000 -300 -100 -30 -10 -7 +7 +10 +30 +100 +300 +1000 +3000 +10000 tip