Matt Harbison <matt_harbison@yahoo.com> [Wed, 18 Mar 2020 14:53:53 -0400] rev 44648
phabricator: extract logic to print the status when posting a commit
This will make it easier to list each commit when folding. That makes the
output less confusing because it matches the output of `--confirm` and the
revisions listed on the command line.
Differential Revision: https://phab.mercurial-scm.org/D8313
Matt Harbison <matt_harbison@yahoo.com> [Mon, 16 Mar 2020 14:33:35 -0400] rev 44647
phabricator: extract the logic to amend diff properties to a function
This will be needed on a separate code path when dealing with folding revisions.
And since we know that will involve adding multiple local commmits to the diff
properties instead of just one, restructure the logic slightly to allow it.
Differential Revision: https://phab.mercurial-scm.org/D8312
Matt Harbison <matt_harbison@yahoo.com> [Mon, 16 Mar 2020 13:36:12 -0400] rev 44646
phabricator: teach `getoldnodedrevmap()` to handle folded reviews
The tricky part here is reasoning through all of the possible predecessor
scenarios. In the typical case of submitting a folded range and then
resubmitting it (also folded), filtering the list of commits for the diff stored
on Phabricator through the local predecessor list for each single node will
result in the typical 1:1 mapping to the old node.
There are edge cases like using `hg fold` within the range prior to
resubmitting, that will result in mapping to multiple old nodes. In that case,
the first direct predecessor is needed for the base of the diff, and the last
direct predecessor is needed for the head of the diff in order to make sure that
the entire range is included in the diff content. And none of this matters for
commits in the middle of the range, as they are never used.
Fortunately the only crucial thing here is the `drev` number for each node. For
these complicated cases where there are multiple old nodes, simply ignore them
all. This will cause `createdifferentialrevision()` to generate a new diff
(within the same Differential), and avoids complicating the code.
Differential Revision: https://phab.mercurial-scm.org/D8311
Matt Harbison <matt_harbison@yahoo.com> [Mon, 09 Mar 2020 12:07:28 -0400] rev 44645
phabricator: teach createdifferentialrevision() to allow a folded commit range
No visible changes here, until an option to enable it is added to `phabsend`.
Differential Revision: https://phab.mercurial-scm.org/D8310
Matt Harbison <matt_harbison@yahoo.com> [Fri, 06 Mar 2020 17:03:04 -0500] rev 44644
phabricator: combine commit messages into the review when folding commits
No visible changes here, until an option to enable it is added to `phabsend`.
This combines the Differential fields like Arcanist does, rather than simply
concatenating the text blocks. Aside from populating everything properly in the
web interface, Phabricator fails the review create/update if repeated fields are
seen as would happen with simple concatenation.
On the flip side, now that the Summary and Test Plan fields can contain data
from multiple commits, we can't just join these fields together to determine if
an amend is needed. If that were to happen, every single commit in the folded
range would get amended with the combined commit message, which seems clearly
wrong. Aside from making a minor assumption about the content of the
Differential Revision field (it seems they allow some minor variances with
spacing), this means that for folded reviews, you can't post it, go to the web
page add a missing Test Plan, and then get it added to the commit message by
re-posting it. I don't think that's a big deal.
Differential Revision: https://phab.mercurial-scm.org/D8309
Matt Harbison <matt_harbison@yahoo.com> [Wed, 26 Feb 2020 13:13:49 -0500] rev 44643
phabricator: record all local commits used to create a Differential revision
Arcanist records all of the commits that it squashes into a single review, and
that info will be helpful when adding similar functionality. This info is used
when submitting an updated review, so that the extension can recalculate the old
diff and see if a new one is necessary, or if it is just a property update. It
also shows on the `commits` tab in the `Revision Contents` section.
When submitting in the usual 1:1 commit to review mode, the wire protocol is
unchanged.
The content of `hg:meta` is a bit odd, but such is the problem when folding
several commits. The choice for the parent node is obvious, but the `node`
value uses the tip commit because that seems more natural, and is used elsewhere
to look up the previous diff when updating. The rest of the attributes follow
from there.
Differential Revision: https://phab.mercurial-scm.org/D8308
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Mar 2020 13:29:25 -0700] rev 44642
tests: use `f --hexdump` to print file content
The inline print.py in this test wasn't fully compatible with
Python 3 because it was reading from sys.stdin, which already
normalized line endings since it operates in the realm of str on
Python 3. To do this correctly, we'd need to read from
sys.stdin.buffer on Python 3. This would entail conditional code.
I felt this was too much effort. So I just replaced the custom
script with `f`, which already knows how to do the right thing.
test-mactext.t now passes on Python 3 on Windows.
Differential Revision: https://phab.mercurial-scm.org/D8336
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Mar 2020 13:12:43 -0700] rev 44641
url: pass str to pathname2url
This is needed to appease Python 3.
This fixes test-extdata.t and test-url-download.t on Python 3
on Windows.
Differential Revision: https://phab.mercurial-scm.org/D8335
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Mar 2020 09:21:46 -0700] rev 44640
tests: pass str to matchoutput()
It accepts a str, not bytes.
This fixes a failure in test-hghave.t on Windows. Why it
wasn't failing on Linux, I don't know. I suspect the Windows
process code in Python doesn't accept bytes and the POSIX code
does?
Differential Revision: https://phab.mercurial-scm.org/D8334
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 31 Mar 2020 19:44:28 -0700] rev 44639
hgcli: customize for Mercurial
Now that we have a shiny new PyOxidizer-based hgcli project, let's
customize it for Mercurial!
This commit replaces the auto-generated pyoxidizer.bzl with one
that installs Mercurial from the local source repository.
A README.md with build instructions has been added.
The Cargo.toml file has been updated to reflect the proper license
and reference the added README.md.
In my Linux environment, running the test suite yields 27 failures.
It's worth noting the run time of the test harness on Linux on my
Ryzen 3950X:
before: 378s wall; 9982s user; 1195s sys
after: 353s wall; 8996s user; 958s sys
% orig: 93.4 wall; 90.1 user; 80.2 sys
While I haven't measured explicitly, I suspect the performance win is
due to in-memory resource loading (which is known to be faster than
Python's filesystem importer).
Differential Revision: https://phab.mercurial-scm.org/D8351