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

Yuya Nishihara
revset: add startdepth limit to ancestors() as internal option

This is necessary to implement the set{gen} (set subscript) operator. For
example, set{-n} will be translated to ancestors(set, depth=n, startdepth=n).

https://www.mercurial-scm.org/wiki/RevsetOperatorPlan#ideas_from_mpm

The UI is undecided and I doubt if the startdepth option would be actually
useful, so the option is hidden for now. 'depth' could be extended to take
min:max range, in which case, integer depth should select a single generation.

  ancestors(set, depth=:y)  # scan up to y-th generation
  ancestors(set, depth=x:)  # skip until (x-1)-th generation
  ancestors(set, depth=x)  # select only x-th generation

Any ideas are welcomed.

  # reverse(ancestors(tip)) using hg repo
  3) 0.075951
  4) 0.076175
Yuya Nishihara
dagop: just compare with the last value to deduplicate input of revancestors()

Since we're using a max heap, the current rev should be a duplicate only
if it equals to the previous one. We don't have to maintain the whole seen
set.

  # reverse(ancestors(tip)) using hg repo
  0) 0.086420
  1) 0.081051
Yuya Nishihara
dagop: compute depth in revancestors() generator

Surprisingly, this makes revset benchmark slightly faster. I don't know why,
but it appears that wrapping -inputrev by tuple is the key. So I decided to
just enable depth computation by default.

  # reverse(ancestors(tip)) using hg repo
  1) 0.081051
  2) 0.075408
Yuya Nishihara
dagop: bulk rename variables in revancestors() generator

- h -> pendingheap: "h" seems too short for variable of long lifetime
- current -> currev: future patches will add current "depth" variable
- parent -> prev or pctx: short lifetime, follows common naming rules
Yuya Nishihara
revset: add depth limit to ancestors()

This is proposed by the issue5374, and will be a building block of set{gen}
(set subscript) operator.

https://www.mercurial-scm.org/wiki/RevsetOperatorPlan#ideas_from_mpm

  # reverse(ancestors(tip)) using hg repo
  2) 0.075408
  3) 0.075951
Yuya Nishihara
dagop: unnest inner generator of revancestors()

This just moves iterate() to module-level function.
Yuya Nishihara
dagop: comment why revancestors() doesn't heapify input revs at once

I wondered why we're doing this complicated stuff without noticing the input
revs may be iterated lazily in descending order. c1f666e27345 showed why.
Gregory Szorc
hgweb: use separate CSS class for navigation links in footer

2d93d2159e30 changed the styling of the "page_nav" CSS class to use
flexbox to separate elements within the <div>. I didn't realize that
this class was used outside of the links in the header. So this
resulted in incorrectly formatting links in the footer of various
pages. Fix that by introducing a new CSS class that preserves the
old CSS behavior.
Pierre-Yves David
configitems: issue a devel warning when overriding default config

If the option is registered, there is already a default value available and
passing a new one is at best redundant. So we issue a deprecation warning in
this case.

(note: there will be case were the default value will not be as simple as what
is currently possible. We'll upgrade the configitems code to handle them in
time.)
Denis Laxalde
gitweb: wrap table rows of annotate view into a <tbody> element

We will use this element to hook data attribute for the followlines.js script
to be plugged in annotate view. Also this gets symmetrical with paper style
which already has a <tbody> element.
Pierre-Yves David
eol: fix 'error' parameter name in the commitctx wrapper

Since its introduction in 9dfee83c93c8, the parameter has always been name
"error". Yet the eol extension have been using 'haserror' as the argument name,
breaking extensions with subclass passing 'error' as a keyword argument.
Denis Laxalde
tests: update regex check for fetch error in test-clonebundles.t

On some systems, e.g. Docker container, the actual error may be:

  error fetching bundle: [Errno 99] Cannot assign requested address

Update the regex to handle this case.
Pierre-Yves David
eol: import 'error' as 'errormod'

We need the 'error' name available to fix another bug, so we rename the imported
module.
Denis Laxalde
hgweb: parameterize the tag name of elements holding followlines selection

While plugging followlines.js into "annotate" view, we'll need to walk a
different DOM structure from that of "filerevision" view. In particular, the
selectable source line element is a <tr> in annotate view (in contrast with a
<span> in filerevision view). So make this tag name a parameter of
followlines.js script by passing its value as a "selectabletag" data attribute
of <pre class="sourcelines"> element.

As <pre class="sourcelines"> tags are getting quite long in templates, rewrite
them on several lines.
Pierre-Yves David
configitems: register 'patch.fuzz' as first example for 'configint'

This exercise the default value handling in 'configint'.
Denis Laxalde
hgweb: plug followlines action in annotate view

Add the followlines.js script and corresponding parameters as data attribute
on <tbody class="sourcelines"> element.
Extend CSS rules so that they also match the DOM structure of annotate view.

