Gregory Szorc <gregory.szorc@gmail.com> [Sat, 22 Aug 2015 14:22:40 -0700] rev 26133
hgweb: don't make request optional
The "request" argument has been optional in this code since
it was introduced in
38170eeed18c in 2009. There are no consumers that
don't pass this argument. So don't make it an optional argument.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 22 Aug 2015 13:58:59 -0700] rev 26132
hgweb: add some documentation
It took longer than I wanted to grok how the various parts of hgweb
worked. So I added some class and method documentation to help whoever
hacks on this next.
Anton Shestakov <av6@dwimlabs.net> [Tue, 01 Sep 2015 23:35:06 +0800] rev 26131
hgweb: limit branches shown on summary page to 10
Tags and bookmarks on summary page are already limited to 10, let's limit
branches as well.
Each of the blocks (tags, bookmarks, branches) currently has a link to the full
list.
Anton Shestakov <av6@dwimlabs.net> [Tue, 01 Sep 2015 23:29:30 +0800] rev 26130
hgweb: use webutil.branchentries for branches on summary page
This allows showing correct status for each branch, which was missing on
/summary. Usually that means that closed branches get the same css class
(resulting in e.g. different color/shade) as they do on /branches page.
The sorting of the branches on summary page also changes and is now the same as
on /branches page: closed branches are now at the end of the list.
Anton Shestakov <av6@dwimlabs.net> [Tue, 01 Sep 2015 22:28:45 +0800] rev 26129
hgweb: move branchentries code from webcommands to webutil
Yuya Nishihara <yuya@tcha.org> [Tue, 18 Aug 2015 22:15:46 +0900] rev 26128
templater: add optional timezone argument to localdate()
The keyword extension uses "utcdate" for a different function, so we can't
add new "utcdate" filter or function. Instead, this patch extends "localdate"
to a general timezone converter.
Yuya Nishihara <yuya@tcha.org> [Tue, 01 Sep 2015 19:15:16 +0900] rev 26127
templater: port localdate filter to a function
It will be extended to accept a timezone argument.
Yuya Nishihara <yuya@tcha.org> [Tue, 01 Sep 2015 19:43:14 +0900] rev 26126
util: extract function that parses timezone string
It will be used to parse a timezone argument passed to a template function.
Yuya Nishihara <yuya@tcha.org> [Tue, 01 Sep 2015 19:04:10 +0900] rev 26125
templater: drop unneeded destructuring of argument tuple at buildfilter
Because evalfuncarg() accepts an argument tuple, there is little meaning
to pass (func, data, filt) in place of ((func, data), filt).
Yuya Nishihara <yuya@tcha.org> [Tue, 01 Sep 2015 18:57:50 +0900] rev 26124
templater: extract helper that evaluates filter or function argument
It will be used to get a date tuple from an argument. Perhaps some of
"stringify(args[n][0], ...)" can be replaced by this function.
Matt Mackall <mpm@selenic.com> [Fri, 28 Aug 2015 16:59:31 -0500] rev 26123
contrib: add showstack extension
This allows getting a Python stack trace at any time on Unix by
hitting Ctrl-\ (or Ctrl-T on BSDs). Useful for debugging mysterious
hangs on the fly. Sample output:
$ hg log -k nosuchmessage
^\
File "/home/mpm/hg/mercurial/revset.py", line 3089, in _iterfilter
if cond(x):
File "/home/mpm/hg/mercurial/util.py", line 415, in f
cache[arg] = func(arg)
File "/home/mpm/hg/mercurial/revset.py", line 1215, in matches
for t in c.files() + [c.user(), c.description()])
File "/home/mpm/hg/mercurial/context.py", line 525, in files
return self._changeset[3]
File "/home/mpm/hg/mercurial/util.py", line 531, in __get__
result = self.func(obj)
File "/home/mpm/hg/mercurial/context.py", line 498, in _changeset
return self._repo.changelog.read(self.rev())
File "/home/mpm/hg/mercurial/changelog.py", line 338, in read
text = self.revision(node)
File "/home/mpm/hg/mercurial/revlog.py", line 1092, in revision
bins = self._chunks(chain)
File "/home/mpm/hg/mercurial/revlog.py", line 1013, in _chunks
ladd(decompress(buffer(data, chunkstart - offset, chunklength)))
File "/home/mpm/hg/mercurial/revlog.py", line 91, in decompress
return _decompress(bin)
----
Matt Mackall <mpm@selenic.com> [Tue, 01 Sep 2015 16:38:33 -0500] rev 26122
Added signature for changeset
1a45e49a6bed
Matt Mackall <mpm@selenic.com> [Tue, 01 Sep 2015 16:38:32 -0500] rev 26121
Added tag 3.5.1 for changeset
1a45e49a6bed
Matt Mackall <mpm@selenic.com> [Tue, 01 Sep 2015 16:08:07 -0500] rev 26120
hgweb: fix trust of templates path (BC)
Long ago we disabled trust of the templates path with a comment
describing the (insecure) behavior before the change. At some later
refactor, the code was apparently changed back to match the comment,
unaware that the intent of the comment was to describe the behavior to
avoid.
This change disables the trust and updates the comment to explicitly
say not only what the old problem was, but also that it was in fact a
problem and the action taken to prevent it.
Impact: prior to this change, if you had a UNIX-based hgweb server
where users can write hgrc files, those users could potentially read
any file readable by the web server.
This is marked as a backwards compatibility issue because people may
have configured templates without proper trust settings. Issue spotted
by Greg Szorc.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 01 Sep 2015 11:39:08 -0400] rev 26119
wix: avoid an abort with 'hg help -k foo'
Previously:
$ /c/Program\ Files/Mercurial/hg help -k merge-tools
abort: No such file or directory: c:\Program Files\Mercurial\help\scripting.txt
The Inno installer seems OK, but the TortoiseHg required the same fix. That got
queued with an additional change of 'helpFolder.guid' in guids.wxi (probably by
Steve). I'm not sure if that is necessary here too.
Durham Goode <durham@fb.com> [Sun, 30 Aug 2015 14:03:32 -0700] rev 26118
revlog: add an aggressivemergedelta option
This adds an option for delta'ing against both p1 and p2 when applying merge
revisions and picking whichever is smallest.
Some before and after stats on manifest.d size:
internal large repo:
before: 1.2 GB
after: 930 MB
mozilla-central:
before: 261 MB
after: 92 MB
Durham Goode <durham@fb.com> [Sun, 30 Aug 2015 13:58:11 -0700] rev 26117
revlog: change generaldelta delta parent heuristic
The old generaldelta heuristic was "if p1 (or p2) was closer than the last full text,
use it, otherwise use prev". This was problematic when a repo contained multiple
branches that were very different. If commits to branch A were pushed, and the
last full text was branch B, it would generate a fulltext. Then if branch B was
pushed, it would generate another fulltext. The problem is that the last
fulltext (and delta'ing against `prev` in general) has no correlation with the
contents of the incoming revision, and therefore will always have degenerate
cases.
According to the blame, that algorithm was chosen to minimize the chain length.
Since there is already code that protects against that (the delta-vs-fulltext
code), and since it has been improved since the original generaldelta algorithm
went in (2011), I believe the chain length criteria will still be preserved.
The new algorithm always diffs against p1 (or p2 if it's closer), unless the
resulting delta will fail the delta-vs-fulltext check, in which case we delta
against prev.
Some before and after stats on manifest.d size.
internal large repo
old heuristic - 2.0 GB
new heuristic - 1.2 GB
mozilla-central
old heuristic - 242 MB
new heuristic - 261 MB
The regression in mozilla central is due to the new heuristic choosing p2r as
the delta when it's closer to the tip. Switching the algorithm to always prefer
p1r brings the size back down (242 MB). This is result of the way in which
mozilla does merges and pushes, and the result could easily swing the other
direction in other repos (depending on if they merge X into Y or Y into X), but
will never be as degenerate as before.
I future patch will address the regression by introducing an optional, even more
aggressive delta heuristic which will knock the mozilla manifest size down
dramatically.
Durham Goode <durham@fb.com> [Sun, 30 Aug 2015 13:34:30 -0700] rev 26116
revlog: move textlen calculation to be above delta chooser
This moves the textlen calculation to be above the delta chooser. Since textlen
is needed for calling isgooddelta, we need it above the delta chooser so future
patches can call isgooddelta.
Durham Goode <durham@fb.com> [Sun, 30 Aug 2015 13:33:00 -0700] rev 26115
revlog: move delta check to it's own function
This moves the delta vs fulltext comparison to its own function. This will allow
us to reuse the function in future patches for more efficient delta choices. As
a side effect, this will also allow extensions to modify our delta criteria.
Anton Shestakov <av6@dwimlabs.net> [Wed, 19 Aug 2015 21:43:13 +0800] rev 26114
monoblue: add archive links on summary page
timeless@mozdev.org [Sun, 30 Aug 2015 19:03:38 -0400] rev 26113
help: distinguish sections when multiple match (
issue4802)
Matt Mackall <mpm@selenic.com> [Mon, 31 Aug 2015 17:21:38 -0500] rev 26112
merge with stable
Augie Fackler <augie@google.com> [Tue, 25 Aug 2015 00:06:41 -0400] rev 26111
hghave: add a check for docker support
This currently refuses to operate if on a non-Linux host. I suspect
that Docker running on FreeBSD 11 or on an Illumos derivative would
work fine, but I don't have ready access to such a system.
On OS X using boot2docker (I used a hacky xhyve-based one for
testing), it won't work because $TESTTEMP doesn't end up inside the
set of directories that get forwarded to the boot2docker VM, so you
can't actually drop debs in the $TESTTEMP at all. It would be possible
(probably even trivial) to hack around this by using a randomly-named
temporary directory inside the working directory, but that seems
unlikely to be useful enough to justify the ugliness.
Augie Fackler <augie@google.com> [Tue, 25 Aug 2015 00:03:15 -0400] rev 26110
hghave: add a check for debian packaging tools
Augie Fackler <augie@google.com> [Mon, 24 Aug 2015 22:23:45 -0400] rev 26109
run-tests: add support for marking tests as very slow
I want to add tests for our packaging rules, but those necessarily run
a whole build, or possibly two if both native packaging and docker are
available. This lets us flag such tests with a `#require slow` so that
they don't unnecessarily slow down normal test runs.
Augie Fackler <augie@google.com> [Tue, 25 Aug 2015 00:02:44 -0400] rev 26108
builddeb: rework how output dir and platform are specified
This makes it possible to write tests for both builddeb and dockerdeb
that actually build .debs and then sanity check the contents.
Augie Fackler <augie@google.com> [Wed, 26 Aug 2015 10:20:07 -0400] rev 26107
parsers: fix two cases of unsigned long instead of Py_ssize_t
We had to do this before because Python 2.4 didn't understand the n
format specifier in Py_BuildValue and friends. We no longer have that
problem.
Yuya Nishihara <yuya@tcha.org> [Sat, 04 Jul 2015 16:07:42 +0900] rev 26106
templatefilters: remove redundant 'date' and 'strip' filters
These filters are defined as 'date()' and 'strip()' functions. Help messages
are moved to the corresponding functions.
Yuya Nishihara <yuya@tcha.org> [Sat, 04 Jul 2015 16:03:36 +0900] rev 26105
templater: introduce unified filter syntax for unary functions
"filter(expr)" is allowed already. This patch adds the opposite, "expr|func".
Yuya Nishihara <yuya@tcha.org> [Sat, 04 Jul 2015 15:59:03 +0900] rev 26104
templater: inline getfilter() to buildfilter()
This prepares for the unified filter syntax that will be introduced by the
next patch.
liscju <piotr.listkiewicz@gmail.com> [Sun, 30 Aug 2015 11:47:43 +0200] rev 26103
clone: fix updaterev to update to latest branch changeset (
issue4528)
Before this patch if clone --updaterev points to branch which head
on src repo wasnt in dest repo, clone updated dest repo to
default branch. After applying this patch, if changeset from
src repo pointing at given branch is not in dest repo, it searches
for changeset pointing for given branch locally in dest repo.
Lookup in destination repo:
559: uprev = destrepo.lookup(update)
is wrapped by try/except block to preserve current behaviour when
given revset to -u is not found - it will not fail,but silently update
dest repo to head of default branch.
liscju <piotr.listkiewicz@gmail.com> [Thu, 20 Aug 2015 17:19:32 +0200] rev 26102
revsets: makes follow() supports file patterns (
issue4757) (BC)
Before this patch, follow only supports full, exact filenames.
This patch makes follow argument to be treated like file
pattern same way like log treats their arguments.
It preserves current behaviour of follow() matching paths
relative to the repository root by default.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 31 Aug 2015 23:14:58 +0900] rev 26101
i18n-ja: synchronized with
b930d4ef7739
timeless@mozdev.org [Fri, 28 Aug 2015 15:50:36 -0400] rev 26100
histedit: improve discoverability of edit commit message
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 27 Aug 2015 17:57:33 -0700] rev 26099
revset: cache smartset's min/max
As the content of a smartset never changes, min and max will never change
either. This will save us time when this function is called multiple times.
This is relevant for
issue4782 but does not fix it.
timeless@mozdev.org [Fri, 28 Aug 2015 10:53:55 -0400] rev 26098
spelling: behaviour -> behavior
timeless@mozdev.org [Fri, 28 Aug 2015 12:18:12 -0400] rev 26097
glossary: fixup use of periods at end of entries
* Include trailing period for entries
* Move trailing period inside quotations for example sentences
timeless@mozdev.org [Fri, 28 Aug 2015 11:31:44 -0400] rev 26096
histedit: fix grammar for help for safety aborts
Yuya Nishihara <yuya@tcha.org> [Fri, 28 Aug 2015 11:15:31 +0900] rev 26095
revset: mark reachablerootspure as private
Yuya Nishihara <yuya@tcha.org> [Fri, 28 Aug 2015 11:14:24 +0900] rev 26094
reachableroots: construct and sort baseset in revset module
This can remove the dependency from changelog to revset, which seems a bit awkward
for me.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 21 Aug 2015 16:12:24 -0700] rev 26093
reachableroots: use smartset min
smartset min are likely to be optimised, cached or other magical property.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 21 Aug 2015 16:03:25 -0700] rev 26092
graphmod: stop building a list out of branchgroupiter
Not only does this defeat the purpose of having `branchgroupiter` an iterable, but
this also makes revs something else than a smartset preventing to use revs.min()
in the call to reachablerevs.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 24 Aug 2015 15:40:42 -0700] rev 26091
reachableroots: sort the smartset in the pure version too
Changeset
be8a4e0800d8 uses smartset lazy sorting for the C version. We need to
apply the same to the pure version for consistency. This is fixing the tests
with --pure.
Augie Fackler <augie@google.com> [Mon, 24 Aug 2015 23:58:32 -0400] rev 26090
builddeb: actually run make when building the deb (
issue4778)
As of this change, we no longer produce broken debs, but I've already
got followups written that will produce much more standard-looking
packages and test the resulting packages.
Augie Fackler <augie@google.com> [Mon, 24 Aug 2015 23:47:43 -0400] rev 26089
docker-debian-jessie: fix errant mkdir
Augie Fackler <augie@google.com> [Thu, 27 Aug 2015 14:24:39 -0400] rev 26088
makefile: rename debian-jessie to deb
`make debian-jessie` was a poor name choice on my part, because it
really builds a package for the current debian platform, whatever that
happens to be, rather than a specific platform. Rename it to just
`make deb` so that it's a little clearer. As a result, it now places
built debs in a "debian-unknown" directory.
Augie Fackler <augie@google.com> [Tue, 25 Aug 2015 00:40:42 -0400] rev 26087
run-tests: ignore failed removal of nonexistent installerrs
When running tests with -j100 or so on a large machine, I see this
os.remove call failing semi-regularly. Since it's not really a problem
when the file is already gone, just suppress the error in that case.
Matt Mackall <mpm@selenic.com> [Tue, 25 Aug 2015 13:38:20 -0500] rev 26086
templater: move verbosity-to-template matcher to constructor
We're going to reuse this and it's silly for it to be done per-cset anyway.
Matt Mackall <mpm@selenic.com> [Tue, 25 Aug 2015 12:59:08 -0500] rev 26085
templater: remove pseudo-ternary
Matt Mackall <mpm@selenic.com> [Tue, 25 Aug 2015 12:57:21 -0500] rev 26084
templater: fix variable name that shadows built-in
Matt Mackall <mpm@selenic.com> [Tue, 25 Aug 2015 09:38:06 -0500] rev 26083
templater: minor whitespace tweaks
Matt Mackall <mpm@selenic.com> [Mon, 24 Aug 2015 13:26:10 -0500] rev 26082
lock: make trylock private
Matt Mackall <mpm@selenic.com> [Mon, 24 Aug 2015 13:24:43 -0500] rev 26081
lock: loop a finite number of times in trylock (
issue4787)
..before falling back to lock, which will sleep. This only addresses
the CPU consumption of the reported issue.
Yuya Nishihara <yuya@tcha.org> [Fri, 14 Aug 2015 12:25:14 +0900] rev 26080
reachableroots: silence warning of implicit integer narrowing issued by clang
Tested with CFLAGS=-Wshorten-64-to-32 CC=clang which is the default of
Mac OS X.
Because a valid revnum shouldn't exceed INT_MAX, we don't need long width for
large tovisit array.
Yuya Nishihara <yuya@tcha.org> [Fri, 14 Aug 2015 12:22:08 +0900] rev 26079
reachableroots: narrow scope of minidx variable
minidx is never used if includepath is false, so let's define it where it
is used.
Durham Goode <durham@fb.com> [Tue, 25 Aug 2015 15:54:33 -0700] rev 26078
convert: fix syncing deletes from p2 merge commit
Recently we fixed converting merges to correctly sync changes from p2. We missed
the case of deletes though (so p2 deleted a file that p1 had not yet deleted,
and the file does not belong to the source).
The fix is to detect when p2 doesn't have the file, so we just sync it as a
delete to p1 in the merge.
Updated the test, and verified it failed before the fix.
Durham Goode <durham@fb.com> [Mon, 24 Aug 2015 22:16:01 -0700] rev 26077
convert: add convert.git.skipsubmodules option
This adds an option to not pull in gitsubmodules during a convert. This is
useful when converting large git repositories where gitsubmodules were allowed
historically, but are no longer wanted.
Durham Goode <durham@fb.com> [Mon, 24 Aug 2015 19:33:36 -0700] rev 26076
paths: move path validation logic to its own function
Hard coding the '.hg' path in the paths class made it difficult for the hggit
extension to pull from gitrepos.
This patch moves the logic out to it's own function so extensions can add
additional checks to what is a valid path (i.e. a git repo is valid when hggit
is enabled).
Augie Fackler <augie@google.com> [Fri, 21 Aug 2015 14:33:51 -0400] rev 26075
parsers: avoid int/unsigned conversions
Detected with
make local CFLAGS='-Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter' CC=clang
Augie Fackler <augie@google.com> [Fri, 21 Aug 2015 14:29:42 -0400] rev 26074
base85: fix comparison of an int and a long
Caught using
make local CFLAGS='-Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter' CC=clang
Augie Fackler <augie@google.com> [Tue, 25 Aug 2015 15:52:54 -0400] rev 26073
progress: restore testedwith to the stub
Without this, hg always claims progress is at fault for problems,
which is completely crazy.
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.
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Aug 2015 18:29:58 +0900] rev 26042
reachableroots: give anonymous name to short-lived "numheads" variable
I'll reuse it for the length of the roots list.
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Aug 2015 18:03:47 +0900] rev 26041
reachableroots: reduce nesting level by jumping to next iteration by continue
This can eliminate lines over 80 columns. No code change except for the
outermost "if" condition.
Augie Fackler <augie@google.com> [Mon, 17 Aug 2015 19:03:58 -0400] rev 26040
test-convert-git: work around output format changes in git
git version 2.4.3:
--- /home/augie/hg/tests/test-convert-git.t
+++ /home/augie/hg/tests/test-convert-git.t.err
@@ -659,7 +659,7 @@
$ touch a && git add a && git commit -am "commit a"
[master (root-commit) 8ae5f69] commit a
Author: nottest <test@example.org>
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ cd ..
$ git clone git-repo7 git-repo7-client
git version 1.7.9.5:
--- /home/augie/hg/tests/test-convert-git.t
+++ /home/augie/hg/tests/test-convert-git.t.err
@@ -659,7 +659,7 @@
$ touch a && git add a && git commit -am "commit a"
[master (root-commit) 8ae5f69] commit a
Author: nottest <test@example.org>
- 1 file changed, 0 insertions(+), 0 deletions(-)
+ 0 files changed
create mode 100644 a
$ cd ..
$ git clone git-repo7 git-repo7-client
I don't know when this changed in git and am too lazy to try and
bisect it, so just work around the change.
Augie Fackler <augie@google.com> [Mon, 17 Aug 2015 22:56:12 -0400] rev 26039
histedit: correct spelling etc in more comments
Spotted during review of another patch.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 31 Jul 2015 12:54:16 -0700] rev 26038
histedit: add a missing "s" in a comment