mitchell plamann <mplamann@janestreet.com> [Wed, 20 Feb 2019 14:57:00 -0500] rev 41800
tests: demonstrate failure when cloning from a share via bundle2
Differential Revision: https://phab.mercurial-scm.org/D5984
Navaneeth Suresh <navaneeths1998@gmail.com> [Fri, 22 Feb 2019 00:54:06 +0530] rev 41799
mq: disable qrecord during histedit (issue5981)
qrecord during histedit may lead to deadlock-like situations. qpop will throw
an error on called during histedit even after qrecord-ing those changes. This
patch makes qrecord to abort on histedit.
Differential Revision: https://phab.mercurial-scm.org/D5997
Martin von Zweigbergk <martinvonz@google.com> [Wed, 20 Feb 2019 21:57:39 -0800] rev 41798
committablectx: move status-related methods closer together
The modified()/added()/removed()/deleted() clearly belong very close
to status(). I separated them in committablectx by the new
p[12]copies() methods. This brings the close again. Sorry about the
churn.
Differential Revision: https://phab.mercurial-scm.org/D5996
Augie Fackler <augie@google.com> [Thu, 21 Feb 2019 23:07:54 -0500] rev 41797
tests: add test for hg-test-mode emacs code
This is just coverage for the compilation-mode support, but that was
enough of a hassle that I wanted to have it covered somehow. Test
methodology is _extremely_ cargo-culted from the test for
compilation-mode in emacs, so I still have no idea what I'm doing.
Differential Revision: https://phab.mercurial-scm.org/D6003
Augie Fackler <augie@google.com> [Thu, 21 Feb 2019 23:06:18 -0500] rev 41796
hghave: add check for GNU emacs
Differential Revision: https://phab.mercurial-scm.org/D6002
Augie Fackler <augie@google.com> [Thu, 21 Feb 2019 20:12:39 -0500] rev 41795
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Differential Revision: https://phab.mercurial-scm.org/D6001
Augie Fackler <augie@google.com> [Thu, 21 Feb 2019 19:59:00 -0500] rev 41794
contrib: add compilation-mode linking for our test output
These regular expressions will cause compilation-mode buffers in emacs
to link to source when there are check-code errors in the output of a
.t test.
In the true tradition of this file, I also have no idea what I'm doing.
Differential Revision: https://phab.mercurial-scm.org/D6000
Pulkit Goyal <pulkit@yandex-team.ru> [Fri, 22 Feb 2019 03:52:10 +0530] rev 41793
diff: make sure we output stat even when --git is not passed (issue4037) (BC)
Before this patch, `hg diff --stat` will give an empty output. It will not show
the stat information. I debugged and found that the underlying code does not
return the diff header and due to that, other code paths fails to parse that as
a diff.
I looked into why we don't return diff headers in quiet mode and found the
behavior is from 8f8bb77d560e70bcc95577e4dfa877df18d876ab which does not have
any mention about why it is done. We also show the diff headers in git, so I
think it's fine showing diff header in normal diff in quiet mode.
Differential Revision: https://phab.mercurial-scm.org/D6007
Pulkit Goyal <pulkit@yandex-team.ru> [Sat, 23 Feb 2019 04:50:46 +0530] rev 41792
tests: add test to demonstrate issue4037
`hg diff --stat -q --config diff.git=0` does not output anything whereas it
should print the stat. This is a quiet old bug dating to 2013 and looking at
code I think it exists it since 2005 or when --stat was introduced. The next
patch will fix the bug.
Differential Revision: https://phab.mercurial-scm.org/D6006
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Jan 2019 11:07:46 -0800] rev 41791
grep: reuse getrenamedfn() from scmutil
My motivation is to reduce uses of filectx.renamed(). Reusing
scmutil.getrenamedfn() also means that we get some caching of copy
information per file and revision. I don't think that matters for `hg
grep` (I doubt it speeds up significantly, and I doubt it wastes
significant memory), but I'm not sure.
Differential Revision: https://phab.mercurial-scm.org/D6022
Martin von Zweigbergk <martinvonz@google.com> [Thu, 21 Feb 2019 10:54:29 -0800] rev 41790
templatekw: move getrenamedfn() to scmutil (API)
The function is already used by `hg log` (for following renames, not
for templates), so it seems it does not belong in templatekw.
Differential Revision: https://phab.mercurial-scm.org/D6021
Martin von Zweigbergk <martinvonz@google.com> [Sat, 23 Feb 2019 09:32:07 -0800] rev 41789
mq: get copy source from context object instead of from filelog
This removes dependence on filelog.renamed().
Differential Revision: https://phab.mercurial-scm.org/D6020
Martin von Zweigbergk <martinvonz@google.com> [Sat, 23 Feb 2019 09:30:49 -0800] rev 41788
mq: slightly modernize by using context object
Context objects have existed since mid-2006.
Differential Revision: https://phab.mercurial-scm.org/D6019
Martin von Zweigbergk <martinvonz@google.com> [Sat, 23 Feb 2019 09:15:36 -0800] rev 41787
absorb: migrate to new method for getting copy info
Differential Revision: https://phab.mercurial-scm.org/D6018
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Feb 2019 15:28:04 -0800] rev 41786
fix: migrate to new method for getting copy info
Differential Revision: https://phab.mercurial-scm.org/D6017
Martin von Zweigbergk <martinvonz@google.com> [Sun, 25 Mar 2018 22:07:35 -0700] rev 41785
memfilefromctx: migrate to new method for getting copy info
Differential Revision: https://phab.mercurial-scm.org/D6016
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Dec 2017 22:32:27 -0800] rev 41784
largefiles: migrate to new method for getting copy info
Differential Revision: https://phab.mercurial-scm.org/D6015
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Dec 2017 22:31:24 -0800] rev 41783
commit: migrate to new method for getting copy info
Differential Revision: https://phab.mercurial-scm.org/D6014
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Dec 2017 22:31:00 -0800] rev 41782
tests: migrate to new method for getting copy info
Differential Revision: https://phab.mercurial-scm.org/D6013
Martin von Zweigbergk <martinvonz@google.com> [Mon, 26 Mar 2018 10:41:42 -0700] rev 41781
templatekw: migrate to new method for getting copy info
Differential Revision: https://phab.mercurial-scm.org/D6012
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Dec 2017 22:27:05 -0800] rev 41780
convert: migrate to new method for getting copy source
Differential Revision: https://phab.mercurial-scm.org/D6011
Martin von Zweigbergk <martinvonz@google.com> [Sun, 25 Mar 2018 21:30:31 -0700] rev 41779
context: move equivalent renamed() implementations to superclass
Now that renamed() in workingfilectx and in overlayfilectx are written
in terms of copysource(), they are functionally identical and can be
reused.
Differential Revision: https://phab.mercurial-scm.org/D6010
Martin von Zweigbergk <martinvonz@google.com> [Sun, 25 Mar 2018 21:28:30 -0700] rev 41778
context: rewrite renamed() in terms of new copysource() where appropriate
It's only the filectx for committed files that have the copy source's
nodeid easily available; workingfilectx's and overlayfilectx's
renamed() simply find the nodeid by looking in the changeset's p1's
manifest.
Differential Revision: https://phab.mercurial-scm.org/D6009
Martin von Zweigbergk <martinvonz@google.com> [Sun, 25 Mar 2018 21:32:16 -0700] rev 41777
context: add specialized way of getting copy source file only
I'm working on support for storing copy metadata in the changeset
instead of the filelog. I don't intend to include the file nodeid
there, but most callers don't need that anyway. This patch introduces
a method similar to ctx.renamed(), but the new method returns only the
source filename, not the nodeid. Subsequent patches will move callers
over to this new method.
Differential Revision: https://phab.mercurial-scm.org/D6008
Martin von Zweigbergk <martinvonz@google.com> [Thu, 21 Feb 2019 21:27:42 -0800] rev 41776
changegroup: move non-pruning of non-ellipsis manifests to _prunemanifests()
Google has an extension that overrides _prunemanifests() and removes
nodes that we fetch using another mechanism. That broke when
_prunemanifests() no longer got called. It works again if we move the
check for "not self._ellipses" inside _prunemanifests().
Differential Revision: https://phab.mercurial-scm.org/D6004
Kyle Lippincott <spectral@google.com> [Thu, 21 Feb 2019 19:11:35 -0800] rev 41775
context: use includematcher when checking dir/file conflicts
This is for performance; patternmatcher can't easily interpret its results to
make visitchildrenset be the "optimal" set of paths to inspect, but
includematcher can. Since there aren't any special patterns being used here, I
believe that the two matchers are equivalent.
Differential Revision: https://phab.mercurial-scm.org/D5999
Kyle Lippincott <spectral@google.com> [Thu, 21 Feb 2019 19:11:28 -0800] rev 41774
tests: change the paths slightly in test-rebase-inmemory.t
c/c was a little difficult to understand (and verify that it was the *correct*
'c/' that was being talked about), and it's useful to have multiple directories
to prove that we are able to detect this even if there's no files (just a
subdirectory) in the immediate directory that's conflicting.
Differential Revision: https://phab.mercurial-scm.org/D5998
Georges Racinet <georges.racinet@octobus.net> [Wed, 16 Jan 2019 16:19:26 +0100] rev 41773
rust-cpython: using rustext.dagop.headrevs in revlog
As with the previous oxidation series, revlog plays the role
of the factory, either using its parents function, or passing the
index.
We include below results of revsetbenchmarks.py taken on the
PyPy repository on those of contrib/all-revsets.tx that involve
`heads()`.
In most of the cases, this seems to be either neutral or an improvement.
In the cases where it's actually a bit slower, we suspect that differences
in `heads()` performance is actually burried in variance on the incoming
revset (probably several orders of magnitude slower).
The precheck for filtered revisions of parent changeset has a significative
performance benefit, too.
Result by revset
================
Revision:
0) 0c7b353ce100; rust-cpython: binding for headrevs()
1) Parent of this changeset; changelog: prefilter in headrevs()
2) This changeset
revset #0: heads(commonancestors(last(head(), 2)))
plain min max first last reverse rev..rst rev..ast sort sor..rst sor..ast
0) 0.001379 0.001361 0.001381 0.001410 0.001393 0.001372 0.001414 0.001387 0.001411 0.001429 0.001415
1) 0.001351 0.001373 0.001383 0.001392 0.001401 0.001385 0.001405 0.001406 0.001385 0.001424 0.001399
2) 0.001365 0.001362 0.001375 0.001393 0.001370 0.001365 0.001413 0.001386 0.001377 0.001415 0.001411
revset #1: heads(commonancestors(head()))
plain min max first last reverse rev..rst rev..ast sort sor..rst sor..ast
0) 0.047578 0.048578 0.047764 0.048065 0.047289 0.047305 0.047729 0.047370 0.047611 0.048005 0.047755
1) 0.048072 0.047471 0.048351 0.048193 0.048380 0.047968 0.047683 0.047355 0.048587 0.047044 0.048299
2) 0.047124 0.046699 0.046896 0.047250 0.046920 0.047379 0.046855 0.047753 0.047289 0.047219 0.046991
revset #2: heads(all())
plain min max first last reverse rev..rst rev..ast sort sor..rst sor..ast
0) 0.037654 0.037814 0.037149 0.037457 0.037609 0.037053 0.036825 0.037054 0.037739 0.036816 0.037604
1) 0.021845 58% 0.022172 58% 0.022148 59% 0.022059 58% 0.022261 59% 0.022246 60% 0.021691 58% 0.021967 59% 0.022156 58% 0.021820 59% 0.023141 61%
2) 0.014459 66% 0.014470 65% 0.014420 65% 0.014413 65% 0.014421 64% 0.014492 65% 0.014512 66% 0.014579 66% 0.014500 65% 0.014501 66% 0.014537 62%
revset #3: heads(-10000:-1)
plain min max first last reverse rev..rst rev..ast sort sor..rst sor..ast
0) 0.003696 0.003681 0.003719 0.003746 0.003725 0.003750 0.003692 0.003747 0.003712 0.003754 0.003763
1) 0.002131 57% 0.002142 58% 0.002147 57% 0.002203 58% 0.002143 57% 0.002208 58% 0.002158 58% 0.002182 58% 0.002169 58% 0.002209 58% 0.002201 58%
2) 0.001490 69% 0.001524 71% 0.001515 70% 0.001528 69% 0.001531 71% 0.001520 68% 0.001549 71% 0.001542 70% 0.001560 71% 0.001559 70% 0.001544 70%
revset #4: (-5000:-1000) and heads(-10000:-1)
plain min max first last reverse rev..rst rev..ast sort sor..rst sor..ast
0) 0.003832 0.003816 0.003747 0.003814 0.003749 0.003894 0.003784 0.003796 0.003915 0.003829 0.003795
1) 0.002282 59% 0.002208 57% 0.002220 59% 0.002240 58% 0.002210 58% 0.002276 58% 0.002250 59% 0.002250 59% 0.002311 59% 0.002230 58% 0.002241 59%
2) 0.001658 72% 0.001662 75% 0.001568 70% 0.001599 71% 0.001588 71% 0.001696 74% 0.001615 71% 0.001593 70% 0.001710 73% 0.001622 72% 0.001616 72%
revset #5: heads(matching(tip, "author"))
plain min max first last reverse rev..rst rev..ast sort sor..rst sor..ast
0) 7.826449 7.563260 7.581034 7.688493 7.634001 7.777860 7.768228 8.026097 7.767422 7.565254 7.938643
1) 7.750766 7.562555 7.660426 7.574089 7.492220 7.438582 7.562015 7.530635 93% 7.636343 7.636712 7.645113
2) 7.617941 7.519601 7.584922 7.507653 7.547440 7.524436 7.575291 7.883991 7.792142 7.709622 7.868595
revset #6: heads(matching(tip, "author")) and -10000:-1
plain min max first last reverse rev..rst rev..ast sort sor..rst sor..ast
0) 7.744489 7.728684 7.734065 7.928513 7.875949 7.883727 7.815492 7.791335 7.784793 7.761218 7.815731
1) 7.808956 7.480446 7.618759 7.920270 7.676343 7.803613 7.770210 7.713100 7.584420 7.767335 7.825140
2) 7.519987 7.938748 106% 7.805328 7.694162 7.750129 7.714229 7.603825 7.580734 7.555291 7.524207 7.504580
revset #7: (-10000:-1) and heads(matching(tip, "author"))
plain min max first last reverse rev..rst rev..ast sort sor..rst sor..ast
0) 7.909321 7.694357 7.666021 7.538686 7.771821 7.876217 7.852103 7.812727 7.545919 7.788860 7.764585
1) 7.749232 7.683715 7.968393 7.895257 7.764160 8.314884 105% 7.921697 7.882613 7.867209 7.684707 7.544501
2) 7.824903 7.784605 7.727846 7.566613 7.581994 7.539205 90% 7.555316 7.535572 7.581786 7.901795 7.662832
Georges Racinet <georges.racinet@octobus.net> [Wed, 20 Feb 2019 11:49:06 +0100] rev 41772
changelog: prefilter in headrevs()
In case where headrevs() is called on some revisions, we perform
the check that aren't filtered in advance, and switch revlog to
use its unchecked form.
This allows to work with alternative implementations that don't have knowledge
of the filtering system, such as the Rust one.
Georges Racinet <gracinet@anybox.fr> [Thu, 21 Feb 2019 11:23:10 +0100] rev 41771
tests: fixed test too dependent on actual exception wording
On one of the machines I use to run the tests prior to submission,
the default Python is 2.7.5, with the following wording:
must be encoded string without NULL bytes, not str
This third form (and possible future ones) are motivation to
use a wider catching regexp.
Augie Fackler <augie@google.com> [Sun, 13 Jan 2019 20:27:00 -0500] rev 41770
contrib: enforce wrapping too-long lines with () instead of \
This is the style I prefer, and an anecdotal exploration of styles
recommended in style guides etc. Further, to quote pep8:
> The preferred way of wrapping long lines is by using Python's implied
> line continuation inside parentheses, brackets and braces. Long lines
> can be broken over multiple lines by wrapping expressions in
> parentheses. These should be used in preference to using a backslash
> for line continuation.
So I think this is a virtuous change.
Differential Revision: https://phab.mercurial-scm.org/D5995
Augie Fackler <augie@google.com> [Wed, 20 Feb 2019 18:02:28 -0500] rev 41769
cleanup: prefer nested context managers to \-continuations
I'd prefer Python accept a tuple of context managers, but alas it
isn't meant to be. This will have to suffice.
Differential Revision: https://phab.mercurial-scm.org/D5994
Augie Fackler <augie@google.com> [Wed, 20 Feb 2019 19:28:51 -0500] rev 41768
cleanup: use () to wrap long lines instead of \
This is a little less brittle, and often helps indentation. In a
surprising number of cases the entire cleanup was deleting the \, as
the expression was *already* parenthesized in a workable way.
Differential Revision: https://phab.mercurial-scm.org/D5993
Augie Fackler <augie@google.com> [Sun, 13 Jan 2019 20:13:22 -0500] rev 41767
tests: use () instead of \ to wrap lines
This should auto-format more consistently, and is slightly more
typical Python.
Differential Revision: https://phab.mercurial-scm.org/D5992
Martin von Zweigbergk <martinvonz@google.com> [Wed, 20 Feb 2019 20:49:41 -0800] rev 41766
merge with stable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Feb 2019 15:42:45 -0800] rev 41765
copies: do copy tracing based on ctx.p[12]copies() if configured
This adds an option to do copy tracing in a changeset-optimized
way. If the metadata is stored in filelogs, this is obviously going to
be suboptimal. The point is that it provides a way of transitioning to
changeset-stored metadata.
Some of the tests behave a little differently, but they all seem
resonable to me.
The config option may very well be renamed later when it's clearer
what options we want and how they will behave.
When the test suite is run with --extra-config-opt to use the new copy
tracing, all tests pass, besides test-copies.t (which fails in the
same way as you can see in this patch).
`hg debugpathcopies 4.0 4.8` reports 82 copies. With this option
enabled, the only difference is this:
-mercurial/pure/bdiff.py -> mercurial/cffi/bdiff.py
+setup_bdiff_cffi.py -> mercurial/cffi/bdiff.py
I believe that happened because it was renamed in different ways on
different sides of a merge and the new algorithm arbitrarily prefers
copies that happened on p1. The runtime is about 0.85 seconds with the
old copy tracing and 5.7 seconds with the new copy tracing. That's
kind of slow, but actually better than I had expected.
Differential Revision: https://phab.mercurial-scm.org/D5991
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Jan 2019 13:13:30 -0800] rev 41764
context: introduce p[12]copies() methods and debugp[12]copies commands
As mentioned earlier, I'm working on support for storing copy metadata
in the changeset instead of in the filelog.
In order to transition a repo from storing metadata in filelogs to
storing it in the changeset, I'm going to provide a config option for
reading the metadata from the changeset, but falling back to getting
it from the filelog if it's not in the changeset. In this compatiblity
mode, the changeset-optmized algorithms will be used. We will then
need to convert the filelog copy metadata to look like that provided
by changeset copy metadata. This patch introduces methods that do just
that.
By having these methods here, we can start writing changeset-optimized
algorithms that should work already before we add any support for
storing the metadata in the changesets.
This commit also includes new debugp[12]copies commands and exercises
them in test-copies.t.
Differential Revision: https://phab.mercurial-scm.org/D5990
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Feb 2019 22:46:18 -0800] rev 41763
copies: filter out copies when target is not in destination manifest
When chaining a series of commits that copied a file with a series
that removed the destination file, we would still include the copy in
the result. Similar to the previous patch, I have checked that `hg
status --copies` is not affected by this bug, but I wouldn't be
surprised if some commands are.
Differential Revision: https://phab.mercurial-scm.org/D5989
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Feb 2019 10:45:22 -0800] rev 41762
copies: make _backwardrenames() filter out copies by destination
As shown by the test case, _backwardrenames() doesn't filter by the
matcher. It doesn't show up in `hg status --copies` because that only
prints files changed between the two commits. I wouldn't be surprised
if some other command that replies on pathcopies() was broken before
this patch, but I haven't bothered to check other commands.
Differential Revision: https://phab.mercurial-scm.org/D5988
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Feb 2019 10:31:06 -0800] rev 41761
copies: respect narrowmatcher in "parent -> working dir" case
I don't know when this case happens and we don't seem to have tests
for it, but let's fix it anyway since I happened to notice it.
Differential Revision: https://phab.mercurial-scm.org/D5987
Martin von Zweigbergk <martinvonz@google.com> [Wed, 20 Feb 2019 15:39:01 -0800] rev 41760
tests: add tests of pathcopies()
I'm working on support for storing copy metadata in the changeset
instead of in the filelog. When storing it in the changeset, it will
obviously be efficient to get the copy metadata for all files in a
single changeset, but it will be more expensive to get the copy
metadata all revisions of a single file. Some algorithms will then
need to be optimized differently. The first method I'm going to
rewrite is pathcopies().
This commit adds many tests for pathcopies(), so we can run the tests
with both old and new versions of the code, as well as with metadata
stored in filelog or in changeset (later). They use the
debugpathcopies command I recently added (with no tests when it was
added). They show a few bugs and few cases of slightly weird
behavior. I'll fix the bugs in the next few commits.
Differential Revision: https://phab.mercurial-scm.org/D5986
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Feb 2019 10:39:45 -0800] rev 41759
uncommit: add config option to keep commit by default
We have a Google-internal extension that keeps track of "review units"
(like Phabricator reviews, or Gerrit's Change-Id). This information is
stored outside of the commit. It is updated with rewrites. Every now
and then we get reports from users who are confused because `hg
uncommit` lost track of their review. Keeping the empty commit by
default would reduce this confusion. It may also cause confusion about
the empty commit. This patch adds a config option that lets us easily
test both behaviors on our users.
Differential Revision: https://phab.mercurial-scm.org/D5970
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Feb 2019 15:17:54 -0800] rev 41758
debugpathcopies: sort output so it's deterministic
Differential Revision: https://phab.mercurial-scm.org/D5983
Martin von Zweigbergk <martinvonz@google.com> [Sun, 17 Feb 2019 09:12:30 -0800] rev 41757
subrepo: use root-repo-relative path from `hg files` with ui.relative-paths=no
The fix is to pass in a "subuipathfn" as we do everywhere else.
Differential Revision: https://phab.mercurial-scm.org/D5978
Martin von Zweigbergk <martinvonz@google.com> [Sun, 17 Feb 2019 09:05:28 -0800] rev 41756
subrepo: demonstrate broken `hg files` with ui.relative-paths=no
Differential Revision: https://phab.mercurial-scm.org/D5977
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 18 Feb 2019 03:39:47 +0530] rev 41755
py3: whitelist 5 new passing tests caught by buildbot
Thanks to indygreg and durin42 recent patches.
Differential Revision: https://phab.mercurial-scm.org/D5979
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Feb 2019 10:49:12 -0800] rev 41754
uncommit: inform user if the commit is empty after uncommit
Differential Revision: https://phab.mercurial-scm.org/D5969
Boris Feld <boris.feld@octobus.net> [Thu, 14 Feb 2019 15:35:47 +0100] rev 41753
test: stabilize test-run-tests.t output
We have reached a point where the duration in JSON reports of
`test-run-tests.t` were greater or equal than 10 seconds, which doesn't match
anymore the regex. For example here:
https://ci.octobus.net/blue/organizations/jenkins/MercurialPy2/detail/MercurialPy2/276/pipeline
```
"diff": "", ? (re)
- "end": "\s*[\d\.]{4,5}", ? (re)
+ "end": "10.040",
"result": "skip", ? (re)
```
Instead of accepting more characters, I changed the regex to accept any number
of digits before the `.` then 3 or 4 digits after. This way the regex is more
precise (only one `.` is authorized and we can ensure that the precision
doesn't change).
Differential Revision: https://phab.mercurial-scm.org/D5966
Boris Feld <boris.feld@octobus.net> [Thu, 14 Feb 2019 14:36:16 +0100] rev 41752
test: stabilize test-remotefilelog-bgprefetch.t flaky output
When running the test suite with multiple processes, we often get flaky
outputs, like here: https://ci.octobus.net/job/MercurialPy2/274/console
```
- $TESTTMP/hgcache/master/packs/8f1443d44e57fec96f72fb2412e01d2818767ef2.histidx
- $TESTTMP/hgcache/master/packs/8f1443d44e57fec96f72fb2412e01d2818767ef2.histpack
- $TESTTMP/hgcache/master/packs/f4d50848e0b465e9bfd2875f213044c06cfd7407.dataidx
- $TESTTMP/hgcache/master/packs/f4d50848e0b465e9bfd2875f213044c06cfd7407.datapack
+ $TESTTMP/hgcache/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0
+ $TESTTMP/hgcache/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/ef95c5376f34698742fe34f315fd82136f8f68c0
+ $TESTTMP/hgcache/master/39/5df8f7c51f007019cb30201c49e884b46b92fa/69a1b67522704ec122181c0890bd16e9d3e7516a
+ $TESTTMP/hgcache/master/95/cb0bfd2977c761298d9624e4b4d4c72a39974a/076f5e2225b3ff0400b98c92aa6cdf403ee24cca
+ $TESTTMP/hgcache/master/af/f024fe4ab0fece4091de044c58c9ae4233383a/bb6ccd5dceaa5e9dc220e0dad65e051b94f69a2c
```
Add some sleeps after `debugwaitonrepack` calls as it seems it needs some
extra time to cleanup.
Differential Revision: https://phab.mercurial-scm.org/D5960
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Feb 2019 21:55:05 -0800] rev 41751
merge with stable
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Feb 2019 15:49:17 -0500] rev 41750
color: change color of grep.rev label (BC)
GNU grep uses green for line numbers as we do, but I sometimes get a
bit confused when I do `hg grep --diff -n` and get both line numbers
and revisions and don't know which one is which.
A different colour can help.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Feb 2019 15:43:22 -0500] rev 41749
color: give colours to the grep.inserted and grep.deleted labels
I find the "bold" makes it stand out a bit more when the green is next
to the line number.
Note that these labels are applied before the grep.change label, which
is now disabled. To get the old colour, users can restore
[color]
grep.change = green dim
to their hgrc.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Feb 2019 15:24:04 -0500] rev 41748
grep: give different labels to + and - symbols
I find it more useful to give different colours to plus and minus, but
it's difficult to do so if the default output uses the same label for
both. The following augments the names of columns with some extra
labels, akin to the diff.inserted and diff.deleted labels for the diff
command.
This is done by adding an extra label field to the columns tuples.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 18 Feb 2019 00:27:25 +0900] rev 41747
tests: bulk changes to avoid whitespace errors of check-code.py
This is a part of preparation to apply checking with check-code.py on
code fragments embedded in *.t test scripts.
This revision avoids "whitespace" errors of check-code.py below:
- missing whitespace after ","
- missing whitespace in expression
- no whitespace around "=" for named parameters
- wrong whitespace around "="
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 18 Feb 2019 00:27:25 +0900] rev 41746
tests: replace "naked except clause" to avoid check-code.py error
This is a part of preparation to apply checking with check-code.py on
code fragments embedded in *.t test scripts.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 18 Feb 2019 00:27:25 +0900] rev 41745
tests: bulk changes to avoid "omit superfluous pass" check-code.py error
This is a part of preparation to apply checking with check-code.py on
code fragments embedded in *.t test scripts.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 18 Feb 2019 00:27:25 +0900] rev 41744
tests: replace imported module to avoid check-code.py error
This is a part of preparation to apply checking with check-code.py on
code fragments embedded in *.t test scripts.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 18 Feb 2019 00:27:25 +0900] rev 41743
tests: bulk change to avoid "unneeded trailing ',' ..." error of check-code.py
This is a part of preparation to apply checking with check-code.py on
code fragments embedded in *.t test scripts.
"trailing ','" at the end of command option list in the code fragment
of test-bundle2-format.t is still left as it is, in order to follow
the style of command definitions in Mercurial core.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 18 Feb 2019 00:27:25 +0900] rev 41742
tests: define class in modern style to avoid check-code.py error
This is a part of preparation to apply checking with check-code.py on
code fragments embedded in *.t test scripts.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 18 Feb 2019 00:27:25 +0900] rev 41741
tests: use NO_CHECK_EOF as heredoc limit mark to omit checking code fragments
This is a part of preparation to apply checking with check-code.py on
code fragments embedded in *.t test scripts.
"primes.py" embedded in test-highlight.t causes an error of
check-commit.py below:
don't use .next(), use next(...)
But changing embedded primes.py is painful, because it is committed in
test script, and affects hash IDs. On the other hand, primes.py itself
is never executed in test script.
Therefore, this patch uses NO_CHECK_EOF as heredoc limit mark in order
to omit any checking on this code fragments.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 16 Feb 2019 22:03:58 -0500] rev 41740
tests: conditionalize msys path mangling in test-bundle.t
This broke in 252cc56c9ff6 when the variables were printed one per line. The
only reason I can think of is that MSYS knew the former string couldn't be a
list of paths, but thinks this form is.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 16 Feb 2019 21:49:55 -0500] rev 41739
tests: glob over quoting differences in test-blackbox.t for Windows
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Feb 2019 14:56:07 -0500] rev 41738
chistedit: ensure a locale is set
My paternal surname was showing incorrectly without this fix.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Mon, 18 Feb 2019 23:43:40 -0500] rev 41737
templatekw: make negrev return empty for wdir() and nullrev
I considered just returning the same output that {rev} returns here,
but {rev} also returns essentially gibberish: either an INT_MAX-kind
of variable for wdir() or -1 for null. Since these are numbers that
are intended to be used for calculations, and since the numbers for
wdir() and -1 are not really very helpful for calculation (and worse,
when used as a revision number -1 is equal to unhidden tip), I figured
the most reasonable thing to do here is to just return nothing for
negrev.
This could potentially break scripts that are expecting to parse a
nonempty integer out of a {negrev}, but that seems like a very remote
concern at this juncture.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Mon, 18 Feb 2019 18:44:21 -0500] rev 41736
test-sqlitestore: run sqlite3 with no init file
These tests were failing for me because I have a ~/.sqliterc that
alters the default output. Tests should ignore any init file.
Sushil khanchi <sushilkhanchi97@gmail.com> [Thu, 14 Feb 2019 18:28:27 +0530] rev 41735
copies: return True instead of filename as it is expected to return boolean
As the function documentation says this function should True if we hit
a match and False otherwise. And I see that we are not using that returned
filename anywhere.
Differential Revision: https://phab.mercurial-scm.org/D5964
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 11 Feb 2019 19:41:37 +0300] rev 41734
narrow: fix command name in error messsage
Differential Revision: https://phab.mercurial-scm.org/D5982
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Feb 2019 14:43:31 -0500] rev 41733
templatekw: add a {negrev} keyword
Revision numbers are getting much maligned for two reasons: they are
too long in large repos and users get confused by their local-only
nature. It just occurred to me that negative revision numbers avoid
both of those problems. Since negative revision numbers change
whenever the repo changes, it's much more obvious that they are a
local-only convenience. Additionally, for the recent commits that we
usually care about the most, negative revision numbers are always near
zero.
This commit adds a negrev templatekw to more easily expose negative
revision numbers. It's not easy to reliably produce this output with
existing keywords due to hidden commits while at the same time
ensuring good performance.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 17 Feb 2019 22:39:12 -0500] rev 41732
tests: correct the remaining fallout from recent path style changes on Windows
Per @martinvonz, `ui.slash` set by the test runner is now capable of playing a
more active role.[1] I verified that both of these work by setting `ui.slash`
to False, but these changes seem cleaner. The problem with check-perf-code.py
was that the proper imports were not being whitelisted due to '\' vs '/'.
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2019-February/128701.html
rdamazio@google.com [Wed, 13 Feb 2019 18:34:08 -0800] rev 41731
templates: adding a config() function for template customization
This allows templates to be written such that users can customize them easily,
or that they can be customized based on other configuration of the system. For
enterprise deployments, we often have complex template aliases, and right now
the only way individual users can customize those is by replacing the whole
template alias (which means they won't get company-wide updates to it anymore,
plus most users don't want to have to get a complex template right).
With this change, they can just set a config option which feeds into our
templates for common changes (e.g. whether to limit commit descriptions to the
width of their terminal or not).
To work around the issue of having to register the config options, I declared
a dedicated section [templateconfig] for these options to be dynamically
declared. They can still reference any other config option that's registered
elsewhere.
I only did string, bool and int at this time - list and date would add other
complications with parsing the default so I'll leave that as an exercise to
the reader :)
Differential Revision: https://phab.mercurial-scm.org/D5959
Pulkit Goyal <pulkit@yandex-team.ru> [Thu, 31 Jan 2019 20:11:16 +0300] rev 41730
changegroup: don't try to prune manifest nodes if not ellipses
In non-ellipses case, the number of manifest nodes can be very big, and finding
whether one of them can be pruned or not is very costly. For each node, we try
to find the rev and the linkrev, which is expensive.
Sending bit more manifest nodes seems better and much faster here. On our
internal repository, this saves around 5 seconds on `hg tracked --addinclude
<some_path>` on a narrow repo with ellipses disabled.
Differential Revision: https://phab.mercurial-scm.org/D5782
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 11 Feb 2019 16:34:48 +0300] rev 41729
branchmap: improve doc about BranchMapCache class
It was confusing that we are having two different branchcache and
BranchMapCache classes. The doc in BranchMapCache class was not much helpful
to understand the difference. This patch improves the doc there.
Differential Revision: https://phab.mercurial-scm.org/D5933
Georges Racinet <georges.racinet@octobus.net> [Mon, 04 Feb 2019 19:46:57 +0100] rev 41728
rust: itering less on MissingAncestors.bases for max()
Instead of iterating on the whole `self.bases` each time to find
its max, we keep the latter in a separate member attribute and
keep it up to date in `add_bases()`
On a perfdiscovery done on PyPy, with repos prepared with
`contrib/discovery-helper.sh 50 100`, this gives a slight
improvement (around 0.5% on wall time, but 10% on CPU)
before:
! wall 0.172801 comb 0.180000 user 0.180000 sys 0.000000 (median of 541)
after:
! wall 0.171798 comb 0.160000 user 0.160000 sys 0.000000 (median of 551)
(perf command run time upped because of bigger variability during this test).
Differential Revision: https://phab.mercurial-scm.org/D5945
Georges Racinet <georges.racinet@octobus.net> [Tue, 05 Feb 2019 10:28:32 +0100] rev 41727
rust: stop putting NULL_REVISION in MissingAncestors.bases
As noted in initial review of MissingAncestors, adding
NULL_REVISION in constructor in case the given `bases` is
empty wasn't really useful, yet it's been kept for identity
with the Python implementation
Differential Revision: https://phab.mercurial-scm.org/D5944
Georges Racinet <georges.racinet@octobus.net> [Mon, 04 Feb 2019 12:04:59 +0100] rev 41726
rust: less set lookups in MissingAncestors
using the return values of HashSet::remove(), we can factor
pairs of `contains()/remove()` into a single `remove()`.
On a perfdiscovery run done on the PyPy repository, prepared
with contrib/discovery-helper.sh 50 100, I do get a modest improvement
with this (mean of medians of three runs is better by 2%)
Sample readings, before this change:
! wall 0.175609 comb 0.180000 user 0.180000 sys 0.000000 (median of 58)
With this change:
! wall 0.171662 comb 0.180000 user 0.170000 sys 0.010000 (median of 60)
Differential Revision: https://phab.mercurial-scm.org/D5943
Georges Racinet <georges.racinet@octobus.net> [Mon, 04 Feb 2019 11:39:28 +0100] rev 41725
rust: less set lookups in AncestorsIterator
This uses the boolean return of `HashSet::insert()` to factor
pairs of contains()/insert() into a single insert()
On the mozilla-central repository (450k changesets), I get about a bit more
than 10% better medians in perfancestors (taking the mean of three runs)
Best run for parent changeset:
! wall 0.106474 comb 0.110000 user 0.110000 sys 0.000000 (median of 93)
Best run for this changeset:
! wall 0.093191 comb 0.090000 user 0.090000 sys 0.000000 (median of 100)
Differential Revision: https://phab.mercurial-scm.org/D5942
Pulkit Goyal <pulkit@yandex-team.ru> [Fri, 15 Feb 2019 17:36:57 +0300] rev 41724
obsutil: don't assume leftctx and rightctx repo as same
Backed out changeset 520514af2d93.
hgsubversion can pass leftctx and rightctx which are instances of two different
repositories. This was making tests fail on hgsubversion with 4.9.
The two different instances are:
(Pdb) p rightctx.repo()
<filteredrepo:served <hgsubversion.svnrepo.svnlocalrepo object at 0x7fe29d296d10>>
(Pdb) p leftctx.repo()
<filteredrepo:visible <hgsubversion.svnrepo.svnlocalrepo object at 0x7fe29d494590>>
Differential Revision: https://phab.mercurial-scm.org/D5968
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:46:30 -0800] rev 41723
tests: add more wildcards to test-extdiff.t
The diff tool (which is `echo`) runs in the background and output
order can therefore be non-deterministic. We need to glob over
the file names to account for this.
Differential Revision: https://phab.mercurial-scm.org/D5976
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:22:01 -0800] rev 41722
url: don't pass strict argument on Python 3
The argument was removed in Python 3.4.
Differential Revision: https://phab.mercurial-scm.org/D5975
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:16:07 -0800] rev 41721
url: always use str for proxy configuration
Previously, proxies didn't work on Python 3 for various reasons.
First, the keys to the "proxies" dict are fed into a
`setattr(self, "%s_open", ...)` call and passing bytestrings
results in setting an oddly named attribute due to the b''
in %s formatting. This resulted in "http_open" and "https_open"
not being properly overridden and proxies not being used.
Second, the standard library was expecting proxy URLs to be
str. And various operations (including our custom code in
url.py) would fail to account for the str/bytes mismatch.
This commit normalizes everything to str and adjusts our
proxy code in url.py to account for the presence of str
on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D5952
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 12 Feb 2019 14:29:56 -0800] rev 41720
py3: port tinyproxy.py to work with Python 3
There were various str/bytes mismatches in the code. This caused
the proxy server to misbehave at run-time. The manifestation
was typically premature socket disconnect from the perspective
of the client.
Differential Revision: https://phab.mercurial-scm.org/D5951
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 12 Feb 2019 12:13:56 -0800] rev 41719
url: always access req._tunnel_host
The getattr() was there to handle Python versions before 2.6, which
lacked this attribute.
We /might/ be able to further delete some code here. However, the
behavior here is extremely hard to follow because large parts of
this code duplicate code from the Python standard library and it
is difficult to understand what is actually needed.
Differential Revision: https://phab.mercurial-scm.org/D5950
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:07:07 -0800] rev 41718
tests: double escape \ in test-import-eol.t and test-mq-eol.t
The shell eats the \\.
Differential Revision: https://phab.mercurial-scm.org/D5974
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:05:01 -0800] rev 41717
tests: use raw string in test-impexp-branch.t
On first glance, the escaping of \s seems correct. However,
the shell eats the escape and we're left with '\s` in the
written file. Let's use a raw string so we don't have to
double escape.
Differential Revision: https://phab.mercurial-scm.org/D5973
Julien Cristau <jcristau@mozilla.com> [Mon, 11 Feb 2019 16:27:20 +0100] rev 41716
phabricator: make user searches case-insensitive
User names in conduit are case insensitive, but when looking for "FOO"
it would return "foo" instead and we'd think the user didn't exist. So
lower case both the query and the response when comparing them.
Differential Revision: https://phab.mercurial-scm.org/D5934
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 11:31:17 -0800] rev 41715
exchange: raise error.Abort instead of ValueError
Raising ValueError results in an uncaught exception and a traceback
being printed. In the context of servers, it can result in an HTTP
500 and an exception being logged in the error log.
I don't think this is proper behavior.
The bundle2 code paths have a mechanism for translating an
error.Abort into an error message reported to the clients. I
think we should use that instead.
This commit replaces some ValueError with Abort so that
servers can error more gracefully.
Differential Revision: https://phab.mercurial-scm.org/D5972
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 11:42:54 -0800] rev 41714
tests: remove -q from test-lfs-serve.t
This will make it easier to observe a behavior change in the
next commit.
Differential Revision: https://phab.mercurial-scm.org/D5971
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Wed, 13 Feb 2019 16:58:24 -0500] rev 41713
chistedit: use magenta for current line as in crecord (issue6071)
It was inconsistent in the UI to have different way to show the
current line.
Akshit Jain <Akshjain.jain74@gmail.com> [Thu, 14 Feb 2019 20:57:26 +0530] rev 41712
chistedit: improve proper username in histedit curses interface
in changeset section (issue6072)
Differential Revision: https://phab.mercurial-scm.org/D5967
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Thu, 14 Feb 2019 10:41:47 -0500] rev 41711
crecord: remove obsolete version check
An internal function shouldn't be checking compatibility with
Mercurial versions.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Wed, 13 Feb 2019 16:02:44 -0500] rev 41710
histedit: remove "chistedit" mention from interface
"chisted" is internal jargon. The end user should not need to be aware
that it's different from histedit.
Navaneeth Suresh <navaneeths1998@gmail.com> [Wed, 13 Feb 2019 18:17:42 +0530] rev 41709
revset: improve documentation on expectsize()
This is a follow-up patch to D5813. It improves the documentation of
`expectsize(set, size)`.
Differential Revision: https://phab.mercurial-scm.org/D5953
Martin von Zweigbergk <martinvonz@google.com> [Wed, 13 Feb 2019 12:09:36 -0800] rev 41708
scmutil: fix a comment that doesn't match the code
Differential Revision: https://phab.mercurial-scm.org/D5956
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 14 Feb 2019 13:16:36 -0800] rev 41707
remotefilelog: remove strkwargs()
The previous commit activated previously unused code paths on
Python 3 and revealed that we were calling strkwargs() on a dict
that already had str keys. The only caller of _forceprefetch()
is _adjustlinknode() a few lines up and the static commonlogkwargs
dict features str keys.
Differential Revision: https://phab.mercurial-scm.org/D5958
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 13 Feb 2019 16:31:20 -0800] rev 41706
remotefilelog: use raw strings when looking for variable names
Keys in self.__dict__ and vars() are always str. So we need to use
raw strings to ensure lookups work on Python 3.
# skip-blame just r'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D5957
Georges Racinet <georges.racinet@octobus.net> [Thu, 10 Jan 2019 18:25:18 +0100] rev 41705
rust-cpython: binding for headrevs()
This uses the core `dagops::retain_heads` to give a Rust implementation
to `mercurial.dagop.headrevs`.
Testing happens for now from `test-rust-ancestors.py`
(for quick and minimal change), but it'd made more sense to put the binary
index data elsewhere and to create a new test python module
Georges Racinet <georges.racinet@octobus.net> [Wed, 16 Jan 2019 16:05:27 +0100] rev 41704
rust-cpython: moved py_set() utility to conversion module
We're still hoping to get rid of it eventually, but we're going
to need it from outside the `ancestors` module before that.
Georges Racinet <gracinet@anybox.fr> [Sun, 02 Dec 2018 16:19:22 +0100] rev 41703
rust: translated random test of missingancestors
This is a Rust implementation of the random
DAG generator and related incrementalmissingancestors
tests against a naive brute force implementation.
It is provided as an integration test, so that it
won't run by default if any unit test fails.
In case of a failed example, all needed information
for reproduction is included in the panic message,
(this is how
`test_remove_ancestors_from_case1()` has been generated),
as well as the random seed.
The whole test is rerunnable by passing the random seed
in the TEST_RANDOM_SEED environment variable.
The other parameters (numbers of iterations) can be passed
in the TEST_MISSING_ANCESTORS environment variable.
An alternative would have been to expose to Python
MissingAncestors<VecGraphs> but that would have meant
pollution of the release build used from Python,
whereas we do it in this changeset within the tests submodule
Differential Revision: https://phab.mercurial-scm.org/D5417
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Feb 2019 13:46:38 -0800] rev 41702
debugpathcopies: fix typo in synopsis
Differential Revision: https://phab.mercurial-scm.org/D5949
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Feb 2019 13:42:42 -0800] rev 41701
debugrename: don't require at least one path
I don't see a reason that it needs to require a path. Most commands
match everything when no paths are given, but here you have to do
something like `hg debugrename -r . .` (from the repo root) to match
everything.
Differential Revision: https://phab.mercurial-scm.org/D5948
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 12 Feb 2019 11:27:27 -0800] rev 41700
revlog: use iterbytestr()
Otherwise we iterate over integers in Python 3 and the
character compare fails.
Differential Revision: https://phab.mercurial-scm.org/D5947
Martin von Zweigbergk <martinvonz@google.com> [Sun, 10 Feb 2019 22:41:51 -0800] rev 41699
commit: respect ui.relative-paths
The command usually doesn't print any paths, but there are some
warnings and verbose messages that includes paths.
Differential Revision: https://phab.mercurial-scm.org/D5939
Martin von Zweigbergk <martinvonz@google.com> [Sun, 10 Feb 2019 22:21:45 -0800] rev 41698
resolve: slightly simplify join expression by joining with empty strings
Differential Revision: https://phab.mercurial-scm.org/D5938
Martin von Zweigbergk <martinvonz@google.com> [Sun, 10 Feb 2019 22:18:19 -0800] rev 41697
resolve: respect ui.relative-paths also for warning messages
I guess this should have been part of 72a9aacff645 (resolve: respect
ui.relative-paths, 2019-01-29).
Differential Revision: https://phab.mercurial-scm.org/D5937
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Feb 2019 09:40:24 -0800] rev 41696
addremove: respect ui.relative-paths
I previously changed these code paths while trying to not change any
behavior to avoid inconsistencies between them in the intermediate
commits. They're now all ready to be switched over to respecting
ui.relative-paths.
Differential Revision: https://phab.mercurial-scm.org/D5936
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Feb 2019 09:12:23 -0800] rev 41695
windows: use util.localpath for repo-relative paths in getuipathfn()
Now that we have a single place that translates from internal path
representation (slash-separated) to UI representation
(i.e. scmutil.getuipathfn()), let's switch that over to using
util.localpath for absolute paths. I don't expect any test impact on
Windows because we still respect ui.slash, which is set by the test
runner.
As Yuya pointed out, a997163e7fae (status: extract helper for
producing relative or absolute path for UI, 2019-01-29) accidentally
changed to slash-separated paths on Windows because it used used to
use repo.pathto(f, cwd='') (which calls util.localpath()) and after
that patch it just prints the filename without any
transformation. This patch should fix that regression.
Differential Revision: https://phab.mercurial-scm.org/D5935
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 12 Feb 2019 17:10:31 -0500] rev 41694
walkchangerevs: obey allfiles parameter when taking the slow path
When walkchangerevs sees that there's a pattern, it hits the slow
path. The slow path in turn reverts to the old dumb grep behaviour of
only looking at files changed at each revision. Therefore, a command
such as
hg grep -l --all-files '.*' 'glob:**'
would show you all the nonempty files touched by the current revision.
This modifies that behaviour to look at the manifest at each revision
instead of the changed files in case that --all-files was requested.
Boris Feld <boris.feld@octobus.net> [Fri, 08 Feb 2019 18:26:35 +0100] rev 41693
test: stabilize test-wireproto-exchangev2.t flaky output
When running the test suite with multiple processes, we often get flaky
outputs, like here: https://ci.octobus.net/job/MercurialPy2/267/console
```
- received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
add changeset cd2534766bec
add changeset e96ae20f4188
add changeset caa2a465451d
+ received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
```
Instead of simply sorting the clone and pull output, I saved the output in a
separate file and checked the `received frame` messages on one side and then
the rest of the output on the other side. This way we conserve the order of
messages as it seems important.
Differential Revision: https://phab.mercurial-scm.org/D5897
Kyle Lippincott <spectral@google.com> [Mon, 04 Feb 2019 14:29:03 -0800] rev 41692
zsh: fix `hg resolve` completion when in a subdirectory (issue6067)
Differential Revision: https://phab.mercurial-scm.org/D5836
Navaneeth Suresh <navaneeths1998@gmail.com> [Sun, 03 Feb 2019 19:10:39 +0530] rev 41691
revset: add expectsize to check the size of a set
`expectsize(<set>, <int>)` revset fails if `<set>` is not exactly `<int>`
elements. `expectsize(<set>, <min>:<max>)` revset fails if `<set>` is not
exactly between `<min>` and `<max>` inclusive.
This then allows an alias for `hg next` to be `update -r one(children(.))`
with sane failure behavior, and also makes some other scripting tasks
a little less difficult.
(Summary from WeShouldDoThat)
Differential Revision: https://phab.mercurial-scm.org/D5813
Augie Fackler <augie@google.com> [Mon, 11 Feb 2019 11:18:37 -0500] rev 41690
merge with stable
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 11 Feb 2019 15:41:08 +0300] rev 41689
branchmap: decode a label only once
This moves decoding of a label out of for loop. Minor speed up expected in cases
when one branch has multiple heads. For example: someone using bookmarks as
branches and hence ending up with multiple heads on default branch.
Differential Revision: https://phab.mercurial-scm.org/D5932
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 11 Feb 2019 15:34:35 +0300] rev 41688
branchmap: move __init__ up in branchcache class
Making __init__ the first function defined helps understanding the class much
better.
Differential Revision: https://phab.mercurial-scm.org/D5931
Martin von Zweigbergk <martinvonz@google.com> [Sat, 09 Feb 2019 22:50:53 -0800] rev 41687
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Differential Revision: https://phab.mercurial-scm.org/D5930
Martin von Zweigbergk <martinvonz@google.com> [Sun, 10 Feb 2019 14:35:36 -0800] rev 41686
match: delete unused root and cwd arguments to constructors (API)
Most matchers no longer need the root and cwd
arguments. patternmatcher and includematcher still need the root
argument for subincludes.
Differential Revision: https://phab.mercurial-scm.org/D5929
Martin von Zweigbergk <martinvonz@google.com> [Sun, 10 Feb 2019 21:33:21 -0800] rev 41685
dirstate: call and cache os.getcwd() in constructor
I'm about to make scmutil.matchfiles() not pass the root and cwd paths
to match.exact(), since they no longer have any effect. That turned
out to have the surprising effect of making some tests
(test-rebase-scenario-global.t and test-removeemptydirs.t) crash when
the working directory was removed. The problem was that my patch
removed the call to repo.getcwd(), which caused the current working
directory to not be cached in the dirstate as early as it was
before. This patch fixes that by caching the current working directory
in the dirstate constructor.
Differential Revision: https://phab.mercurial-scm.org/D5928
Martin von Zweigbergk <martinvonz@google.com> [Sun, 10 Feb 2019 14:16:37 -0800] rev 41684
cleanup: prefer matchmod.{always,never}() over accessing matchers directly
We have these factory methods so we should use them.
Differential Revision: https://phab.mercurial-scm.org/D5927
Martin von Zweigbergk <martinvonz@google.com> [Sun, 10 Feb 2019 14:16:33 -0800] rev 41683
match: allow passing in badfn to always() and never()
So that no callers are required to access the matchers themselves.
Differential Revision: https://phab.mercurial-scm.org/D5926
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 10 Feb 2019 14:04:08 -0800] rev 41682
py3: use raw strings and %d for formatting
Before the string compares on Python 3 failed because we were
comparing bytes to str. Using raw strings ensures we are
always comparing str.
While we're here, also use %d to format integers.
Differential Revision: https://phab.mercurial-scm.org/D5925
Martin von Zweigbergk <martinvonz@google.com> [Thu, 31 Jan 2019 15:35:51 -0800] rev 41681
diff: make --stat respect ui.relative-paths
It would have been easy to make all diffs respect ui.relative-paths,
but we don't want that since it makes the diff invalid. Perhaps it
makes sense to do that with --noprefix since the point of that is to
make paths that are easy to copy&paste, and the diff is already
invalid anyway. But this patch just makes the --stat version respect
the config option. The --stat view is not even close to a valid diff,
so I think it makes sense to show the paths in more human-friendly
form.
Differential Revision: https://phab.mercurial-scm.org/D5896