Home - Waterfall Grid T-Grid Console Builders Recent Builds Buildslaves Changesources - JSON API - About

Console View

Legend:   Passed Failed Warnings Failed Again Running Exception Offline No data

Augie Fackler
cmdutil: fix status tersing on Python 3

Differential Revision: https://phab.mercurial-scm.org/D1183
Augie Fackler
configitems: make all regular expressions bytes and not native str

Fixes many tests on Python 3.

Differential Revision: https://phab.mercurial-scm.org/D1181
Augie Fackler
hghave: fix clang-format check to use bytes regex

Fixes hghave on Python 3.

Differential Revision: https://phab.mercurial-scm.org/D1182
Augie Fackler
convert: register missed subversion config items

Should fix the build failures on the Solaris builders.

Differential Revision: https://phab.mercurial-scm.org/D1180
Pulkit Goyal
amend: error out if the note is greater than 255bytes

In obsmarker we can't store keys and values of more than 255 bytes in metadata.
If we try to do so, ProgrammingError is raised. The note flag to amend stores
the note in obsmetadata. If a user will try to store a larger note, he will
encounter ProgrammingError which is wrong. We must error out early.

Thanks to Yuya for warning about this.

Differential Revision: https://phab.mercurial-scm.org/D1179
Jun Wu
show: move configitems to core

chgserver.py is also checking the config and will get:

  devel-warn: accessing unregistered config item:
  'commands.show.aliasprefix' at:

if the config is not registered.

Differential Revision: https://phab.mercurial-scm.org/D1178
Jun Wu
chgserver: do not treat HG as sensitive environ when CHGHG is set

When `$CHGHG` is set, `$HG` is ignored by the chg client. Removing it from
chg's sensitive environment list would avoid starting up servers
unnecessarily when `$CHGHG` is the same while `$HG` is different.

Differential Revision: https://phab.mercurial-scm.org/D1177
Gregory Szorc
fsmonitor: warn when fsmonitor could be used

fsmonitor can significantly speed up operations on large working
directories. But fsmonitor isn't enabled by default, so naive users
may not realize there is a potential to make Mercurial faster.

This commit introduces a warning to working directory updates when
fsmonitor could be used.

The following conditions must be met:

* Working directory is previously empty
* New working directory adds >= N files (currently 50,000)
* Running on Linux or MacOS
* fsmonitor not enabled
* Warning not disabled via config override

Because of the empty working directory restriction, most users will
only see this warning during `hg clone` (assuming very few users
actually do an `hg up null`).

The addition of a warning may be considered a BC change. However, clone
has printed warnings before. Until recently, Mercurial printed a warning
with the server's certificate fingerprint when it wasn't explicitly
trusted for example. The warning goes to stderr. So it shouldn't
interfere with scripts parsing meaningful output.

The OS restriction was on the advice of Facebook engineers, who only
feel confident with watchman's stability on the supported platforms.

.. feature::

  Print warning when fsmonitor isn't being used on a large repository

Differential Revision: https://phab.mercurial-scm.org/D894
Gregory Szorc
fsmonitor: declare missing config options

These were added in 4aa57627692a. Attempting to run the test harness
with fsmonitor enabled spews a whole bunch of devel warnings due to
these options not be declared.

Differential Revision: https://phab.mercurial-scm.org/D1176
Saurabh Singh
ui: move request exit handlers to global state

Since the ui objects can be created with the 'load' class method, it
is possible to lose the exit handlers information from the old ui instance. For
example, running 'test-bad-extension.t' leads to this situation where chg
creates a new ui instance which does not copy the exit handlers from the
earlier ui instance. For exit handlers, which are special cases anyways, it
probably makes sense to have a global state of the handlers. This would ensure
that the exit handlers registered once are definitely executed at the end of
the request.

Test Plan:
Ran all the tests without '--chg' option. This also fixes the
'test-bad-extension.t' with the '--chg' option.

