Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 22:07:47 -0400] rev 32113
help: spelling fixes
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 22:05:23 -0400] rev 32112
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 32111
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).
Matt Harbison <matt_harbison@yahoo.com> [Tue, 02 May 2017 22:26:09 -0400] rev 32110
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.
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
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:35:57 +0900] rev 32081
help: use mercurial as a subject of colorization and pagination
Now, colorization and pagination are in Mercurial core.
Boris Feld <boris.feld@octobus.net> [Tue, 25 Apr 2017 16:50:01 +0200] rev 32080
packaging: add make target for linux wheels
Having linux wheels is going to helps system without compiler or python-dev
plus speed up the installation for everyone.
I followed the manylinux example repository
https://github.com/pypa/python-manylinux-demo
to add a make target (build-linux-wheels) using
official docker image to build python 2 linux wheels
for mercurial. It generates Python 2.6 and Python 2.7 for both
32 and 64 bits architectures.
I had to blacklist several test cases for various reasons:
* test-convert-git.t and test-subrepo-git.t because of the git version
* test-patchbomb-tls.t because of warning using tls 1.0
It's likely because the docker image is based on centos 5.0 and
openssl is outdated.
Boris Feld <boris.feld@octobus.net> [Tue, 25 Apr 2017 16:50:01 +0200] rev 32079
tests: fix two http tests to also pass inside manylinux1 docker
This will let us build Linux wheels.
Yuya Nishihara <yuya@tcha.org> [Fri, 28 Apr 2017 20:51:14 +0900] rev 32078
pager: use less as a fallback on Unix
This seems reasonable choice per discussion, and the default-default of Git.
See also the inline-comment for why.
https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-April/097042.html
Matt Harbison <matt_harbison@yahoo.com> [Tue, 25 Apr 2017 22:10:26 -0400] rev 32077
test-bookmarks: factor hooks out to a shell script for Windows
The previous incarnation of the hooks weren't being run on Windows, which
altered the DAG and hashes[1].
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-April/096987.html
Matt DeVore <matvore@google.com> [Wed, 19 Apr 2017 17:04:22 -0700] rev 32076
help: explain how to access subtopics in internals
Matt DeVore <matvore@google.com> [Tue, 18 Apr 2017 14:51:32 -0700] rev 32075
log: document the characters ---graph uses to draw
The meaning of : vs | was undocumented and non-obvious.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 25 Apr 2017 00:19:03 -0700] rev 32074
tests: demonstrate that pager.attend-<abbreviated> doesn't work
A pager.attend-* value that isn't a full command or alias name doesn't
work. We add explicit test coverage of this to demonstrate it.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Apr 2017 23:11:44 -0700] rev 32073
tests: test that abbreviated command alias is also paged
Explicit test coverage is good.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Apr 2017 23:10:43 -0700] rev 32072
tests: drop unnecessary pager attend in test
`log` is attended by default. We don't need to specify pager.attend-log
in this test.
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 24 Apr 2017 10:48:07 +0200] rev 32071
hgweb: change text of followlines links to "older / newer"
DAG directions "descending" / "ascending" arguably do not make much sense in
the web interface where changes are usually listed by "dates".
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 24 Apr 2017 10:32:15 +0200] rev 32070
hgweb: do not show "descending" link in followlines UI for filelog heads
When on a filelog head, we are certain that there will be no descendant so the
target of the "descending" link will lead to an empty log result. Do not
display the link in this case.
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 24 Apr 2017 18:33:23 +0200] rev 32069
context: optimize linkrev adjustment in blockancestors() (issue5538)
We set parent._descendantrev = child.rev() when walking parents in
blockancestors() so that, when linkrev adjustment is perform for these, it
starts from a close descendant instead of possibly topmost introrev. (See
`self._adjustlinkrev(self._descendantrev)` in filectx._changeid().)
This is similar to changeset c82d88dfaf59, which added a "f._changeid"
instruction in annotate() for the same purpose.
However, here, we set _descendantrev explicitly instead of relying on the
'_changeid' cached property being accessed (with effect to set _changeid
attribute) so that, in _parentfilectx() (called from parents()), we go through
`if '_changeid' in vars(self) [...]` branch in which instruction
`fctx._descendantrev = self.rev()` finally appears and does what we want.
With this, we can roughly get a 3x speedup (including in example of issue5538
from mozilla-central repository) on usage of followlines revset (and
equivalent hgweb request).
Boris Feld <boris.feld@octobus.net> [Mon, 24 Apr 2017 17:13:24 +0200] rev 32068
record: update help message to use operation instead of "record" (issue5432)
Update the hunk selector help message to use the operation name instead
of using "record" for all operations. Extract the help message in the same way
as other single and multiple message line.
Update tests to make sure that both "revert" and "discard" variants are tested.
Augie Fackler <augie@google.com> [Mon, 24 Apr 2017 14:38:30 -0400] rev 32067
tests: add lots of regex matching to test-http-bad-server.t
This makes the test pass in Python 2.6. It's all one of two problems:
1)
abort: error: '' (2.7)
vs
abort: error: (2.6)
2) 65537 (2.7) vs -1 (2.6)
With some...unfortunate escaping required due to how regular
expressions work. Sigh.
Augie Fackler <augie@google.com> [Sun, 23 Apr 2017 09:38:10 -0400] rev 32066
tests: pass only one file at a time to tail(1)
It looks like the verison on Solaris only tails one file at a time.
Augie Fackler <augie@google.com> [Sat, 22 Apr 2017 12:29:17 -0400] rev 32065
debian: configure editor and pager to sensible-\1 by default
Now that environment variables override system-wide hgrc settings, we
can default Mercurial to sensible-editor and sensible-pager by default
for debian users.
Augie Fackler <augie@google.com> [Sat, 22 Apr 2017 12:24:47 -0400] rev 32064
tests: work around flaky test failure on FreeBSD and relatives
test-http-bad-server has a flaky output case that reproduces fairly
often (20% or more of runs on my Mac) on BSD-family OSes. So that
tests can be green for the 4.2 release, let's more or less give up on
this output, and plan to pursue it in the future.
Denis Laxalde <denis@laxalde.org> [Thu, 20 Apr 2017 21:40:28 +0200] rev 32063
context: start walking from "introrev" in blockancestors()
Previously, calling blockancestors() with a fctx not touching file would
sometimes yield this filectx first, instead of the first "block ancestor",
because when compared to its parent it may have changes in specified line
range despite not touching the file at all.
Fixing this by starting the algorithm from the "base" filectx obtained using
fctx.introrev() (as done in annotate()).
In tests, add a changeset not touching file we want to follow lines of to
cover this case. Do this in test-annotate.t for followlines revset tests and
in test-hgweb-filelog.t for /log/<rev>/<file>?linerange=<from>:<to> tests.
Augie Fackler <augie@google.com> [Thu, 13 Apr 2017 16:09:40 -0400] rev 32062
sshpeer: try harder to snag stderr when stdout closes unexpectedly
Resolves test failures on FreeBSD, but I'm not happy about the fix.
A previous version of this also wrapped readline by putting the hack
in the _call method on doublepipe. That was confusing for readers and
wasn't necessary - just doing this on read() is sufficient to fix the
bugs I'm observing. We can always come back and do readline later if
needed.
Yuya Nishihara <yuya@tcha.org> [Thu, 20 Apr 2017 22:51:28 +0900] rev 32061
test-worker: disable tests of forked workers on Windows
The number of the "Traceback" lines differs on Windows because the main
process does not raise SystemExit.
Yuya Nishihara <yuya@tcha.org> [Thu, 20 Apr 2017 22:45:45 +0900] rev 32060
test-profile: allow negative time in JSON output (issue5542)
I don't know why it can be a negative number, but that shouldn't be important
here.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Apr 2017 11:10:08 -0700] rev 32059
show: add basic labels to work template
`hg show work` is much more usable if output is colored. This patch
implements coloring via label() in a very hacky way.
In a default Mercurial install, you'll see yellow node labels for all
phases. Branches and bookmarks use the same formatting as the commit
message. So this change doesn't help much in a default install. But if
you have a custom colors defined for these things, output is much more
readable.
The implementation obviously needs some work. But for a minor change
on a feature that isn't convered by BC, this seems like a clear win
for the feature in 4.2.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Apr 2017 10:49:46 -0700] rev 32058
show: rename "underway" to "work"
Durham and I both like this better than "underway." We can add aliases
and bikeshed on the name during the 4.3 cycle, as this whole extension is
highly experimental.
Siddharth Agarwal <sid0@fb.com> [Thu, 20 Apr 2017 17:18:08 -0700] rev 32057
histedit: make check for unresolved conflicts explicit (issue5545)
Previously, we'd rely on the implicit check that `localrepo.commit` did.
The problem is that that check only happened when the working copy was
dirty. With a "clean" working copy but unresolved conflicts we'd get
into a broken state.
To fix that, do what rebase does and check for unresolved conflicts at
the start of histedit --continue.
Kevin Bullock <kbullock@ringworld.org> [Tue, 18 Apr 2017 14:51:30 -0500] rev 32056
Added signature for changeset 616e788321cc
Kevin Bullock <kbullock@ringworld.org> [Tue, 18 Apr 2017 14:51:24 -0500] rev 32055
Added tag 4.2-rc for changeset 616e788321cc
Augie Fackler <augie@google.com> [Tue, 18 Apr 2017 12:24:34 -0400] rev 32054
freeze: merge default into stable for 4.2 code freeze
Augie Fackler <augie@google.com> [Tue, 18 Apr 2017 11:22:42 -0400] rev 32053
Merge stable with security patch.
Augie Fackler <raf@durin42.com> [Tue, 18 Apr 2017 11:13:01 -0400] rev 32052
Added signature for changeset 77eaf9539499
Augie Fackler <raf@durin42.com> [Tue, 18 Apr 2017 11:12:59 -0400] rev 32051
Added tag 4.1.3 for changeset 77eaf9539499
Augie Fackler <augie@google.com> [Wed, 12 Apr 2017 11:23:55 -0700] rev 32050
dispatch: protect against malicious 'hg serve --stdio' invocations (sec)
Some shared-ssh installations assume that 'hg serve --stdio' is a safe
command to run for minimally trusted users. Unfortunately, the messy
implementation of argument parsing here meant that trying to access a
repo named '--debugger' would give the user a pdb prompt, thereby
sidestepping any hoped-for sandboxing. Serving repositories over HTTP(S)
is unaffected.
We're not currently hardening any subcommands other than 'serve'. If
your service exposes other commands to users with arbitrary repository
names, it is imperative that you defend against repository names of
'--debugger' and anything starting with '--config'.
The read-only mode of hg-ssh stopped working because it provided its hook
configuration to "hg serve --stdio" via --config parameter. This is banned for
security reasons now. This patch switches it to directly call ui.setconfig().
If your custom hosting infrastructure relies on passing --config to
"hg serve --stdio", you'll need to find a different way to get that configuration
into Mercurial, either by using ui.setconfig() as hg-ssh does in this patch,
or by placing an hgrc file someplace where Mercurial will read it.
mitrandir@fb.com provided some extra fixes for the dispatch code and
for hg-ssh in places that I overlooked.
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Apr 2017 22:31:17 +0900] rev 32049
progress: retry ferr.flush() and .write() on EINTR (issue5532)
See the inline comment how this could mitigate the issue.
I couldn't reproduce the exact problem on my Linux machine, but there are
at least two people who got EINTR in progress.py, and it seems file_write()
of Python 2 is fundamentally broken [1]. Let's make something in on 4.2.
[1]: https://hg.python.org/cpython/file/v2.7.13/Objects/fileobject.c#l1850
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Apr 2017 22:27:25 +0900] rev 32048
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Feb 2017 19:36:02 +0900] rev 32047
filemerge: optionally strip quotes from merge marker template (BC)
For consistency with the other template options. Quotes are necessary if
you want to preserve leading/trailing whitespace, which would be stripped
by config parser.
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Feb 2017 19:32:39 +0900] rev 32046
commit: optionally strip quotes from commit template (BC)
For consistency with the other template options.
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Feb 2017 19:28:16 +0900] rev 32045
graphlog: optionally strip quotes from graphnode template (BC)
For consistency with the other template options.
Yuya Nishihara <yuya@tcha.org> [Mon, 17 Apr 2017 23:53:19 +0900] rev 32044
dispatch: ignore further SIGPIPE while handling KeyboardInterrupt
I got the following error by running "hg log" and quitting the pager
immediately. Any output here may trigger another SIGPIPE, so only thing
we can do is to swallow the exception and exit with an error status.
Traceback (most recent call last):
File "./hg", line 45, in <module>
mercurial.dispatch.run()
File "mercurial/dispatch.py", line 83, in run
status = (dispatch(req) or 0) & 255
File "mercurial/dispatch.py", line 167, in dispatch
req.ui.warn(_("interrupted!\n"))
File "mercurial/ui.py", line 1224, in warn
self.write_err(*msg, **opts)
File "mercurial/ui.py", line 790, in write_err
self._write_err(*msgs, **opts)
File "mercurial/ui.py", line 798, in _write_err
self.ferr.write(a)
File "mercurial/ui.py", line 129, in _catchterm
raise error.SignalInterrupt
mercurial.error.SignalInterrupt
Perhaps this wasn't visible before de5c9d0e02ea because the original stderr
handle was restored very late.
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Apr 2017 13:04:55 +0900] rev 32043
worker: print traceback for uncaught exception unconditionally
This is what a Python interpreter would do if there were no os._exit().
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Apr 2017 13:27:44 +0900] rev 32042
worker: propagate exit code to main process
Follows up 86cd09bc13ba.
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Apr 2017 13:02:34 +0900] rev 32041
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Otherwise, traceback wouldn't be printed for a known exception occurred in
worker processes.
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Apr 2017 12:58:06 +0900] rev 32040
dispatch: mark callcatch() as a private function
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Apr 2017 10:51:17 +0900] rev 32039
templatefilters: fix crash by string formatting of '{x|splitlines}'
Before, it crashed because mapping['templ'] was missing. As it didn't support
the legacy list template from the beginning, we can simply use hybridlist().
Yuya Nishihara <yuya@tcha.org> [Wed, 05 Apr 2017 21:57:05 +0900] rev 32038
templatekw: factor out showdict() helper
Make it less cryptic for common cases.
Yuya Nishihara <yuya@tcha.org> [Wed, 05 Apr 2017 21:47:34 +0900] rev 32037
templatekw: have showlist() take mapping dict with no **kwargs expansion (API)
See the previous commit for why.
splitlines() does not pass a mapping dict, which would probably mean the
legacy template didn't work from the beginning.
Yuya Nishihara <yuya@tcha.org> [Wed, 05 Apr 2017 21:40:38 +0900] rev 32036
templatekw: change _showlist() to take mapping dict with no **kwargs expansion
There was a risk that a template keyword could conflict with an argument
name (e.g. 'name', 'values', 'plural', etc.) Let's make it less magical.
Yuya Nishihara <yuya@tcha.org> [Wed, 05 Apr 2017 21:32:32 +0900] rev 32035
templatekw: rename 'args' to 'mapping' in showlist()
The name 'args' provides no information. Call it 'mapping' as in templater.py.
Yuya Nishihara <yuya@tcha.org> [Wed, 05 Apr 2017 21:27:44 +0900] rev 32034
templatekw: eliminate unnecessary temporary variable 'names' from _showlist()
Replace 'names' with the optional argument 'plural'.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 17 Apr 2017 20:22:00 +0200] rev 32033
color: update the help with the new default
The default is now "auto" we update the help to match reality.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 12 Apr 2017 16:48:13 +0200] rev 32032
upgrade: register all format variants in a list
Now that all known format variants exists outside of the function, we can gather
them in a lists. This build a single entry point other code can use (current
target: extensions).
The repository upgrade code is updated to simply use entries from this list.
As a side effect this will also allow extensions to register their own format
variants, to do this "properly" we should introduce a "registrar" for this
category of object. However I prefer to keep this series simple, and that will
be adventure for future time.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 12 Apr 2017 16:34:05 +0200] rev 32031
upgrade: move descriptions and selection logic in individual classes
Our goal here is to get top level definition for all the format variants. Having
them defined outside of the function enabled other users of that logic.
They are two keys components of a format variant:
1) the name and various descriptions of its effect,
2) the code that checks if the repo is using this variant and if the config
enables it.
That second items make us pick a class-based approach, since different variants
requires different code (even if in practice, many can reuse the same logic).
Each variants define its own class that is then used like a singleton. The
class-based approach also clarify the definitions part a bit since each are
simple assignment in an indented block.
The 'fromdefault' and 'fromconfig' are respectively replaced by a class
attribute and a method to be called at the one place where "fromconfig"
matters.
Overall, they are many viable approach for this, but this is the one I picked.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 10 Apr 2017 23:34:43 +0200] rev 32030
upgrade: introduce a 'formatvariant' class
The 'deficiency' type has multiple specificities. We create a dedicated class to
host them. More logic will be added incrementally in future changesets.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 17 Apr 2017 13:07:31 +0200] rev 32029
upgrade: implement '__hash__' on 'improvement' class
The pythonomicon request its implementation.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 17 Apr 2017 13:07:22 +0200] rev 32028
upgrade: implement '__ne__' on 'improvement' class
The pythonomicon request its implementation.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Sun, 16 Apr 2017 02:34:08 +0200] rev 32027
color: also enable by default on windows
I've not found anything related to color + windows on the bug tracker. So I'm
suggesting we get bolder and turn it on for windows too in the release
candidate. We can always backout this changeset if we find serious issue on
windows.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Sun, 16 Apr 2017 02:32:51 +0200] rev 32026
color: turn on by default (but for windows)
Color support is all in core for a couple of months. I've browsed the bug tracker
without finding any blocker bug. So I'm moving forward and enable color on by
default before '4.2-rc'. In the worse case, having it on in the release
candidate will help us to find blocker bug and we can turn it off for the final
release.
I remember people talking about issue with Windows during the freeze so I'm
keeping it off by default on that OS.
We could do various cleaning of the color used and the label issued. However
the label are probably already in our backward compatibility envelope since the
color extensions has been around since for ever and I do not think the color
choice themself should be considered BC. So I think we should rather gives color
to all user sooner than later.
A couple of test needs to be updated to avoid having color related control code
spoil the tested output.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Sun, 16 Apr 2017 02:48:06 +0200] rev 32025
pager: stop using the color extension in tests
The feature is in core so let us use the core config knob directly.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 16 Apr 2017 11:55:08 -0700] rev 32024
bundle2: ignore errors seeking a bundle after an exception (issue4784)
Many have seen a "stream ended unexpectedly" error. This message is
raised from changegroup.readexactly() when a read(n) operation fails
to return exactly N bytes.
I believe most occurrences of this error in the wild stem from
the code changed in this patch. Before, if bundle2's part applicator
raised an Exception when processing/applying parts, the exception
handler would attempt to iterate the remaining parts. If I/O
during this iteration failed, it would likely raise the
"stream ended unexpectedly" exception.
The problem with this approach is that if we already encountered
an I/O error iterating the bundle2 data during application, then
any further I/O would almost certainly fail. If the original stream
were closed, changegroup.readexactly() would obtain an empty
string, triggering "stream ended unexpectedly" with "got 0." This is
the error message that users would see. What's worse is that the
original I/O related exception would be lost since a new exception
would be raised. This made debugging the actual I/O failure
effectively impossible.
This patch changes the exception handler for bundle2 application to
ignore errors when seeking the underlying stream. When the underlying
error is I/O related, the seek should fail fast and the original
exception will be re-raised. The output changes in
test-http-bad-server.t demonstrate this.
When the underlying error is not I/O related and the stream can be
seeked, the old behavior is preserved.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 16 Apr 2017 11:12:37 -0700] rev 32023
error: rename RichIOError to PeerTransportError
This is a more descriptive name. RichIOError was introduced just
hours ago, so it doesn't need to be marked as BC.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 16 Apr 2017 11:28:02 -0700] rev 32022
httppeer: don't send empty Vary request header
As part of writing test-http-bad-server.t, I noticed that some
requests include an empty Vary HTTP request header.
The Vary HTTP request header indicates which headers should be taken
into account when determining if a cached response can be used. It also
accepts the special value of "*".
The previous code unconditionally added a Vary header. This could lead
to an empty header value. While I don't believe this violates the HTTP
spec, this is weird and just wastes bytes. So this patch changes
behavior to only send a Vary header when it has a value.
Some low-level wire protocol byte reporting tests changed. In some
cases, the exact point of data termination changed. However, the
behavior being tested - that clients react when the connection is
closed in the middle of an HTTP request line or header - remains
unchanged.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 16 Apr 2017 21:25:16 -0400] rev 32021
badserverext: explicitly flush each log write
No idea why, but without this, there was no content in the error logs that are
`cat`d in the test on Windows.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 16 Apr 2017 21:00:22 -0400] rev 32020
test-http-bad-server: conditionalize error output for Windows
Matt Harbison <matt_harbison@yahoo.com> [Sun, 16 Apr 2017 20:59:14 -0400] rev 32019
test-tag: make hook runnable on Windows
Simply setting the hook to *.sh causes Windows to open a dialog asking how to
open *.sh files.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Sat, 15 Apr 2017 02:54:36 +0200] rev 32018
obsolescence: add test for the "branch replacement" logic during push, case D7
Mercurial checks for the introduction of new heads on push. Evolution comes
into play to detect if existing branches on the server are being replaced by
some of the new one we push.
This changeset adds test for the improved "branch replacement" logic introduce
in an earlier commits. This tests initially lived in the evolve extensions.
Since we now have the code handling this logic in core, it make sense to have
the tests in core too.
See inline documentation for details about the test case added in this
changeset.