As previously, only address paper and gitweb styles (other styles do not have
followlines at all).
Pierre-Yves David
configitems: register 'ui.clonebundleprefers' as example for 'configlist'

This exercise the default value handling in 'configlist'.
Denis Laxalde
gitweb: wrap table rows of annotate view into a <tbody> element

We will use this element to hook data attribute for the followlines.js script
to be plugged in annotate view. Also this gets symmetrical with paper style
which already has a <tbody> element.
Denis Laxalde
tests: update regex check for fetch error in test-clonebundles.t

On some systems, e.g. Docker container, the actual error may be:

  error fetching bundle: [Errno 99] Cannot assign requested address

Update the regex to handle this case.
Denis Laxalde
hgweb: plug followlines action in annotate view

Add the followlines.js script and corresponding parameters as data attribute
on <tbody class="sourcelines"> element.
Extend CSS rules so that they also match the DOM structure of annotate view.

As previously, only address paper and gitweb styles (other styles do not have
followlines at all).
Denis Laxalde
hgweb: parameterize the tag name of elements holding followlines selection

While plugging followlines.js into "annotate" view, we'll need to walk a
different DOM structure from that of "filerevision" view. In particular, the
selectable source line element is a <tr> in annotate view (in contrast with a
<span> in filerevision view). So make this tag name a parameter of
followlines.js script by passing its value as a "selectabletag" data attribute
of <pre class="sourcelines"> element.

As <pre class="sourcelines"> tags are getting quite long in templates, rewrite
them on several lines.
Gregory Szorc
hgweb: use separate CSS class for navigation links in footer

2d93d2159e30 changed the styling of the "page_nav" CSS class to use
flexbox to separate elements within the <div>. I didn't realize that
this class was used outside of the links in the header. So this
resulted in incorrectly formatting links in the footer of various
pages. Fix that by introducing a new CSS class that preserves the
old CSS behavior.
Martin von Zweigbergk
bundle: add config option to include phases

This adds an experimental.bundle-phases config option to include phase
information in bundles. As with the recently added support for
bundling obsmarkers, the support for bundling phases is hidden behind
the config option until we decide to make a bundle format v3 that
includes phases (and obsmarkers and ...).

We could perhaps use the listkeys format for this, but that's
considered obsolete according to Pierre-Yves. Instead, we introduce a
new "phases" bundle part. The new part contains the phase roots that
are internal to the set of bundled revisions. It also contains the
phase for each root of the set of bundled revisions.

For now, phases are only included by "hg bundle", and not by
e.g. strip and rebase.
Martin von Zweigbergk
bundle2: record changegroup data in 'op.records' (API)

When adding support for bundling and unbundling phases, it will be
useful to have the list of added changesets. To do that, we return the
list from changegroup.apply().
Gregory Szorc
hgweb: use separate CSS class for navigation links in footer

2d93d2159e30 changed the styling of the "page_nav" CSS class to use
flexbox to separate elements within the <div>. I didn't realize that
this class was used outside of the links in the header. So this
resulted in incorrectly formatting links in the footer of various
pages. Fix that by introducing a new CSS class that preserves the
old CSS behavior.
Martin von Zweigbergk
strip: include phases in bundle (BC)

Before this patch, unbundling a stripped changeset would make it a
draft (unless the parent was secret). This meant that one would lose
phase information when stripping and unbundling secret changesets. The
same thing was true for public changesets. While stripping public
changesets is generally rare, it's done frequently by e.g. the
narrowhg extension.

We also include the phases in the temporary bundle, just in case
stripping were to fail after that point, so the user can still restore
the repo including phase information. Before this patch, the phases
were left untouched during the bundling and unbundling of the
temporary bundle. Only at the end of the transaction would
phasecache.filterunknown() be called to remove phase roots that were
no longer valid. We now need to call that also after the first
stripping, i.e. before applying the temporary bundle. Otherwise
unbundling the temporary bundle will cause a read of the phase cache
which has stripped changesets in the cache and that fails.

Like with obsmarkers, we unconditionally include the phases in the
bundle when stripping (when using bundle2, such as when generaldelta
is enabled). The reason for doing that for strip but not for bundle is
that strip bundles are not meant to be shared outside the repo, so we
don't care as much about compatibility.
Pierre-Yves David
configitems: get default values from the central registry when available

We do not have any registered config yet, but we are now ready to use them.

For now we ignore this feature for config access with "alternates". On the long
run, we expect alternates to be handled as "aliases" by the config item
themself.
Pierre-Yves David
configitems: add a basic class to hold config item information

The goal of this class is allow explicit declaration for the available config
option. This class will hold the data for one specific config item.

To keep it simple we start centralizing the handling of the default config value.

In the future we can expect more data to be carried on this class. For example:
- documentation,
- status (experimental, advanced, normal, deprecated),
- aliases,
- expected type,
- etc...
Pierre-Yves David
configitems: register 'ui.clonebundleprefers' as example for 'configlist'

