Georges Racinet <georges.racinet@octobus.net> [Mon, 13 Jan 2020 19:56:16 +0100] rev 44513
rust-index: moved constructor in separate impl block
with the upcoming addition of the nodemap logic, it's going to become
more complicated.
Being in the separate impl block has the advantage to be subject to rustfmt,
whereas code inside macro calls isn't.
Differential Revision: https://phab.mercurial-scm.org/D8153
Georges Racinet <georges.racinet@octobus.net> [Mon, 13 Jan 2020 19:31:33 +0100] rev 44512
revlog: using two new functions in C capsule from Rust code
We expose `index_length` and `index_node` in the C capsule, so that
the Rust representation of the C index can implement the `RevlogIndex`
trait.
Because our `Node` is actually a one-field struct, we have
to decorate it for direct FFI exchange with the C `char*`
It would be a good thing to get a length from the C layer, but doing
so right now would probably interfere with the upcoming changes that
will happen there for the hash length.
Differential Revision: https://phab.mercurial-scm.org/D8152
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Feb 2020 19:11:14 +0100] rev 44511
nodemap: refresh the persistent data on nodemap creation
The logic to read the data and validate the docket are still in python, so we
need to "help" whatever compiled code live in the index to refresh it.
Otherwise clearing the cache could lead to an expensive full recomputation and
disk update even when the persisted data are still valid.
Differential Revision: https://phab.mercurial-scm.org/D8174
Manuel Jacob <me@manueljacob.de> [Wed, 11 Mar 2020 05:41:02 +0100] rev 44510
tests: check availability of pyflakes by trying to import pyflakes module
Since e397c6d74652, we use the pyflakes module instead of the pyflakes
executable. As was pointed out during the review, the hghave check can be
rewritten to try to import the pyflakes module instead of spawning a new
subprocess.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Feb 2020 22:34:45 +0100] rev 44509
nodemap: deal with the "debugupdatecache" case using a "fake" transaction
We are going to need more and more methods of the transaction. So lets change
approach. The `hg debugupdatecache` case do not need a transaction, because has
the repositories locked, but is not adding any "store" data to it.
Differential Revision: https://phab.mercurial-scm.org/D8186
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Feb 2020 01:45:03 +0100] rev 44508
changelog: change the implementation of `_divertopener`
During a transaction, new data to the changelog index are "diverted". The
previous implementat ways pretty basic, we need something better to be able to
use the changelog vfs fully during transaction. (eg: accessing the vfs options).
Differential Revision: https://phab.mercurial-scm.org/D8185
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Feb 2020 17:08:59 +0100] rev 44507
nodemap: test that an outdated nodemap can catch up
If the persistent nodemap does not contains all revision that the index
contains, this is should be detected and dealt with. We add a test for this
case.
Differential Revision: https://phab.mercurial-scm.org/D8183
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Feb 2020 16:09:17 +0100] rev 44506
nodemap: document the docket attributes
More documentation rarely hurts.
Differential Revision: https://phab.mercurial-scm.org/D8182
Augie Fackler <raf@durin42.com> [Tue, 10 Mar 2020 13:10:53 -0400] rev 44505
git: key off `git` in .hg/requires rather than separate file
Differential Revision: https://phab.mercurial-scm.org/D8265
Augie Fackler <raf@durin42.com> [Tue, 10 Mar 2020 13:10:45 -0400] rev 44504
git: correctly handle p1() on dirstate when underlying git repo is empty
This shows up in my next change, which ends up making an empty git
repo and then running hg.
Differential Revision: https://phab.mercurial-scm.org/D8271
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 10 Mar 2020 14:24:08 +0100] rev 44503
rust: clean remains of direct-ffi code
Since b55bec1ea972, the cext entry poitn have been removed, so we drop the code
for consistency.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 06 Mar 2020 17:02:50 +0100] rev 44502
heptapod-ci: use the new `--rust/--no-rust` flag to run the tests
Raphaël Gomès <rgomes@octobus.net> [Fri, 06 Mar 2020 11:16:15 +0100] rev 44501
run-tests: add option for running with and without Rust extensions
This provide a simple and clear way to run the test with or without rust.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 06 Mar 2020 16:24:50 +0100] rev 44500
run-tests: rename "pure" variable to setup_opts
There are more useful flag than just `--pure`. We clarify the variable name
before adding more options.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 06 Mar 2020 16:06:30 +0100] rev 44499
setup-rust: add a --no-rust flag
This new flag will make sure the rust extension will not be build. If neither
`--rust` nor `--no-rust` is specified the `HGWITHRUSTEXT` is used.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 09 Mar 2020 17:26:30 +0100] rev 44498
cext: drop the WITH_RUST block
These were used by the `direct-ffi` mode that just got dropped.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 09 Mar 2020 17:16:44 +0100] rev 44497
setup: use printf instead of print
Yuya Nishihara pointed `printf` to me, so I will respect the cargo cult.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 09 Mar 2020 11:18:33 -0700] rev 44496
git: don't fail import when pygit2 is not install
`test-duplicateoptions.py` was failing on py2 for be because I didn't
have pygit2 installed. It failed because we depend on pygit2 at import
time. This patch makes it so we successfully load the git extension
even if pygit2 doesn't exist -- we just won't be able to use it in
that case.
Differential Revision: https://phab.mercurial-scm.org/D8268
Martin von Zweigbergk <martinvonz@google.com> [Mon, 09 Mar 2020 12:53:21 -0700] rev 44495
hghave: add a check for pygit2
This will make it easy to use availability of pygit2 as in conditions
such as `#if pygit2` and `(pygit2 !)`. It also makes it a little
clearer why the test case skipped (when that happens).
Differential Revision: https://phab.mercurial-scm.org/D8267
Augie Fackler <raf@durin42.com> [Sat, 07 Mar 2020 18:00:53 -0500] rev 44494
localrepo: add git extension to autoextensions list
Differential Revision: https://phab.mercurial-scm.org/D8266
Augie Fackler <raf@durin42.com> [Sat, 07 Mar 2020 17:44:55 -0500] rev 44493
gitlog: implement __iter__ on changelog
This allows `hg phase --force --draft -r .` to work, for example.
Differential Revision: https://phab.mercurial-scm.org/D8264
Augie Fackler <raf@durin42.com> [Sat, 07 Mar 2020 17:42:40 -0500] rev 44492
gitlog: fix embarassing bug that prevented log from showing correct parents
We had the correct parents in the database, but the changelog was
always returning p1 for all parents. Oops.
Differential Revision: https://phab.mercurial-scm.org/D8263
Augie Fackler <raf@durin42.com> [Sat, 07 Mar 2020 16:51:21 -0500] rev 44491
git: add readfast() method to manifest
Mysteriously, on a different system a handful of things don't work
without this, including log. This is especially odd to be because log
works in the test. In any event, it's legal for readfast() to just
return read(), so that's what we do.
Differential Revision: https://phab.mercurial-scm.org/D8262
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Mar 2020 14:14:05 -0800] rev 44490
git: make {shortest()} return shortest *unique* prefix
It used to return the prefix of the specified length as long as the
full node was unique (i.e. always).
Differential Revision: https://phab.mercurial-scm.org/D8256
Augie Fackler <augie@google.com> [Tue, 11 Feb 2020 00:44:59 -0500] rev 44489
git: skeleton of a new extension to _directly_ operate on git repos
This is based in part of work I did years ago in hgit, but it's mostly
new code since I'm using pygit2 instead of dulwich and the hg storage
interfaces have improved. Some cleanup of old hgit code by Pulkit,
which I greatly appreciate.
test-git-interop.t does not cover a whole lot of cases, but it
passes. It includes status, diff, making a new commit, and `hg annotate`
working on the git repository.
This is _not_ (yet) production quality code: this is an
experiment. Known technical debt lurking in this implementation:
* Writing bookmarks just totally ignores transactions.
* The way progress is threaded down into the gitstore is awful.
* Ideally we'd find a way to incrementally reindex DAGs. I'm not sure
how to do that efficiently, so we might need a "known only fast-forwards"
mode on the DAG indexer for use on `hg commit` and friends.
* We don't even _try_ to do anything reasonable for `hg pull` or `hg push`.
* Mercurial need an interface for the changelog type.
Tests currently require git 2.24 as far as I'm aware: `git status` has
some changed output that I didn't try and handle in a compatible way.
This patch has produced some interesting cleanups, most recently on
the manifest type. I expect continuing down this road will produce
other meritorious cleanups throughout our code.
Differential Revision: https://phab.mercurial-scm.org/D6734
Martin von Zweigbergk <martinvonz@google.com> [Mon, 09 Mar 2020 10:18:40 -0700] rev 44488
merge with stable
Manuel Jacob <me@manueljacob.de> [Mon, 09 Mar 2020 05:19:02 +0100] rev 44487
tests: use native string type for parsed hghave log lines
Before this change, on Python 2, the parsed messages were decoded to unicode,
causing an implicit conversion from unicode to str later.
Manuel Jacob <me@manueljacob.de> [Fri, 06 Mar 2020 10:27:38 +0100] rev 44486
tests: avoid implicit bytes -> unicode -> bytes roundtrip on Python 2
Before the change, there were two implicit conversions:
* The format string was converted to unicode because the substituted values were
unicode.
* When printing the message in log(), the string was converted from unicode to
str.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 08 Mar 2020 16:40:39 +0100] rev 44485
cext: make HgRevlogIndex_GetParents private again
The rust's direct-ffi code need to access this function. Now that it
`direct-ffi` is no more. We can make this function `static` again.
This change was suggested by `Yuya Nishihara`.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 06 Mar 2020 16:49:46 +0100] rev 44484
setup-rust: remove the legacy 'direct-ffi' variant
This variant have been abandoned for a while. Keeping it around just get people
confused.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Feb 2020 18:32:31 +0100] rev 44483
hghave: add a `rust` keyword to detect the use of compiled rust code
The content of some on disk cache can varies when using rust (because it is
faster to do so in the rust variant). So we need to be able to detect this case
for some test.
Differential Revision: https://phab.mercurial-scm.org/D8162
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Feb 2020 14:34:37 +0100] rev 44482
nodemap: check that a simple lookup works fine
I realised the code was not exercised much.
Differential Revision: https://phab.mercurial-scm.org/D8180
Raphaël Gomès <rgomes@octobus.net> [Fri, 06 Mar 2020 12:44:51 +0100] rev 44481
debuginstall: print if Rust extensions are installed
This should make it easier to use the Rust extensions.
Another patch on will be exposing a version and more useful information, but
it can only be done on top of this very patch, since it is targeting the stable
branch and the API has already changed on the default branch.
Differential Revision: https://phab.mercurial-scm.org/D8248
Augie Fackler <augie@google.com> [Fri, 06 Mar 2020 13:54:35 -0500] rev 44480
nodemap: fix missing r-prefix on regular expression
Looking at this regular expression, it's pretty obvious from reading
it that it wanted to match literal ., but since the r was missing on
the pattern it was matching any character. I guess we're just lucky
nothing bad happened as a result. This was automatically fixed by
pyupgrade, but I split it out into its own change because it seemed
important.
Differential Revision: https://phab.mercurial-scm.org/D8254
Manuel Jacob <me@manueljacob.de> [Fri, 06 Mar 2020 23:04:58 +0100] rev 44479
tests: use pyflakes module instead of pyflakes executable
This results in that the pyflakes version specific to the configured Python
version is used.
This way, both the Python 2-specific and the Python 3-specific pyflakes are run
by the test suite (depending on the configured Python version).
For downstream projects which are using Mercurial’s test infrastructure and are
not yet ported to Python 3 (e.g. hg-git) it ensures that the correct pyflakes
version is run even when the system’s default pyflakes is the Python 3-specific
one.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 03 Mar 2020 15:56:00 +0100] rev 44478
copies-tests: add a case where with merge with an overwritten files
This is similar to the BF/FB case, but in this case, the other branch updated
the file. So an actual merge happens and the two "independant" file history has
to be merged.
Differential Revision: https://phab.mercurial-scm.org/D8242
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 03 Mar 2020 15:46:28 +0100] rev 44477
copies-tests: add a case where a file is deleted/added but with a merge
This is a case similar to DB/BD, but in this case the other branch updated the
file. So an actual merge happens and the two "independant" file history has to
be merged.
Differential Revision: https://phab.mercurial-scm.org/D8241
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 03 Mar 2020 12:35:24 +0100] rev 44476
copies-tests: add a test with a rename overwriting another file
This is a variation of the "BD" case, but this time, the file is not "new", it
is overwritten by another file being renamed.
Differential Revision: https://phab.mercurial-scm.org/D8240
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 29 Feb 2020 19:50:05 +0100] rev 44475
copies-tests: add a `h` to the root commit (for chain merge tests)
This will be useful for incoming new test cases. We need a new file to rename
around.
Differential Revision: https://phab.mercurial-scm.org/D8239
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 07 Mar 2020 00:03:41 +0100] rev 44474
copies-tests: remove the final summary
The more we add tests, the less useful it is. So after discussion with Martin,
we decided to drop it.
Differential Revision: https://phab.mercurial-scm.org/D8257
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 03 Mar 2020 13:18:31 +0100] rev 44473
copies-tests: clarify the description of the EA/AE cases
The previous description of the merge was just wrong.
(It seems the result a non-updated copy-paste)
Differential Revision: https://phab.mercurial-scm.org/D8238
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 03 Mar 2020 09:27:31 +0100] rev 44472
copies-tests: update the analysis of the BD/DB cases
After thinking more about it, the current change in output between the two
merges is not due to an ambiguity, it is introduce by a bug in merge/commit
that record a wrong file history.
Fixing the bug should fix the output. In the meantime, we have a wrong behavior.
In practice the bug is not in the merge code (who does the right things), but in
the commit code (who get confused when recording the new file revision).
Differential Revision: https://phab.mercurial-scm.org/D8237
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 06 Mar 2020 11:02:02 +0100] rev 44471
copies-tests: swap two branch description
They were swapped and now match their intended block.
Differential Revision: https://phab.mercurial-scm.org/D8247
Augie Fackler <augie@google.com> [Fri, 06 Mar 2020 13:27:41 -0500] rev 44470
cleanup: run pyupgrade on our source tree to clean up varying things
Built with:
hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**" - hgext/fsmonitor/pywatchman/**' | xargs pyupgrade --keep-percent-format --keep-extraneous-parens
and then blackened. pyupgrade comes from
https://github.com/asottile/pyupgrade with a patch to let me preserve
extraneous parens (which we use for marking strings that shouldn't be
translated), and lets us clean up a bunch of idioms that have cruftily
accumulated over the years.
# skip-blame no-op automated code cleanups
Differential Revision: https://phab.mercurial-scm.org/D8255
Manuel Jacob <me@manueljacob.de> [Fri, 06 Mar 2020 10:52:44 +0100] rev 44469
tests: avoid implicit conversion of str to unicode
On Python 2, str.encode('utf-8') implicitly converts the string to unicode and
then back to str.
Using _sys2bytes() ensures that opt is only encoded on Python 3, where opt is
unicode.
Although contrived, before this change, a UnicodeDecodeError could be triggered
on Python 2 when passing non-ascii values to --extra-config-opt.
Manuel Jacob <me@manueljacob.de> [Fri, 06 Mar 2020 09:50:57 +0100] rev 44468
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
The names were not general enough because e.g. _strpath() was used for
converting IP addresses.
Manuel Jacob <me@manueljacob.de> [Thu, 05 Mar 2020 18:19:21 +0100] rev 44467
tests: avoid implicit conversion of str to unicode
On Python 2, str.encode('ascii') implicitly converts the string to unicode and
then back to str.
Since the converted value is a path, _bytespath can be used instead.
Manuel Jacob <me@manueljacob.de> [Thu, 05 Mar 2020 18:10:19 +0100] rev 44466
tests: avoid implicit conversion of str to unicode
On Python 2, str.encode('ascii') implicitly converts the string to unicode and
then back to str.
Since the point of this expression is to convert a bool to a str, the '%r'
conversion specifier can be used instead in the format string.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Feb 2020 19:11:13 +0100] rev 44465
nodemap: warm the persistent nodemap on disk with debugupdatecache
When appropriate, the nodemap cache file will be created.
Differential Revision: https://phab.mercurial-scm.org/D8173
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 29 Feb 2020 19:31:33 +0100] rev 44464
copies-tests: update to null after setup for output stability
This avoid having '@' moving around in graph output when the graph evolves.
after this change, graph evolution is still noisy, but less.
Differential Revision: https://phab.mercurial-scm.org/D8236
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 03 Mar 2020 08:55:27 +0100] rev 44463
copies-tests: remove extra log call at the end of the chain-merge test file
We do not actually need theses as the graph is displayed earlier anyway. I
think they are the remain of me trying to understand that case better.
Differential Revision: https://phab.mercurial-scm.org/D8235
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Mar 2020 08:37:08 -0800] rev 44462
commit: print debug message when clearing dirstate and wdir clean
This case is a little weird, so let's have a debug message.
Differential Revision: https://phab.mercurial-scm.org/D8231
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Mar 2020 10:46:31 -0800] rev 44461
merge with stable
Augie Fackler <augie@google.com> [Thu, 05 Mar 2020 10:52:51 -0500] rev 44460
merge with stable
Augie Fackler <augie@google.com> [Wed, 04 Mar 2020 14:21:23 -0500] rev 44459
commands: switch one call of check_at_most_one_arg to strings
This opts hasn't been through the byteskwargs mulcher, so we can just use
strings here instead of bytes. Fixes the test changes from D8204 on Python 3,
which was the only place this was a problem.
Differential Revision: https://phab.mercurial-scm.org/D8222
Martin von Zweigbergk <martinvonz@google.com> [Fri, 28 Feb 2020 11:32:27 -0800] rev 44458
cleanup: remove redundant clearing of mergestate in rebase and shelve
`repo.commit()` now clears the merge state even if it ends up not
creating a commit because there were no changes to commit.
Differential Revision: https://phab.mercurial-scm.org/D8197
Martin von Zweigbergk <martinvonz@google.com> [Fri, 28 Feb 2020 11:32:02 -0800] rev 44457
commit: clear resolved mergestate even if working copy is clean
If the mergestate has resolved conflicts and a commit is successfully
created (either because there are changes in the working copy or
because ui.allowemptycommit=yes), we will also clear the merge
state. However, if the working copy is clean (and
ui.allowemptycommit=no), we leave the mergestate there. The user may
notice it in `hg resolve -l` output (but not in `hg status -v`
output). It's not clear how the user should clear it, but probably via
`hg co -C .`. It's also quite likely that they won't even notice it
and it will get cleared by a later `hg commit` (of unrelated
changes).
This patch makes it so that `hg commit` also clears resolved merge
conflicts even if the command doesn't end up writing a commit because
the working copy was empty. That's probably a little weird (commands
that abort should generally avoid changing the repo), but it still
seems mostly harmless, and it reduces the risk of more bugs like
https://bz.mercurial-scm.org/show_bug.cgi?id=5494. I just ran into a
version of that bug in the Evolve extension and that's what triggered
this series.
Differential Revision: https://phab.mercurial-scm.org/D8196
Matt Harbison <matt_harbison@yahoo.com> [Wed, 04 Mar 2020 00:45:54 -0500] rev 44456
phabricator: avoid a stacktrace when command arguments are missing
Previously, the TypeError wasn't properly converted to a SignatureError when
improper arguments were supplied to the inner function, because the stack depth
is 2 inside the vcrcommand decorator. The `__name__` and `__doc__` attributes
need to be reassigned to the new wrapper so that the help summary is available.
Differential Revision: https://phab.mercurial-scm.org/D8209
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Jan 2020 15:51:19 -0800] rev 44455
mq: don't tell user to commit merge that we already committed
Differential Revision: https://phab.mercurial-scm.org/D8000
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Jan 2020 15:28:37 -0800] rev 44454
merge: make hg.merge() take a context instead of a node
Many callers already have a repo, so we might as well pass
that. `merge.update()` will look up the context object later. This
patch is part of making it so we pass around the context object all
the way down instead.
I also removed the `repo` argument since it can be retrieved from the
context.
Differential Revision: https://phab.mercurial-scm.org/D7999
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 17 Jan 2020 21:22:23 +0300] rev 44453
debugbackupbundle: introduce command to interact with strip backups
This vendors backups extension from hg-experimental.
Listing backups and having some utility to apply them is nice. I know we have
obsmarkers now, but this will help a lot of end users who still uses strip until
we get evolve out of experimental.
Differential Revision: https://phab.mercurial-scm.org/D7932
Matt Harbison <matt_harbison@yahoo.com> [Thu, 20 Feb 2020 10:56:40 -0500] rev 44452
phabricator: also check parent fctx for binary where it is checked for UTF-8
I don't know that this is necessary, but it seems obvious from the code checking
both the current and parent file for UTF-8 content that this was the intent.
Differential Revision: https://phab.mercurial-scm.org/D8221
Matt Harbison <matt_harbison@yahoo.com> [Thu, 20 Feb 2020 10:46:43 -0500] rev 44451
phabricator: don't infer the old `fctx` in `notutf8()`
This is used along with `fctx.isbinary()` to gate `addoldbinary()`, so it seems
like a good idea to provide the caller similar control over the current and
parent filecontext. Unlike `addoldbinary()`, it doesn't need both previous and
current contexts at the same time, so make the caller responsible for testing
both cases, as appropriate. I haven't worked out all of the problems around
marking files as binary for move/remove/copy, but this will definitely help with
`--no-stack` too.
It also turns out to have been doing too much- in the remove case, it tested not
just the removed file in the parent context (which is what gets passed in that
case), but also in the parent of the parent context (which should be
irrelevant). The previous code also required the `fctx.parents()` check to work
in the add (but without rename) case. Now the add and remove cases test only
what they need to. But now that it is written this way, the fact that only the
current `fctx` is checked to be binary in the case of modification or being
renamed seems wrong.
Differential Revision: https://phab.mercurial-scm.org/D8220
Matt Harbison <matt_harbison@yahoo.com> [Thu, 20 Feb 2020 12:42:07 -0500] rev 44450
phabricator: rename a variable to clarify that it is the parent filecontext
Differential Revision: https://phab.mercurial-scm.org/D8219