Gregory Szorc <gregory.szorc@gmail.com> [Sat, 22 Aug 2015 22:59:51 -0700] rev 26072
hgweb: make refresh interval configurable
hgwebdir refreshes the set of known repositories periodically. This
is necessary because refreshing on every request could add significant
request latency.
More than once I've found myself wanting to tweak this interval at
Mozilla. I've also wanted the ability to always refresh (often when
writing tests for our replication setup).
This patch makes the refresh interval configurable. Negative values
indicate to always refresh. The default is left unchanged.
Erik Huelsmann <ehuels@gmail.com> [Sun, 16 Aug 2015 10:19:00 +0200] rev 26071
filemerge: add 'union' merge to internal merge tool
'union merge' is a merge strategy which adds both left and right hand side
of a conflict region. Git implements this merge strategy which is very
practical to have for merging e.g. the Changelog file.
Erik Huelsmann <ehuels@gmail.com> [Sun, 16 Aug 2015 00:24:29 +0200] rev 26070
filemerge: split internal merge into api entry point and internal helper
This is a step toward adding 'union merge' to the internal merge tool.
'union merge' is a merge strategy which adds both left and right hand side
of a conflict region. Git implements this merge strategy which is very
practical to have for merging to e.g. the Changelog file.
Erik Huelsmann <ehuels@gmail.com> [Sun, 16 Aug 2015 00:00:34 +0200] rev 26069
simplemerge: add 'mode' kwarg which - when 'union' - suppresses markers
This is a step toward adding 'union merge' to the internal merge tool.
'union merge' is a merge strategy which adds both left and right hand side
of a conflict region. Git implements this merge strategy which is very
practical to have for merging to e.g. the Changelog file.
Note: the identifiers with underscores in this commit are all using existing
variable names and/or keyword arguments.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 22 Aug 2015 10:37:38 -0700] rev 26068
hghave: remove quiet option
The --quiet flag appears to be unused. Kill it.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 22 Aug 2015 10:28:34 -0700] rev 26067
hghave: move feature checking into hghave.py
Upcoming patches will kill hghave (the script - not hghave.py) and
will move to a model where requirements checking is performed as
a function call.
Start diminishing the utility of hghave by moving some code to
hghave.py.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 22 Aug 2015 10:22:12 -0700] rev 26066
tests: move '#require bzr' into .t files
The bzr tests are the only .t tests calling hghave (aside from the tests
testing hghave itself). This pattern is a one-off and prevents
desired refactors to how requirements checking is integrated into tests.
Use the convention used everywhere else.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 08 Aug 2015 00:12:41 -0700] rev 26065
commands.push: use "pushloc" path attribute
Path instances now have a "pushloc" attribute that exposes the path
to be used for pushing. The "default-push" path is automatically
captured in the "pushloc" attribute of the "default" path.
Drop references to "default-push" and use the "pushloc" attribute
for looking up where to push to.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 07 Aug 2015 21:53:34 -0700] rev 26064
ui: capture push location on path instances
Currently, we treat "default" and "default-push" as separate paths,
even though they are the same logical entity but with different paths
for different operations. Because they are the same entity and
because we will eventually be implementing an official mechanism
for declaring push URLs for paths, we establish a "pushloc" attribute
on path instances. We populate this attribute on the "default" path
with the "default-push" value, if present. This will enable
consumers stop referencing "default-push" which will make their code
simpler.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 25 May 2015 13:10:38 -0700] rev 26063
worker: use multiprocessing to find cpu count
The multiprocessing package was added in Python 2.6.
The implementation of worker.countcpus() is very similar to
multiprocessing.cpu_count(). Ditch our one-off code.
multiprocessing does result in a number of imports. However,
the lazy importer ensures that we don't import anything until
cpu_count() is called. Furthermore, if we are doing something
with multiple cores, chances are the time of that operation
will dwarf the import time, so module bloat isn't a concern
here.
Augie Fackler <augie@google.com> [Mon, 24 Aug 2015 10:09:00 -0400] rev 26062
import-checker: ensure multiprocessing is treated as from stdlib
On my linux machines multiprocessing appears to defeat the logic in
import-checker to detect stdlib modules. Since we now only use
versions of Python which ship with multiprocessing, let's just
whitelist the module.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 20 Aug 2015 17:23:21 -0700] rev 26061
reachableroots: use baseset lazy sorting
smartset sorting is lazy (so faster in some case) and better (informs that the
set is sorted allowing some optimisation). So we rely on it directly.
Some test output are updated because we now have more information (ordering).
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 20 Aug 2015 17:19:56 -0700] rev 26060
baseset: keep the input set around
Baseset needs a list to operate, but will convert that list back to a set for
membership testing. It seems a bit silly to convert the set into a list to
convert it back afterward.
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Aug 2015 09:30:37 +0900] rev 26059
reachableroots: unroll loop that checks if one of parents is reachable
The difference is small, but fewer loops should be better in general:
revset #0: 0::tip
0) 0.001609
1) 0.001510 93%
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Aug 2015 19:38:03 +0900] rev 26058
reachableroots: handle error of PyList_Append()
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 07 Aug 2015 22:39:47 -0700] rev 26057
commands.push: use paths API
ui.path instances now collect most of the data used by commands.push().
Move away from ui.expandpath() and call ui.paths.getpath() to get a
path instance.
Some "pushing to" output was dropped as one test demonstrates. I believe
the dropped message was redundant with the error message and the change
to be acceptable.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 08 Aug 2015 00:16:02 -0700] rev 26056
ui: move URL and path detection into path API
ui.expandpath() has code for recognizing URLs or local filesystem
paths. Our goal is to use ``path`` class instances everywhere a path
is represented.
Changing ui.expandpath() to return path instances is a lot of work.
Our goal is to slowly marginalize it by moving logic into the paths
API and to convert callers to the paths API.
Many callers of ui.expandpath() pass in a value that could be a
local filesystem path or URI. We move the detection of these strings
from ui.expandpath() to paths.getpath() and path.__init__(). To do
this properly in a way that is compatible with future callers, we
need to parse the "#branch" syntax out of locations. This is a bit
complicated, but it is necessary.
The code for URL parsing is essentially a copy of hg.parseurl().
Once all consumers are speaking the paths API, it is likely that
this function won't be called any more and it can be deleted.
Yuya Nishihara <yuya@tcha.org> [Fri, 14 Aug 2015 15:52:19 +0900] rev 26055
reachableroots: return list of revisions instead of set
Now we don't need a set of reachable revisions, and the caller wants a sorted
list of revisions, so constructing a set is just a waste of time.
revset #0: 0::tip
2) 0.002536
3) 0.001598 63%
PyList_New() should set an appropriate exception on error, so we don't need
to call PyErr_NoMemory() manually.
This patch lacks error handling of PyList_Append() as it was before for
PySet_Add(). It should be fixed later.
Yuya Nishihara <yuya@tcha.org> [Fri, 14 Aug 2015 15:49:11 +0900] rev 26054
reachableroots: use internal "revstates" array to test if rev is reachable
This is faster than using PySet_Contains().
revset #0: 0::tip
1) 0.003678
2) 0.002536 68%
Yuya Nishihara <yuya@tcha.org> [Fri, 14 Aug 2015 15:43:29 +0900] rev 26053
reachableroots: use internal "revstates" array to test if rev is a root
The main goal of this patch series is to reduce the use of PyXxx() function
that is likely to require ugly error handling and inc/decref. Plus, this is
faster than using PySet_Contains().
revset #0: 0::tip
0) 0.004168
1) 0.003678 88%
This patch ignores out-of-range roots as they are in the pure implementation.
Because reachable sets are calculated from heads, and out-of-range heads raise
IndexError, we can just take out-of-range roots as unreachable. Otherwise,
the test of "hg log -Gr '. + wdir()'" would fail.
"heads" argument is changed to a list. Should we have to rename the C function
as its signature is changed?
Augie Fackler <augie@google.com> [Tue, 18 Aug 2015 16:40:10 -0400] rev 26052
parsers: set exception when there's too little string data to extract parents
Previously we were returning NULL from this function without actually
setting up an exception. This fixes that problem, which was detected
with cpychecker.
Augie Fackler <augie@google.com> [Tue, 18 Aug 2015 16:39:26 -0400] rev 26051
parsers: drop spurious check of readlen value
We're about to check if len < 40 after assigning readlen to len, which
means that if len < 40 we'll still abort, but I'm about to add a
sensible exception to that failure, so let's just discard this useless
check.
Augie Fackler <augie@google.com> [Tue, 18 Aug 2015 16:32:41 -0400] rev 26050
pathencode: check result of .digest() method in sha1hash
Without this it was theoretically possible .digest() would fail and
return NULL but we wouldn't notice. Detected with cpychecker.
Augie Fackler <augie@google.com> [Tue, 18 Aug 2015 16:43:26 -0400] rev 26049
parsers: correctly decref normed value after PyDict_SetItem
Previously we were leaving this PyObject* with a refcount that was one
too high. Detected with cpychecker.
Augie Fackler <augie@google.com> [Tue, 18 Aug 2015 17:15:04 -0400] rev 26048
parsers: fix two leaks in index_ancestors
Both happy paths through this function leaked the returned list:
1) If the list was of size 0 or 1, it was retained an extra time and then
returned.
2) If the list was passed to find_deepest, it was never released before
exiting this function.
Both paths spotted by cpychecker.
Matt Mackall <mpm@selenic.com> [Tue, 18 Aug 2015 18:38:56 -0500] rev 26047
merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 18 Aug 2015 18:37:50 -0500] rev 26046
merge with i18n
Wagner Bruna <wbruna@softwareexpress.com.br> [Thu, 13 Aug 2015 16:50:05 -0300] rev 26045
i18n-pt_BR: synchronized with
d14590f90cb6
Yuya Nishihara <yuya@tcha.org> [Fri, 14 Aug 2015 15:30:52 +0900] rev 26044
reachableroots: extend "revstates" to array of bit flags
Yuya Nishihara <yuya@tcha.org> [Fri, 14 Aug 2015 15:23:42 +0900] rev 26043
reachableroots: rename "seen" array to "revstates" for future extension
It will be an array of bit flags, SEEN | ROOT | REACHABLE.