This exercise the default value handling in 'configlist'.
Pierre-Yves David
configitems: register 'ui.quiet' as first example

We now have a user and this works fine.
Pierre-Yves David
configitems: register 'patch.fuzz' as first example for 'configint'

This exercise the default value handling in 'configint'.
Pierre-Yves David
configitems: register 'ui.interactive'

That item default value is a bit special (None) so this adds a second proof
that everything is still working fine.
Pierre-Yves David
configitems: introduce a central registry for config option

We now have the appropriate infrastructure to register config items. Usage will
added in the next changeset.
Pierre-Yves David
configitems: issue a devel warning when overriding default config

If the option is registered, there is already a default value available and
passing a new one is at best redundant. So we issue a deprecation warning in
this case.

(note: there will be case were the default value will not be as simple as what
is currently possible. We'll upgrade the configitems code to handle them in
time.)
Jun Wu
run-tests: fix -i when "#testcases" is used in .t test

The "#testcases" feature introduced by 7340465bd788 has issues with "-i"
because "-i" uses "test.name.endswith('.t')" to test if a test is .t or not.

test.name could now be something like "test-foo.t (caseA)" so the above
endswith test is no longer valid.

This patch changes the test to use "self.path" which won't have the issue.
Jun Wu
run-tests: update .t reference output after reading the test

The .t file is both test input and reference output. They should always
match. However we have different code paths to read reference output
(Test.__init__ -> Test.readrefout) and test input (TTest._run) so they might
be inconsistent if somethings change the file between those two functions.

This patch assigns "lines" read by "_run" back to "_refout" if "_refout" is
not None (with --debug, see Test.readrefout) so reference output and test
input will always match.
Jun Wu
run-tests: do not prompt changes (-i) if a race condition is detected

The race condition is like:

  1. run-tests.py reads test-a.t as reference output, content A
  2. run-tests.py runs the test (which could be content B, another race
    condition fixed by the next patch, but assume it's content A here)
  3. something changes test-a.t to content C
  4. run-tests.py compares test output (content D) with content A
  5. with "-i", run-tests.py prompts diff(A, D), while the file has content
    C instead of A at this time

This patch detects the above case and tell the user to rerun the test if
they want to apply test changes.
Jun Wu
patch: rewrite reversehunks (issue5337)

The old reversehunks code accesses "crecord.uihunk._hunk", which is the raw
recordhunk without crecord selection information, therefore "revert -i"
cannot revert individual lines, aka. issue5337.

The patch rewrites related logic to return the right reverse hunk for
revert. Namely,

1. "fromline" and "toline" are correctly swapped [1]
2. crecord.uihunk generates a correct reverse hunk [2]

Besides, reversehunks(hunks) will no longer modify its input "hunks", which
is more expected.

[1]: To explain why "fromline" and "toline" need to be swapped, take the
    following example:

  $ cat > a <<EOF
  > 1
  > 2
  > 3
  > 4
  > EOF

  $ cat > b <<EOF
  > 2
  > 3
  > 5
  > EOF

  $ diff a b
  1d0  <---- "1" is "fromline" and "0" is "toline"
  < 1        and they are swapped if diff from the reversed direction
  4c3            |
  < 4            |
  ---            |
  > 5            |
                  |
  $ diff b a      |
  0a1  <---------+
  > 1
  3c4  <---- also "4c3" gets swapped to "3c4"
  < 5
  ---
  > 4

[2]: This is a bit tricky.

For example, given a file which is empty in working parent but has 3 lines
in working copy, and the user selection:

    select hunk to discard
    [x] +1
    [ ] +2
    [x] +3

The user intent is to drop "1" and "3" in working copy but keep "2", so the
reverse patch would be something like:

        -1
        2 (2 is a "context line")
        -3

We cannot just take all selected lines and swap "-" and "+", which will be:

        -1
        -3

That patch won't apply because of "2". So the correct way is to insert "2"
as a "context line" by inserting it first then deleting it:

        -2
        +2

Therefore, the correct revert patch is:

        -1
        -2
        +2
        -3

It could be reordered to look more like a common diff hunk:

        -1
        -2
        -3
        +2

Note: It's possible to return multiple hunks so there won't be lines like
"-2", "+2". But the current implementation is much simpler.

For deletions, like the working parent has "1\n2\n3\n" and it was changed to
empty in working copy:

    select hunk to discard
    [x] -1
    [ ] -2
    [x] -3

The user intent is to drop the deletion of 1 and 3 (in other words, keep
those lines), but still delete "2".

The reverse patch is meant to be applied to working copy which is empty.
So the patch would be:

        +1
        +3

That is to say, there is no need to special handle the unselected "2" like
the above insertion case.
Pulkit Goyal
py3: use pycompat.bytestr() in place of str()
Pulkit Goyal
py3: replace str with bytes in isinstance()

We were using str because on Python 2, str were bytes but now we have to use
bytes. Otherwise the if conditions fails and we have weird results from commands
on Python 3.