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