Differential Revision: https://phab.mercurial-scm.org/D1166
Matt Harbison
subrepo: implement 'unshare' for Mercurial subrepos

I think there's a slight hole here in that a subrepo could be shared, removed
from .hgsub, and then it's not part of context.substate (so not iterated over).
But the push command has the same hole IIRC, and I think removing a subrepo is
an edge case.

The import hack is a copy/paste of subrepo.subrepo().
Ryan McElroy
merge: additional test cases to show merge-halting behavior

In the previous patches, we allowed the user to specify that
a merge process should be halted when a filemerge fails.

This patch adds tests that show additional places this logic
can be utilized -- via the options to do additional post-filemerge
checks to determine if a file merge was successful.

Differential Revision: https://phab.mercurial-scm.org/D952
Paul Morelle
sparse-read: skip gaps too small to be worth splitting

Splitting at too small gaps might not be worthwhile. With this changeset,
we stop considering splitting on too small gaps. The threshold is configurable.
We arbitrarily pick 256K as a default value because it seems "okay".
Further testing on various repositories and setups will be needed to tune it.

The option name is 'experimental.sparse-read.min-gap-size`, and replaces
`experimental.sparse-read.min-block-size` which is not used any more.
Matt Harbison
share: move the implementation of 'unshare' to the 'hg' module

This will be used to setup unsharing subrepos.  Usually cmdutil is used for
this purpose.  But the implementation needs hg.copystore(), and the hg module
already imports cmdutil.
Denis Laxalde
show: use labelcset() template alias for work (and stack) views

By reusing labelcset() template alias from map-cmdline.default we can now
display obsolescence information in `hg show work/stack`.
Boris Feld
sparse-read: move from a recursive-based approach to a heap-based one

The previous recursive approach was trying to optimise each read slice to have
a good density. It had the tendency to over-optimize smaller slices while
leaving larger hole in others.

The new approach focuses on improving the combined density of all the reads,
instead of the individual slices. It slices at the largest gaps first, as they
reduce the total amount of read data the most efficiently.

Another benefit of this approach is that we iterate over the delta chain only
once, reducing the overhead of slicing long delta chains.

On the repository we use for tests, the new approach shows similar or faster
performance than the current default linear full read.

The repository contains about 450,000 revisions with many concurrent
topological branches. Tests have been run on two versions of the repository:
one built with the current delta constraint, and the other with an unlimited
delta span (using 'experimental.maxdeltachainspan=0')

Below are timings for building 1% of all the revision in the manifest log using
'hg perfrevlogrevisions -m'. Times are given in seconds. They include the new
couple of follow-up changeset in this series.

delta-span  standard    unlimited
linear-read    922s        632s
sparse-read    814s        566s
Pulkit Goyal
rebase: add support to output nodechanges

This patch adds support to rebase to show the changes in node once the rebase is
complete. This will be extremely helpful for automation purposes and editors
such as Nuclide.

The output is a dictionary of predecessor hash as key and a list of successors'
hashes. The successors one is a list as there can be many successors for a single
predecessor in case of split and it will good to have a generic output format.

This patch adds tests for the same. A new file is created for the patch as
existing files related to rebase has their own purpose and there will be more
formatter support coming for rebase in next cycle.

Thanks to Jun for suggesting to use fm.data().

Differential Revision: https://phab.mercurial-scm.org/D1173
Kevin Bullock
phases: pass phase names to hooks instead of internal values
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
configitems: document the choice of using 'match' instead of 'search'
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
configitems: do not directly match generic items

Before this changesets, a literal '.*:foo$' config would match a registered
'.*:foo$' generic. This is wrong since generic should be matched through
regular exception only. This changeset fixes this problem.

Thanks for to Yuya Nishihara for spotting the issue.
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
obsfate: fix obsfate_printer with empty date list

When the list of dates is empty, `min` and `max` would raises a ValueError.
Protect against this case by checking that the date list is not empty.

I didn't add a test because I couldn't find a reproducing test case.
  • python-hglib: tested against default (2.7.10) failed -  stdio
