Sun, 29 Apr 2018 14:29:09 -0700 revlog: use radix tree also for matching keys shorter than 4 hex digits
Martin von Zweigbergk <martinvonz@google.com> [Sun, 29 Apr 2018 14:29:09 -0700] rev 37858
revlog: use radix tree also for matching keys shorter than 4 hex digits I don't know what the reason for the 4-digit limit was, and I can't think of any real disadvantages of using the radix tree also when the requested minimum length is short. This speeds up `hg log -T '{shortest(node,1)}\n'` from 2m16s to 4.5s by making that not fall back to pure code. Differential Revision: https://phab.mercurial-scm.org/D3453
Fri, 06 Apr 2018 12:55:32 -0700 context: convert to hex for error message only for 20-byte changeid
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 12:55:32 -0700] rev 37857
context: convert to hex for error message only for 20-byte changeid Now that 20-byte strings unambiguously mean binary (or a bug), we can specialize the conversion to hex for that case. Differential Revision: https://phab.mercurial-scm.org/D3452
Fri, 06 Apr 2018 12:59:17 -0700 context: clarify that only one attempt is made to interpret changeid
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 12:59:17 -0700] rev 37856
context: clarify that only one attempt is made to interpret changeid We can now tell what type of revision specifier we have just by looking at it (we no longer attempt to interpret it in one way after the other -- that's now in scmutil.revsymbol()). Let's clarify this in the code by swithing to if/elif. Differential Revision: https://phab.mercurial-scm.org/D3451
Fri, 06 Apr 2018 12:45:08 -0700 context: only bother looking for broken dirstate for 20-byte changeid
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 12:45:08 -0700] rev 37855
context: only bother looking for broken dirstate for 20-byte changeid If we fail to look up a changeid in changectx.__init__, we check if it exactly matches any of the dirstate parents, and if it does, we print a more specific message ("working directory has unknown parent '...'!" instead of "unknown revision '...'"). The dirstate parents are always 20 bytes, so there's no need to check for a match when the given changeid is not 20 bytes. (And now that all the other allowed forms of changeid have been moved out of the constructor, there's no risk that a changeid that did match a dirstate parent was actually a valid bookmark.) Differential Revision: https://phab.mercurial-scm.org/D3450
Fri, 11 May 2018 20:10:22 +0900 revset: pass in lookup function to matchany() (issue5879) stable
Yuya Nishihara <yuya@tcha.org> [Fri, 11 May 2018 20:10:22 +0900] rev 37854
revset: pass in lookup function to matchany() (issue5879) Silly mistake in f83cb91b052e.
Fri, 11 May 2018 20:08:30 +0900 test-hgweb: add test for foo-bar name lookup stable
Yuya Nishihara <yuya@tcha.org> [Fri, 11 May 2018 20:08:30 +0900] rev 37853
test-hgweb: add test for foo-bar name lookup This is broken since f83cb91b052e "revset: pass in lookup function instead of repo (API)."
Sat, 28 Apr 2018 23:16:41 -0700 context: drop support for looking up context by ambiguous changeid (API)
Martin von Zweigbergk <martinvonz@google.com> [Sat, 28 Apr 2018 23:16:41 -0700] rev 37852
context: drop support for looking up context by ambiguous changeid (API) This removes support for using the changectx constructor (and thereby repo[x]) for looking up contexts by a stringified int, a namespace key (e.g. a bookmark), or a partial hex nodeid. This means that e.g. repo[<hex nodeid>] will now fail even if a bookmark with the same name exists (which is a good thing IMO). It also means that doing repo[<non-existent node>] no longer ends up loading namespaces (which was a surprising side-effect of creating of failing to create a context object that I recently ran into while debugging something unrelated to this series). Differential Revision: https://phab.mercurial-scm.org/D3449
Sat, 28 Apr 2018 23:54:07 -0700 tests: pass parent revision as integer to repo[x] in test-context-metadata.t
Martin von Zweigbergk <martinvonz@google.com> [Sat, 28 Apr 2018 23:54:07 -0700] rev 37851
tests: pass parent revision as integer to repo[x] in test-context-metadata.t Support for looking up by stringified int is going away. It's already deprecated, but I think I didn't notice this case because the test case pipes through `grep`. Differential Revision: https://phab.mercurial-scm.org/D3448
Sat, 05 May 2018 11:42:42 +0900 bookmarks: cache reverse mapping (issue5868)
Yuya Nishihara <yuya@tcha.org> [Sat, 05 May 2018 11:42:42 +0900] rev 37850
bookmarks: cache reverse mapping (issue5868) I chose a simpler implementation. If the initial cost of building reverse mapping is significant, we'll have to move it under @propertycache. The nodemap could be a dict of sets, but I think keeping a sorted list is better since each node is likely to have zero/one bookmark. Micro-benchmark with 1001 bookmarks and 1001 revisions: $ for n in `seq 0 1000`; do touch $n; hg book book$n; hg ci -qAm$n; done $ hg bookmarks --time > /dev/null (orig) time: real 0.040 secs (user 0.050+0.000 sys 0.000+0.000) (new) time: real 0.040 secs (user 0.040+0.000 sys 0.010+0.000) $ hg log -T '{bookmarks}\n' --time > /dev/null (orig) time: real 0.160 secs (user 0.160+0.000 sys 0.000+0.000) (new) time: real 0.090 secs (user 0.100+0.000 sys 0.000+0.000)
Sat, 05 May 2018 11:44:43 +0900 bookmarks: make argument names of _set/_del() more specific
Yuya Nishihara <yuya@tcha.org> [Sat, 05 May 2018 11:44:43 +0900] rev 37849
bookmarks: make argument names of _set/_del() more specific
Sat, 05 May 2018 11:34:03 +0900 bookmarks: extract function that looks up bookmark names by node
Yuya Nishihara <yuya@tcha.org> [Sat, 05 May 2018 11:34:03 +0900] rev 37848
bookmarks: extract function that looks up bookmark names by node
Sat, 05 May 2018 11:21:41 +0900 bookmarks: hide dict behind bmstore class
Yuya Nishihara <yuya@tcha.org> [Sat, 05 May 2018 11:21:41 +0900] rev 37847
bookmarks: hide dict behind bmstore class This should make it clearer that the bmstore doesn't expose all dict APIs.
Sat, 05 May 2018 19:00:03 -0700 tests: remove pid file by default
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 05 May 2018 19:00:03 -0700] rev 37846
tests: remove pid file by default Previously, killdaemons.py would kill PIDs listed in a file then leave the file lingering around. If the PIDs are killed, then there's no point leaving the PID file around. In the worst case, a later invocation of killdaemons.py (run-tests.py invokes killdaemons.py after running a test) could kill a separate process whose PID conflicted with a previously-killed process. By removing the PID file, we eliminate this possibility. Some tests were manually removing the PID file after calling killdaemons.py. So we update these tests to not do this. Differential Revision: https://phab.mercurial-scm.org/D3443
Mon, 30 Apr 2018 19:54:55 -0700 tests: remove #require killdaemons
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 30 Apr 2018 19:54:55 -0700] rev 37845
tests: remove #require killdaemons The killdaemons hghave feature has returned True since it was introduced in 448d0c452140. As such, "#require killdaemons" has no effect and is superfluous. So we remove instances of it. Differential Revision: https://phab.mercurial-scm.org/D3442
Sat, 05 May 2018 18:35:16 -0700 pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 05 May 2018 18:35:16 -0700] rev 37844
pycompat: export queue module instead of symbols in module (API) Previously, pycompat and util re-exported individual symbols from the queue module. This had the side-effect of forcing the loading of the queue module whenever pycompat/util was imported. These symbols aren't used very often. So importing the module to get a handle on the symbols is wasteful. This commit changes pycompat so it no longer exports the individual symbols in the queue module. Instead, we make the imported module a "public" symbol. We drop the individual symbol aliases from the util module. All consumers are updated to use pycompat.queue.* instead. This change makes 300 invocations of `hg log -r. -T '{rev}\n'` a little faster: before: 18.44s after: 17.87s Differential Revision: https://phab.mercurial-scm.org/D3441
Sat, 05 May 2018 18:41:51 -0700 demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 05 May 2018 18:41:51 -0700] rev 37843
demandimport: make module ignores a set (API) The list of modules to ignore is used for membership testing. Yet it is defined as a list. Sets are more efficient for membership testing. So this commit converts the module list to a set. Since we took an API hit, I renamed the variable to further clarify the change. This appears to reduce the CPU time for running 300 invocations of `hg log -r. -T '{rev}'` on my i7-6700K: before: 18.64s after: 18.44s Differential Revision: https://phab.mercurial-scm.org/D3440
(0) -30000 -10000 -3000 -1000 -300 -100 -16 +16 +100 +300 +1000 +3000 +10000 tip