Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 21:56:47 +0900] rev 32201
base85: proxy through util module
I'm going to replace hgimporter with a simpler import function, so we can
access to pure/cext modules by name:
# util.py
base85 = policy.importmod('base85') # select pure.base85 or cext.base85
# cffi/base85.py
from ..pure.base85 import * # may re-export pure.base85 functions
This means we'll have to use policy.importmod() function in place of the
standard import statement, but we wouldn't want to write it every place where
C extension modules are used. So this patch makes util host base85 functions.
Yuya Nishihara <yuya@tcha.org> [Tue, 02 May 2017 17:05:22 +0900] rev 32200
mdiff: move re-exports to top
This style seems more common in our codebase.
Yuya Nishihara <yuya@tcha.org> [Tue, 02 May 2017 19:10:55 +0900] rev 32199
test-commit-interactive-curses: remove unused import of parsers
Matt Harbison <matt_harbison@yahoo.com> [Mon, 08 May 2017 23:05:01 -0400] rev 32198
churn: use the non-deprecated template option in the examples
Durham Goode <durham@fb.com> [Mon, 08 May 2017 11:35:23 -0700] rev 32197
strip: make tree stripping O(changes) instead of O(repo)
The old tree stripping logic iterated over every tree revlog in the repo looking
for commits that had revs to be stripped. That's very inefficient in large
repos. Instead, let's look at what files are touched by the strip and only
inspect those revlogs.
I don't have actual perf numbers, since internally we don't use a true
treemanifest, but simply iterating over hundreds of thousands of revlogs takes
many, many seconds, so this should help tremendously when stripping only a few
commits.
Durham Goode <durham@fb.com> [Mon, 08 May 2017 11:35:23 -0700] rev 32196
strip: move tree strip logic to it's own function
This will allow external extensions to modify tree strip behavior more
precisely.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 08 May 2017 09:39:21 -0700] rev 32195
manifest: remove unused property _oldmanifest
The last use seems to have gone away in 7c7d845f8b64 (manifest: make
manifestlog use it's own cache, 2016-11-10).
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 08 May 2017 09:30:26 -0700] rev 32194
sslutil: reference fingerprints config option properly (issue5559)
The config option is "host:fingerprints" not "host.fingerprints".
This warning message is bad and misleads users.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 04:48:42 +0530] rev 32193
py3: convert key to str to make kwargs.pop work in mq
The keys are passed here and there as unicodes and our transformer make things
bytes. Due to that, mq was not poped and this results in error on Py3.
Here we abuse r'' to make that str on Python 3.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 04:41:45 +0530] rev 32192
py3: convert kwargs' keys to str before passing in cmdutil.getcommiteditor
Jun Wu <quark@fb.com> [Wed, 03 May 2017 23:50:41 -0700] rev 32191
diff: add a fast path to avoid loading binary contents
When diffing binary contents, with certain configs, we can show
"Binary file <name> has changed" without actual content.
That allows a fast path where we could avoid providing actual binary
contents. Note: in that case we still need to test if two contents are the
same, that's done by using "filectx.cmp", which could have its own fast
path.
Jun Wu <quark@fb.com> [Fri, 05 May 2017 17:20:32 -0700] rev 32190
diff: correct binary testing logic
This seems to be more correct given the table drawn in the previous patch.
Namely, "losedatafn" and "opts.git" are removed, "not opts.text" is added.
- losedatafn: diff output (binary) should not be affected by "losedatafn"
- opts.git: binary testing is helpful for detecting a fast path in the
next path. the fast path can also be used if opts.git is False
- opts.text: if it's set, we should treat the content as non-binary
Jun Wu <quark@fb.com> [Fri, 05 May 2017 16:48:58 -0700] rev 32189
diff: draw a table about binary diff behaviors
The table should make it easier to reason about future changes.
Jun Wu <quark@fb.com> [Wed, 03 May 2017 22:20:44 -0700] rev 32188
diff: use fctx.size() to test empty
fctx.size() could have a fast path that does not require loading content.
Jun Wu <quark@fb.com> [Wed, 03 May 2017 22:16:54 -0700] rev 32187
diff: use fctx.isbinary() to test binary
The end goal is to avoid calling fctx.data() when unnecessary. For example,
if diff.nobinary=1 and files are binary, the expected behavior is to print
"Binary file has changed". That could avoid reading fctx.data() sometimes.
This is mainly to enable an external LFS extension to skip expensive binary
file loading sometimes (read: most of the time with diff.nobinary=1 and
diff.text=0), without any behavior changes to mercurial (i.e. whether a file
is LFS or not does not change any behavior, LFS could be 100% transparent to
users).
Yuya Nishihara <yuya@tcha.org> [Thu, 20 Apr 2017 22:16:12 +0900] rev 32186
pycompat: extract helper to raise exception with traceback
It uses "raise excobj, None, tb" form which I think is simpler and more
useful than "raise exctype, args, tb".
Yuya Nishihara <yuya@tcha.org> [Thu, 04 May 2017 15:23:51 +0900] rev 32185
largefiles: make sure debugstate command is populated before wrapping
Copied the hack from 869d660b8669, which seemed the simplest workaround.
Perhaps debugcommands.py should have its own commands table.
Yuya Nishihara <yuya@tcha.org> [Mon, 01 May 2017 17:23:48 +0900] rev 32184
check-code: ignore re-exports of os.environ in encoding.py
These are valid uses of os.environ.
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 21:51:19 +0900] rev 32183
check-code: exclude demandimport.py and policy.py from Python 3 checks
These modules can't depend on pycompat.py, which means we have to write Py3
hacks in them.
Yuya Nishihara <yuya@tcha.org> [Mon, 01 May 2017 17:10:22 +0900] rev 32182
check-code: rewrite py3 exclusion pattern with negative lookahead
I want to add more patterns, but negative lookbehind requires patterns of
the same length so not useful.
Yuya Nishihara <yuya@tcha.org> [Wed, 03 May 2017 11:16:55 +0900] rev 32181
cleanup: remove useless re-raises of KeyboardInterrupt
KeyboardInterrupt is no longer a subclass of Exception since Python 2.5.
https://docs.python.org/2/whatsnew/2.5.html#pep-352-exceptions-as-new-style-classes
Yuya Nishihara <yuya@tcha.org> [Fri, 12 Aug 2016 11:36:42 +0900] rev 32180
make: drop deprecated rule to process temporary copy of pure modules
Pure modules never be copied to mercurial/ since 511a4384b033.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 06 May 2017 02:33:00 +0900] rev 32179
help: describe about choice of :prompt as a fallback merge tool explicitly
"merge-tools" help topic has described that the merge of the file
fails if no tool is found to merge binary or symlink, since
c77f6276c9e7 (or Mercurial 1.7), which based on (already removed)
MergeProgram wiki page.
But even at that revision, and of course now, merge of the file
doesn't fail automatically for binary/symlink. ":prompt" (or
equivalent logic) is used, if there is no appropriate tool
configuration for binary/symlink.
Steve Borho <steve@borho.org> [Sat, 06 May 2017 10:18:34 -0500] rev 32178
wix: only one KeyPath is allowed per Component
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 08:49:46 -0700] rev 32177
dirstate: optimize walk() by using match.visitdir()
We already have the logic for restricting directory walks in
match.visitdir() that we use for treemanifests. We should take
advantage of it when walking the working copy as well.
This speeds up "hg st -I rootfilesin:." on the Firefox repo from
0.587s to 0.305s on warm disk (and much more on cold disk). More time
is spent reading the dirstate than walking the working copy after.
I tried to find scenarios where calling match.visitdir() would be a
noticeable overhead, but I couldn't find any. I encourage the reader
to try for themselves, since this is performance-critical code.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 08:49:07 -0700] rev 32176
match: optimize visitdir() for patterns matching only root directory
Because _rootsanddirs() returns a list of directories to visit
recursively and a list of directories to visit non-recursively. For
patterns such as 'rootfilesin:foo/bar', we clearly need to visit the
directory foo/bar, but we also need to visit its parents. The method
therefore uses util.dirs() to find the parent directories of
'foo/bar'. That method does not include the root directory, but since
we obviously need to visit the root directory, we always added '.' to
the set of directories to visit non-recursively.
The visitdir() method had special handling to consider set(['.']) to
mean that no includes had been specified and would thus visit all
directories. However, when the pattern is 'rootfilesin:.', set(['.'])
is actually the real set of directories to visit and the special
handling of that set meant that all directories got visited instead of
just the root directory.
The fix is simple: add '.' to the set of parent directories in
_rootsanddirs() and stop treating set(['.']) specially. This makes
hg files -r . -I rootfilesin:.
in a treemanifest version of the Firefox repo go from 1.5s to 0.26s on
warm disk (and a *much* bigger improvement on cold disk).
Note that the -I is necessary for no good reason. We just haven't
optimized visitdir() for regular (non-include, non-exclude) patterns
yet.
Martin von Zweigbergk <martinvonz@google.com> [Sat, 11 Mar 2017 12:25:56 -0800] rev 32175
rebase: don't update state dict same way for each root
The update statement does not depend on anything in the loop, so just
move it before the loop and do it once. There are no cases where
update would happen 0 times before (and 1 now); the function returns
early in all such cases.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 04 May 2017 21:11:40 -0700] rev 32174
forget: access status fields by name, not index
Phil Cohen <phillco@fb.com> [Wed, 03 May 2017 18:26:57 -0700] rev 32173
demandimport: add urwid.command_map to ignore list
The useful pudb debugger can be used with Mercurial, but its import of urwid
fails when demandimport is enabled. Add urwid.command_map to the ignore list so
pudb can be used with hg without disabling all of demandimport.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 10:08:36 -0700] rev 32172
outgoing: run on filtered repo
outgoing has been using an unfiltered repo since fe67107094fd (discovery:
outgoing pass unfiltered repo to findcommonincoming (issue3776),
2013-01-28). If I'm reading code and history correctly, it should be
safe to run _outgoing() on a filtered repo since c5456b64eb07
(discovery: run discovery on filtered repository, 2015-01-07). By
running _outgoing() on a filtered repo, we can also remove the
workaround there for ignoring filtered revisions.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 14:10:58 -0700] rev 32171
manifest: remove check for non-contexts in _dirmancache
It looks like the _dirmancache has contained only manifest contexts
since d79c141fdf41 (manifest: remove usages of manifest.read,
2016-11-10).
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:48:45 +0200] rev 32170
bundle: factor the 'getchangegroup' out
The call in the two branches is identical, so we can just issue it outside of
the conditional.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:47:27 +0200] rev 32169
bundle: avoid reset of the 'outgoing' variable
We have a cleaner way to achieve the same effect. Not resetting the variable
will help us to simplify the code.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:43:41 +0200] rev 32168
changegroup: deprecate 'getlocalchangroup' (API)
We have 'getchangegroup' with a shorter name for the exactly same feature. Now
that all users are gone we can formally deprecate it.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:41:50 +0200] rev 32167
tests: directly 'getchangegroup'
It is identical to 'getlocalchangegroup' with a shorter name.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:41:36 +0200] rev 32166
exchange: directly 'getchangegroup'
It is identical to 'getlocalchangegroup' with a shorter name.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:41:17 +0200] rev 32165
commands: directly 'getchangegroup'
It is identical to 'getlocalchangegroup' with a shorter name.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:36:45 +0200] rev 32164
changegroup: deduplicate 'getlocalchangegroup'
The two functions 'getlocalchangegroup' and 'getchangegroup' have been strictly
identical for multiple years ('getchangegroup' had a deprecated docstring)
We'll drop one of them (getlocalchangegroup, since it has the longest name).
However, we needs to migrate all users of the dropped one to the new one before
we can deprecate it. In the mean time we drop one of the duplicated definition
and the outdated docstring.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 04:57:30 +0530] rev 32163
py3: add test to show 'hg log -Tjson' works
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 04:52:03 +0530] rev 32162
py3: add test to show 'hg log -G' works
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 04:42:05 +0530] rev 32161
py3: rename test-check-py3-commands.t to test-py3-commands.t
test-check-*.t is a set of tests which tests certain coding style checks. So
this test was wrongly named, thanks to marmoute for pointing this out.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 04:38:20 +0530] rev 32160
py3: use list of bytes rather than bytestring while extending bytes into lists
Python 2:
>>> ls = []
>>> ls.extend(b'abc')
>>> ls
['a', 'b', 'c']
Python 3:
>>> ls = []
>>> ls.extend(b'abc')
>>> ls
[97, 98, 99]
So to make sure things work fine in Py3, this patch does:
>>> ls = []
>>> ls.extend([b'a', b'b', b'c'])
>>> ls
[b'a', b'b', b'c']
After this `hg log -G` works!
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 01:12:14 +0530] rev 32159
py3: use pycompat.byteskwargs to converts kwargs to bytes
baseformatter._item must contain both keys and values in bytes. So to make
sure that, we convert the opts back to bytes.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 00:44:53 +0530] rev 32158
py3: make adefaults keys str to be compatible with getattr
getattr passes a str value of the attribute to be looked and keys in adefaults
dict are bytes which resulted in AttributeError. This patch abuses r'' to
make the keys str.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 03 May 2017 15:41:28 +0530] rev 32157
py3: abuse r'' to access keys in keyword arguments
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 03 May 2017 15:37:51 +0530] rev 32156
py3: use pycompat.bytechr instead of chr
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 01:41:54 +0530] rev 32155
py3: use %d to format integers into bytestrings
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 01:26:49 +0530] rev 32154
py3: use pycompat.bytestr instead of bytes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 01:26:13 +0530] rev 32153
py3: slice over bytes to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 08 Apr 2017 11:02:37 +0530] rev 32152
py3: use encoding.unitolocal instead of .encode(encoding.encoding)
Durham Goode <durham@fb.com> [Wed, 03 May 2017 10:43:59 -0700] rev 32151
rebase: use matcher to optimize manifestmerge
The old merge code would call manifestmerge and calculate the complete diff
between the source to the destination. In many cases, like rebase, the vast
majority of differences between the source and destination are irrelevant
because they are differences between the destination and the common ancestor
only, and therefore don't affect the merge. Since most actions are 'keep', all
the effort to compute them is wasted.
Instead, let's compute the difference between the source and the common ancestor
and only perform the diff of those files against the merge destination. When
using treemanifest, this lets us avoid loading almost the entire tree when
rebasing from a very old ancestor. This speeds up rebase of an old stack of 27
commits by 20x.
In mozilla-central, without treemanifest, when rebasing a commit from
default~100000 to default, this speeds up the manifestmerge step from 2.6s to
1.2s. However, the additional diff adds an overhead to all manifestmerge calls,
especially for flat manifests. When rebasing a commit from default~1 to default
it appears to add 100ms in mozilla-central. While we could put this optimization
behind a flag, I think the fact that it makes merge O(number of changes being
applied) instead of O(number of changes between X and Y) justifies it.
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 May 2017 23:47:10 -0700] rev 32150
changegroup: delete unused 'bundlecaps' argument (API)
Martin von Zweigbergk <martinvonz@google.com> [Wed, 03 May 2017 10:33:26 -0700] rev 32149
localrepo: reuse exchange.bundle2requested()
It seems like localrepo.getbundle() is trying to do the same thing, so
let's just call the method. That way we get the same condition as
there (matching any "HG2" prefix, not only "HG20").
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 28 Apr 2017 01:13:07 +0530] rev 32148
py3: use raw strings while accessing class.__dict__
The keys of class.__dict__ are unicodes on Python 3.
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 25 Apr 2017 01:52:30 +0530] rev 32147
py3: handle opts correctly for `hg add`
opts in add command were passed again to cmdutil.add() as kwargs so we need
to convert them again to str. Intstead we convert them to bytes when passing
scmutil.match(). Opts handling is also corrected for all the functions which
are called from cmdutil.add().
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 24 Apr 2017 04:32:04 +0530] rev 32146
py3: handle opts correctly for rollback
dryrun and force are just check for None, the value is not used. So its better
to leave opts as unicodes as that wont harm us.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 21 Apr 2017 15:04:32 +0530] rev 32145
py3: handle opts correctly for unbundle
There is just a check whether the value is None or not. So even having
optupdate as unicodes won't harm us.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 21 Apr 2017 02:20:46 +0530] rev 32144
py3: convert opts to bytes in cmdutil.dorecord()
commands.commit() calls cmdutil.dorecord() where opts are passed as unicodes
being keyword arguments. This patch converts them back to bytes as they are
required.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 28 Apr 2017 00:49:30 +0530] rev 32143
py3: make sure opts are passed and used correctly in help command
opts are converted back to bytes in help.help_() where they are used.
Before that it's ensured that we have a bytes value for keep variable.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 03 May 2017 15:25:06 +0530] rev 32142
py3: handle opts uniformly in commands.py
Since keyword arguments can't be bytes on Python 3, we converted then to
unicodes before passing into different command functions. We need to adopt a
certain pattern to convert opts back to bytes. Following are some of the
functions which are called from inside these command functions and should
always be feeded bytes to follow the right behaviour.
ui.fomattter()
scmutil.match()
patch.diffallopts()
hg.peer()
cmdutil.{show_changeset|copy|graphrevs|checkunsupportedflag}
server.{createservice|runservice}
There are few commands which are left out where opts is again passed to a
function as keyword arguments or converting opts back to bytes is kind of
not necessary. Those are cat, revert, help, unbundle and rollback. Following
patches will deal with them. This patch apart from these five commands,
convert opts back to bytes for rest of the commands.
This fixes a lot of things which are hidden like --git works now. Similarly
more flags of commands which run on Python 3 currently get fixed.
Augie Fackler <augie@google.com> [Thu, 04 May 2017 00:26:55 -0400] rev 32141
merge with stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 22:56:53 -0400] rev 32140
help: call out specific replacement configuration settings
As an aside, I'm having trouble parsing the help text meaning for HG when it is
unset or empty. How can it be the frozen name or searched if it is empty?
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 22:07:47 -0400] rev 32139
help: spelling fixes
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 22:05:23 -0400] rev 32138
help: attempt to clarify that pager usage is not output length based
This may be too subtle of a change to get the point across, but when I first
read the original text, I thought maybe the pager would only be invoked if
writing more than a screenful. The distinction between this and a pager that
simply exits after printing less than a screenful is important on Windows, given
the inability of `more` to color output.
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 21:58:11 -0400] rev 32137
help: document color/pager pitfalls on Windows
Even though I figured this out a few weeks ago, I was initially puzzled where
the color went when I upgraded to 4.2 on a different Windows machine. Let's
point users reading the help into the right direction.
I wonder if we should be even more explicit about cmd.exe/MSYS/pager/color
interplay, but at least all of the breadcrumbs are here (I think).
Jun Wu <quark@fb.com> [Wed, 03 May 2017 18:04:43 -0700] rev 32136
webcommands: use fctx.isbinary
Jun Wu <quark@fb.com> [Wed, 03 May 2017 18:03:38 -0700] rev 32135
annotate: use fctx.isbinary
Jun Wu <quark@fb.com> [Wed, 03 May 2017 18:02:00 -0700] rev 32134
fileset: use fctx.isbinary instead of util.binary(fctx.data())
filectx provides "isbinary" to test if the data is binary. Let's use it.
This enables other filectx implementations (like LFS) to override the
isbinary test.
Siddharth Agarwal <sid0@fb.com> [Wed, 03 May 2017 14:07:14 -0700] rev 32133
internals: document that "branches" is a legacy wire command
Modern clients use a different discovery mechanism.
Durham Goode <durham@fb.com> [Wed, 03 May 2017 10:30:57 -0700] rev 32132
match: make subinclude construction lazy
The matcher subinclude functionality allows us to have .hgignore files that
include subdirectory hgignore files. Today it parses the entire repo at once,
even if we only need to test a file in one subdirectory. This patch makes the
subinclude tree creation lazy, which speeds up matcher creation significantly in
large repos with very large trees of ignore patterns.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 03 May 2017 09:09:44 -0700] rev 32131
bisect: allow resetting with unfinished graft/rebase/etc
"hg bisect --reset" just deletes the state file (it doesn't move back
to the starting point like rebase does); it can not conflict with an
ongoing rebase etc.
checkunfinished() has this documentation:
It's probably good to check this right before bailifchanged().
So that's where I moved it.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 21 Apr 2017 01:13:18 +0530] rev 32130
py3: use %d instead of %s for integers
dispatch._runcatch() always returns an integer value.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 21 Apr 2017 00:53:38 +0530] rev 32129
py3: make posix.getuser return a bytes
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 20 Apr 2017 19:57:16 +0530] rev 32128
py3: replace str with bytes in isinstance()
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 27 Apr 2017 09:49:57 +0530] rev 32127
py3: use pycompat.bytestr() instead of str()
This is because str() on python 3 return unicodes
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 20 Apr 2017 19:51:37 +0530] rev 32126
py3: alias long to int on Python 3
Alex Gaynor <agaynor@mozilla.com> [Wed, 03 May 2017 09:41:55 -0400] rev 32125
setup: sys.version_info always exists
It is documented as existing since Python 2.0, and empirically from
other OSS projects I maintain, there is no problem relying on its
existance.
Jun Wu <quark@fb.com> [Tue, 02 May 2017 22:39:14 -0700] rev 32124
filelog: fix parsemeta docstring
75bb7c702317 changed the return type of filelog.parsemeta but forgot to
update its docstring.
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 May 2017 10:20:44 -0700] rev 32123
util: remove doc of long gone 'targetsize' argument
Gone since fa836e050c50 (chunkbuffer: removed unused method and arg,
2007-10-11).
Matt Harbison <matt_harbison@yahoo.com> [Tue, 02 May 2017 22:26:09 -0400] rev 32122
test-diff-color: disable pager for expected output on Windows (issue5555)
Windows uses `more.com`, which unhelpfully adds an extra trailing line
consisting only of '\r'. It also converts tab characters to spaces, which
throws off the last two tests.
Setting the 'ui.formatted' option is what allowed the pager to be used by these
tests in the first place.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:05:39 +0200] rev 32121
cleanup: drop the deprecated 'localrepo._link' method
This was deprecated in favor of 'localrepo.wvfs.islink'. We can now drop it for the
future 4.3.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:04:55 +0200] rev 32120
cleanup: drop the deprecated 'localrepo.wfile' method
This was deprecated in favor of 'localrepo.wvfs.join'. We can now drop it for the
future 4.3.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:03:56 +0200] rev 32119
cleanup: drop the deprecated 'localrepo.join' method
This was deprecated in favor of 'localrepo.vfs.join'. We can now drop it for the
future 4.3.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:03:04 +0200] rev 32118
cleanup: drop the deprecated 'localrepo.tag' method
This was deprecated in favor of 'mercurial.tags.tag'. We can now drop it for the
future 4.3.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:01:47 +0200] rev 32117
cleanup: drop the deprecated 'localrepo.opener' method
This was deprecated in favor of 'localrepo.vfs'. We can now drop it for the
future 4.3.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:01:15 +0200] rev 32116
cleanup: drop the deprecated 'localrepo.wopener' method
This was deprecated in favor of 'localrepo.wvfs'. We can now drop it for the
future 4.3.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 01:59:33 +0200] rev 32115
cleanup: drop vfs compatibility layer in scmutil
All these constructors are deprecated in 4.2. We can now drop them on the
default branch (future 4.3).
Jun Wu <quark@fb.com> [Sat, 22 Apr 2017 17:13:05 -0700] rev 32114
test-worker: exercise more about "killworkers" situation
This patch adds some sleep and increases numcpus to exercise the
"killworkers" situation. So race conditions could be discovered more easily,
if someone changes worker.py incorrectly. Currently worker.py should be free
of such issues.
Jun Wu <quark@fb.com> [Sat, 22 Apr 2017 17:00:50 -0700] rev 32113
test-worker: capture tracebacks more reliably
The traceback test may have traceback caused by SIGTERM. Instead of grepping
"Traceback", explicitly grep the exception we care about.
This makes the test less flaky.
Jun Wu <quark@fb.com> [Sat, 22 Apr 2017 16:50:08 -0700] rev 32112
worker: rewrite error handling so os._exit covers all cases
Previously the worker error handling is like:
pid = os.fork() --+
if pid == 0: |
.... | problematic
.... --+
try: --+
.... | worker error handling
--+
If a signal arrives when Python is executing the "problematic" lines, an
external error handling (dispatch.py) will take over the control flow and
it's no longer guaranteed "os._exit" is called (see 86cd09bc13ba for why it
is necessary).
This patch rewrites the error handling so it covers all possible code paths
for a worker even during fork.
Note: "os.getpid() == parentpid" is used to test if the process is parent or
not intentionally, instead of checking "pid", because "pid = os.fork()" may
be not atomic - it's possible that that a signal hits the worker before the
assignment completes [1]. The newly added test replaces "os.fork" to
exercise that extreme case.
[1]: CPython compiles "pid = os.fork()" to 2 byte codes: "CALL_FUNCTION" and
"STORE_FAST", so it's probably not atomic:
def f():
pid = os.fork()
dis.dis(f)
2 0 LOAD_GLOBAL 0 (os)
3 LOAD_ATTR 1 (fork)
6 CALL_FUNCTION 0
9 STORE_FAST 0 (pid)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
Jun Wu <quark@fb.com> [Sat, 22 Apr 2017 15:00:17 -0700] rev 32111
dispatch: take over SignalInterrupt handling from scmutil
dispatch handles KeyboardInterrupt already. This makes the code more
consistent, and makes worker not print "killed!" if it receives SIGTERM in
most cases (in rare cases there is still "killed!" printed, which will be
fixed by the next patch).
Kevin Bullock <kbullock+mercurial@ringworld.org> [Tue, 02 May 2017 17:29:01 -0500] rev 32110
merge stable into default
Kevin Bullock <kbullock@ringworld.org> [Tue, 02 May 2017 17:09:00 -0500] rev 32109
Added signature for changeset bb96d4a49743
Kevin Bullock <kbullock@ringworld.org> [Tue, 02 May 2017 17:08:54 -0500] rev 32108
Added tag 4.2 for changeset bb96d4a49743
Kevin Bullock <kbullock+mercurial@ringworld.org> [Tue, 02 May 2017 16:35:12 -0500] rev 32107
merge with i18n
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 07:23:29 +0900] rev 32106
i18n-ja: synchronized with 6e0368b6e0bb
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 17:18:13 +0200] rev 32105
pager: drop the support for 'pager.enable=<bool>'
This option was never released except for a release candidate. Dropping
compatibility with this option will free the 'pager.enable' config option for
other usage in the future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:36:50 +0200] rev 32104
pager: rename 'pager.enable' to 'ui.paginate'
This aligns with what we do for color (see 7fec37746417). Pager is a central
enough notion that having the master config in the [ui] section makes senses. It
will helps with consistency, discoverability. It will also help having a simple
and clear example hgrc mentioning pager.
The previous form of the option had never been released in a non-rc version but
we keep it around for convenience. If both are set, 'ui.pager' take priority.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 20:19:09 +0200] rev 32103
color: special case 'always' in 'ui.color'
This lift the confusing case, where 'ui.color=always' would actually not always
use color.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 20:01:54 +0200] rev 32102
color: turn 'ui.color' into a boolean (auto or off)
Previously, 'ui.color=yes' meant "always show color", While
"ui.color=auto" meant "use color automatically when it appears
sensible".
This feels problematic to some people because if an administrator has
disabled color with "ui.color=off", and a user turn it back on using
"color=on", it will get surprised (because it breaks their output when
redirected to a file.) This patch changes ui.color=true to only move the
default value of --color from "never" to "auto".
I'm not really in favor of this changes as I suspect the above case will
be pretty rare and I would rather keep the logic simpler. However, I'm
providing this patch to help the 4.2 release in the case were others
decide to make this changes.
Users that want to force colors without specifying --color on the
command line can use the 'ui.formatted' config knob, which had to be
enabled in a handful of tests for this patch.
Nice summary table (credit: Augie Fackler)
That is, before this patch:
+--------------------+--------------------+--------------------+
| | not a tty | a tty |
| | --color not set | --color not set |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color (not set) | no color | no color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = auto | no color | color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = yes | *color* | color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = no | no color | no color |
| | | |
+--------------------+--------------------+--------------------+
(if --color is specified, it always clobbers the setting in [ui])
and after this patch:
+--------------------+--------------------+--------------------+
| | not a tty | a tty |
| | --color not set | --color not set |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color (not set) | no color | no color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = auto | no color | color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = yes | *no color* | color |
| | | |
+--------------------+--------------------+--------------------+
| [ui] | | |
| color = no | no color | no color |
| | | |
+--------------------+--------------------+--------------------+
(if --color is specified, it always clobbers the setting in [ui])
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:43:43 +0200] rev 32101
pager: document the 'pager.enable' option
The 'config' helps was missing help about pager enabling/disabling.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 18:07:23 +0200] rev 32100
pager: advertise the config option in the default hgrc
Same as for 'ui.color', this is a critical part of the UI and we want user to
find this config knob easily.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:52:11 +0200] rev 32099
pager: document the 'pager' config section
There as a 'hg help pager' section but the 'hg help config.pager' was missing.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:36:30 +0200] rev 32098
pager: test the 'enable' config option
While poking at this option I realised it was not tested.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:51:57 +0200] rev 32097
config: drop pager from the recommended extension
The extension is deprecated, we should having exposing it to users.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:51:47 +0200] rev 32096
config: use "churn" as an example extension
"Churn" is not the useful example we have, but this is the one used in
'hg help config.extensions'. As we need something to replace the deprecated
'pager' extension in the example config, we are adding 'churn'.
Yuya Nishihara <yuya@tcha.org> [Wed, 19 Apr 2017 23:10:05 +0900] rev 32095
discovery: prevent crash caused by prune marker having no parent data
If a marker has no parent information, parents field is set to None, which
caused TypeError. I think this shouldn't normally happen, but somehow
I have such marker in my repo.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:40:41 +0200] rev 32094
color: point to the global help in the example hgrc
This is probably the best way to have users learn more is they need too.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:39:50 +0200] rev 32093
color: reflect the new default in the example hgrc
Color is enabled by default so un-commenting the line would not have any effect.
We'll point to the help in the next changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:38:57 +0200] rev 32092
color: point to the config help in global help topic
We point out at the help of the config option for user who wants to learn more
about the possible config value.
The suggested command returns some other extra (color related) results, but this
is bug to fix outside of the freeze.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:38:07 +0200] rev 32091
color: reflect the new default in global help topic
We point out that color is enabled by default.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 01 May 2017 11:04:10 -0700] rev 32090
docs: describe ui.color consistently with --color
The --color option is described to accept "boolean, always, auto,
never, or debug". Let's use a similar description for ui.color. Also
fix the formatting to use double quotes as we seem to use for about
half the values in config.txt (the other half uses double
backticks). Also use uppercase Boolean for consistency within the
file.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:09:35 +0200] rev 32089
test: glob out variation from 'HGPORT' length
On system where HGTEST_PORT is configured to a value an order a magnitude lower
or higher than the default. The number of digit in the HGPORT changes and this
test breaks.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 19:59:13 +0900] rev 32088
lock: avoid unintentional lock acquisition at failure of readlock
Acquiring lock by vfs.makelock() and getting lock holder (aka
"locker") information by vfs.readlock() aren't atomic action.
Therefore, failure of the former doesn't ensure success of the latter.
Before this patch, lock is unintentionally acquired, if ENOENT
causes failure of vfs.readlock() while 5 times retrying, because
lock._trylock() returns to caller silently after retrying, and
lock.lock() assumes that lock._trylock() returns successfully only if
lock is acquired.
In this case, lock symlink (or file) isn't created, even though lock
is treated as acquired in memory.
To avoid this issue, this patch makes lock._trylock() raise
LockHeld(EAGAIN) at the end of it, if lock isn't acquired while
retrying.
An empty "locker" meaning "busy for frequent lock/unlock by many
processes" might appear in an abortion message, if lock acquisition
fails. Therefore, this patch also does:
- use '%r' to increase visibility of "locker", even if it is empty
- show hint message to explain what empty "locker" means
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 19:58:52 +0900] rev 32087
lock: avoid unintentional lock acquisition at failure of readlock
Acquiring lock by vfs.makelock() and getting lock holder (aka
"locker") information by vfs.readlock() aren't atomic action.
Therefore, failure of the former doesn't ensure success of the latter.
Before this patch, lock is unintentionally acquired, if
self.parentlock is None (this is default value), and lock._readlock()
returns None for ENOENT at vfs.readlock(), because these None are
recognized as equal to each other.
In this case, lock symlink (or file) isn't created, even though lock
is treated as acquired in memory.
To avoid this issue, this patch retries lock acquisition immediately,
if lock._readlock() returns None "locker".
This issue will be covered by a test added in subsequent patch,
because simple emulation of ENOENT at vfs.readlock() easily causes
another issue. "raising ENOENT only at the first vfs.readlock()
invocation" is too complicated for unit test, IMHO.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:52:36 +0900] rev 32086
httppeer: unify hint message for PeerTransportError
Another raising PeerTransportError for "incomplete response" in
httppeer.py uses this (changed) hint message. This unification reduces
cost of translation.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:52:36 +0900] rev 32085
revset: add i18n comments to error messages for followlines predicate
This patch also includes un-quoting "descend" keyword for similarity
to other error messages (this seems too trivial as a separated patch).
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:52:32 +0900] rev 32084
help: apply bulk fixes for indentation and literal blocking issues
There are some paragraphs, which aren't rendered in online help as
expected because of indentation and literal blocking issues.
- hgext/rebase.py
- paragraph before example code ends with ":", which treats
subsequent indented paragraphs as normal block
=> replace ":" with "::" to treat subsequent paragraphs as literal block
- help/pager.txt
- paragraph before a list of --pager option values ends with "::",
which treats subsequent indented paragraphs as literal block
=> replace "::" with ":" to treat subsequent paragraphs as normal block
- the second line of explanation for no/off --pager option value is
indented incorrectly (this also causes failure of "make" in doc)
=> indent correctly
- help/revisions.txt
- explanation following example code of "[revsetalias]" section
isn't suitable for literal block
=> un-indent explanation paragraph to treat it as normal block
- indentation of "For example" before example of tag() revset
predicate matching is meaningless
- descriptive text for tag() revset predicate matching isn't
suitable for literal block
=> un-indent concatenated two paragraphs to treat them as normal block
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:38:52 +0900] rev 32083
rebase: fix incorrect configuration example
This configuration example doesn't make rebase require a destination,
even though help document wants to show such example.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:38:52 +0900] rev 32082
help: use hg role of mini reST to make hyper link in HTML page