Pulkit Goyal
repoview: add two new filternames to be used for accessing hidden commits

This patch adds two new filternames 'visible-hidden' and 'visible-warnhidden'
which will be used to access hidden commits.
'visible-hidden' will allow access of hidden commits with any warning. This will
be for read only commands.
'visible-warnhidden' will allow acces of hidden commits but will warn for that.
This will be for recoverable write commands.
For unrecoverable write commands, we don't need to have anything new as that's
the current behaviour.

We are using the same computehidden() function as we will be adding the hidden
revisions to pinnedrevs.

The idea to add new filternames is taken from directaccess extension from

Differential Revision: https://phab.mercurial-scm.org/D1141
  • python-hglib: tested against default (2.7.10) failed -  stdio
Pulkit Goyal
localrepo: add a pinnedrevs attribute

We have repoview.pinnedrevs() which take a repository object and returns the
hidden revisions which should not be filtered. To add more hidden revisions to
prevent them from getting obsoleted, we need to wrap the pinnedrevs function.

This patch adds repo.pinnedrevs which can be updated with the revisions which
needs to be prevented from being filtered. After this patch
repoview.pinnedrevs() updates repo.pinnedrevs and returns it.

The functionality to add commits to pinnedrevs without wrapping the function
will be very helpful is adding support for accessing hidden commits.

Differential Revision: https://phab.mercurial-scm.org/D1140
  • python-hglib: tested against default (2.7.10) failed -  stdio
Pulkit Goyal
dispatch: filter the repository depending on func.cmdtype

This patch adds support for filtering the repository on the basis of
func.cmdtype. After this patch, repo.filtername will be used to decide what
level of access the running command can has on hidden commits.

All this logic is behind a config flag `experimental.directacess` which defaults
to False.

Differential Revision: https://phab.mercurial-scm.org/D1142
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: gather allowdivergence under the evolution namespace

Grouping all evolution related-config under the experimental.evolution
namespace would helps the future migration outside [experimental].

Differential Revision: https://phab.mercurial-scm.org/D1155
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: remove stabilization.* aliases

Stabilization config items were never part of a release, remove them now that
we cleaned up the evolution related configuration.

Differential Revision: https://phab.mercurial-scm.org/D1154
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: rename stabilization.track-operation

We want to get rid of stabilization.* configuration, back out to the old
configuration 'evolution.track-operation'.

Differential Revision: https://phab.mercurial-scm.org/D1153
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: rename stabilization.bundle-obsmarker

We want to get rid of stabilization.* configuration, back out to the old
configuration 'evolution.bundle-obsmarker'.

Differential Revision: https://phab.mercurial-scm.org/D1152
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: use 'experimental.evolution.allowunstable'

Extract 'experimental.evolution' = allowunstable as

We keep the new option in the 'experimental.evolution' namespace in order to
stay coherent with other options ('experimental.evolution.bundle-obsmarker'
and 'experimental.evolution.track-operation') ease the renaming as possibly

Differential Revision: https://phab.mercurial-scm.org/D1150
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: use 'experimental.evolution.exchange'

Extract 'experimental.evolution' = exchange as

We keep the new option in the 'experimental.evolution' namespace in order to
stay coherent with other options ('experimental.evolution.bundle-obsmarker'
and 'experimental.evolution.track-operation') ease the renaming as possibly

Differential Revision: https://phab.mercurial-scm.org/D1151
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: use 'experimental.evolution.create-markers'

Extract 'experimental.evolution' = createmarkers as

We keep the new option in the 'experimental.evolution' namespace in order to
stay coherent with other options ('experimental.evolution.bundle-obsmarker'
and 'experimental.evolution.track-operation') ease the renaming as possibly

Differential Revision: https://phab.mercurial-scm.org/D1149
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: replace experimental.stabilization by experimental.evolution

We replace 'experimental.stabilization=all' by 'experimental.evolution=true'
as we will extract individual config in their own config in later patches.

Differential Revision: https://phab.mercurial-scm.org/D1148
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: invert evolution-related configuration aliases

We want to split the evolution-related configuration and back-out the renaming
from evolution.* to stabilization.*.

First invert the configuration and aliases, so next changesets will be

Differential Revision: https://phab.mercurial-scm.org/D1146
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
config: update evolution-related config

Update the evolution helpers function to support both old-style configuration and
new-style configuration:

    experimental.evolution=all is renamed into experimental.evolution=true

    experimental.evolution=createmarkers is renamed into

    experimental.evolution=allowunstable is renamed into

    experimental.evolution=exchange is renamed into

We choose to not rename individual config options; keeping the same names
would easy the transition for users but it's something that could be easily
done in the future.

Differential Revision: https://phab.mercurial-scm.org/D1147
  • python-hglib: tested against default (2.7.10) failed -  stdio
Augie Fackler
parsers: protect some case-folding tables from clang-format

We want a slightly weird format here so that it's easier to read, but
in order to preserve that we need to disable clang-format.

Differential Revision: https://phab.mercurial-scm.org/D1168
  • python-hglib: tested against default (2.7.10) failed -  stdio
Augie Fackler
cext: add /* header */ comment to all PyVarObject_HEAD_INIT() calls

This gives clang-format the right notion about formatting these struct
initializers, therefore allowing us to automatically format several
additional files.

# skip-blame because this is just a content-free comment addition

Differential Revision: https://phab.mercurial-scm.org/D1169
  • python-hglib: tested against default (2.7.10) failed -  stdio
Augie Fackler
makefile: add target to apply clang-format in-place

This makes it easy to reformat files after you finish editing them.

Differential Revision: https://phab.mercurial-scm.org/D1167
  • python-hglib: tested against default (2.7.10) failed -  stdio
Boris Feld
configitems: adds a developer warning when accessing undeclared configuration

Now that all known options are declared, we setup a warning to make sure it will
stay this way.

We disable the warning in two tests checking other behavior with random options.
  • python-hglib: tested against default (2.7.10) failed -  stdio
Augie Fackler
parsers: allow clang-format here

# skip-blame because parsers.c is mechanically rewritten by
clang-format with no semantic change.

Differential Revision: https://phab.mercurial-scm.org/D1170
  • python-hglib: tested against default (2.7.10) failed -  stdio
Denis Laxalde
log: add -L/--line-range option to follow file history by line range

We add an experimental -L/--line-range option to 'hg log' taking file patterns
along with a line range using the (new) FILE,FROMLINE-TOLINE syntax where FILE
may be a pattern (matching exactly one file). The resulting history is similar
to what the "followlines" revset except that, if --patch is specified,
only diff hunks within specified line range are shown.

Basically, this brings the CLI on par with what currently only exists in hgweb
through line selection in "file" and "annotate" views resulting in a file log
with filtered patch to only display followed line range.

The option may be specified multiple times and can be combined with --rev and
regular file patterns to further restrict revisions. Usage of this option
requires --follow; revisions are shown in descending order and renames are
followed. Only the --graph option is currently not supported.

The UI is the result of a consensus from review feedback at:


The implementation spreads between commands.log() and cmdutil module.
In commands.log(), the main loop may now use a "hunksfilter" factory (similar
to "filematcher") that, for a given "rev", produces a filtering function
for diff hunks for a given file context object.
The logic to build revisions from -L/--line-range options lives in
cmdutil.getloglinerangerevs() which produces "revs", "filematcher" and
"hunksfilter" information. Revisions obtained by following files' line range
are filtered if they do not match the revset specified by --rev option. If
regular FILE arguments are passed along with -L options, both filematchers are
combined into a new matcher.

.. feature::

  Add an experimental -L/--line-range FILE,FROMLINE-TOLINE option to 'hg log'
  command to follow the history of files by line range. In combination with
  -p/--patch option, only diff hunks within specified line range will be
  displayed. Feedback, especially on UX aspects, is welcome.