Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Jun 2021 01:10:34 +0200] rev 47448
clone: use "official" API to create local clone destination
This make sure we have a properly created, fully functional repository early.
This will be useful to simply the hardlink/copy phases of the local clone to
make it share more of its logic with the similar "stream" cloning.
This has a minor impact of the test and the resulting repository has is better initialized (eg: the `wcache` directory is pre-created.)
Differential Revision: https://phab.mercurial-scm.org/D10850
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Jun 2021 01:10:26 +0200] rev 47447
localrepo: introduce a clone_requirements function
This function take a source repository and return a relevant set of
requirements that should be used by a copy clone.
This will help make the creation of the destination repository during copy
clone simpler.
Differential Revision: https://phab.mercurial-scm.org/D10849
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 07 Jun 2021 20:40:43 +0200] rev 47446
createrepository: allow to directly pass the target requirements
This is useful when doing a local clone that copies store contents, it will
requires the destination to use the very same store requirements so directly
providing them will be simpler and safer
Differential Revision: https://phab.mercurial-scm.org/D10848
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Jun 2021 16:03:42 -0700] rev 47445
narrowbundle: use new context manager for silencing the ui
Same reasoning as the previous change. This affects a few tests
because of the hack from d7304434390f (changegroup: move message about
added changes to transaction summary, 2019-09-08).
Differential Revision: https://phab.mercurial-scm.org/D10886
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Jun 2021 16:00:58 -0700] rev 47444
debugbackupbundle: use new context manager for silencing the ui
A difference between setting `ui.quiet` and using `ui.silent()` is
that the latter also silences `ui.write()` calls. That's practically
always what one wants, including here, I think.
Differential Revision: https://phab.mercurial-scm.org/D10885
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Jun 2021 15:48:51 -0700] rev 47443
ui: add a context manager for silencing the ui (pushbuffer+popbuffer)
We often silence the ui by calling `ui.pushbuffer()` followed (a later
in the code) by `ui.popbuffer()`. These places can be identified by
the fact that they ignore the output returned from
`ui.popbuffer()`. Let's create a context manager for these cases, to
avoid repetition, and to avoid accidentally leaving the ui silent on
exceptions. I deliberately called the new function `silent()` instead
of `buffered()`, because it's just an implementation detail that it
uses `pushbuffer()` and `popbuffer()`. We could later optimize it to
not buffer the output.
Differential Revision: https://phab.mercurial-scm.org/D10884
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Jun 2021 14:17:43 -0700] rev 47442
shelve: don't swallow errors that happen when reverting the working copy
Same reasoning as the parent commit. The code in question here comes
from fb8065de47b0 (unshelve: silence internal revert, 2014-08-15),
which says that it was to prepare for some upcoming revert changes. I
suppose those changes have happened by now but we fixed something
about it, because I don't see any unwanted changes in tests (no
changes at all in tests, in fact).
Differential Revision: https://phab.mercurial-scm.org/D10883
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Jun 2021 13:55:45 -0700] rev 47441
histedit: don't swallow errors that happen when updating the working copy
Commit 34165875fa5d (histedit: limit updated and merging output to
important updates, 2016-02-03) added a call to
`ui.pushbuffer(labeled=True, errors=True)`. I don't know if there was
a reason for the `errors=True` (nor the `labeled=True` bit, which I
removed in the previous commit). It seems bad to just discard the
errors, so let's not do that. By not doing that, we can also remove a
workaround for the lack of errors from `test-removeemptydirs.t`.
Differential Revision: https://phab.mercurial-scm.org/D10882
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Jun 2021 13:44:05 -0700] rev 47440
histedit: don't record labels for output that we will discard
Differential Revision: https://phab.mercurial-scm.org/D10881
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Jun 2021 15:56:55 -0700] rev 47439
dog-raft: work with str-keyed opts throughout
Differential Revision: https://phab.mercurial-scm.org/D10864
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Jun 2021 15:45:22 -0700] rev 47438
cmdutil: make resolvecommitoptions() work on str-keyed opts
As with `checknotesize()`, I also changed to snake_case while at it,
to help extensions a little.
Differential Revision: https://phab.mercurial-scm.org/D10863
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Jun 2021 14:55:10 -0700] rev 47437
cmdutil: make amend() take str-keyed opts
I couldn't think of a reasonable change to the signature here, so
unfortunately it keeps the existing one.
Differential Revision: https://phab.mercurial-scm.org/D10862
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Jun 2021 14:47:14 -0700] rev 47436
commit: keep opts dict str-keyed a bit longer
Differential Revision: https://phab.mercurial-scm.org/D10861
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Jun 2021 14:36:26 -0700] rev 47435
dog-raft: keep opts dict str-keyed a bit longer
Differential Revision: https://phab.mercurial-scm.org/D10860
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Jun 2021 14:25:16 -0700] rev 47434
cmdutil: make checknotesize() work on str-keyed opts
Since this patch changes the behavior of the function, I consider it a
bonus if the signature also changes so that extensions can detect
which version they're dealing with (for the record, I don't have any
such extensions). Therefore, I also dropped an unused `ui` argument
and renamed the function to use snake_case.
Differential Revision: https://phab.mercurial-scm.org/D10859
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Jun 2021 10:53:43 -0700] rev 47433
amend: work mostly with str-type **opts for simplicity
Differential Revision: https://phab.mercurial-scm.org/D10880
Simon Sapin <simon.sapin@octobus.net> [Tue, 15 Jun 2021 12:34:14 +0200] rev 47432
revlog: use file read caching for sidedata
The previous changeset extracted this caching logic from the revlog class into
a new class. Adding a new instance of that class allows using the same logic
for side data.
Differential Revision: https://phab.mercurial-scm.org/D10879
Simon Sapin <simon.sapin@octobus.net> [Tue, 08 Jun 2021 19:55:00 +0200] rev 47431
revlog: Extract low-level random-access file read caching logic
The `revlog` class does many things, among which fulfilling requests for
arbitrary byte slices from the revlog "data file" by reading a larger chunk
and caching it in memory, in order to reduce the number of system calls.
This extracts that logic into a new class, so that it may later also be used
for the side-data file (with another instance of that class).
The copyright notice of the new file does not include a date or author name
since such information tend not to be kept up-to-date:
https://www.linuxfoundation.org/en/blog/copyright-notices-in-open-source-software-projects/
Differential Revision: https://phab.mercurial-scm.org/D10878
Matt Harbison <matt_harbison@yahoo.com> [Fri, 11 Jun 2021 23:39:31 -0400] rev 47430
typing: disable warnings for a couple of Windows specific attributes
Differential Revision: https://phab.mercurial-scm.org/D10870
Matt Harbison <matt_harbison@yahoo.com> [Sat, 12 Jun 2021 14:50:33 -0400] rev 47429
typing: suppress a false error in mercurial/revlogutils/docket.py on py2
`ord()` wants bytes or str on py3, so I'm guessing it got confused by passing a
single byte instead of a one byte string. But this seems to work on 2.7.18
anyway.
Differential Revision: https://phab.mercurial-scm.org/D10876
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Jun 2021 00:59:44 +0200] rev 47428
transaction: simplify `undo.backupfiles` file creation with a variable
This make the code shorter and clearer.
(This is an opportunity improvement while looking at something next to that.)
Differential Revision: https://phab.mercurial-scm.org/D10846
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Jun 2021 00:59:04 +0200] rev 47427
transaction: narrow the error filtering when failing to rename undo file
Having inconsistent "undo" files can be quite serious so we narrow the error
filtering to the intent that the comment explain.
(This is an opportunity improvement while looking at something next to that.)
Differential Revision: https://phab.mercurial-scm.org/D10845
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Jun 2021 01:13:09 +0200] rev 47426
transaction: clarify a conditionnal about version check
Let us move the short branch early.
Differential Revision: https://phab.mercurial-scm.org/D10844
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Jun 2021 01:14:18 +0200] rev 47425
transaction: extract message about different version in a constants
This make the code a bit simpler and clearer.
(This is an opportunity improvement while looking at something next to that.)
Differential Revision: https://phab.mercurial-scm.org/D10843
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Jun 2021 01:12:03 +0200] rev 47424
transaction: explain why some recovery failed
Right now we issue a message about failing to recover some file, but not why.
It seems useful to add some information about that.
(This is an opportunity improvement while looking at something next to that.)
Differential Revision: https://phab.mercurial-scm.org/D10842
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 07 Jun 2021 21:09:31 +0200] rev 47423
copyfiles: deal with existing file when hardlinking
If the hardlinking fails, we fallback to `shutil.copy`, but do not consider
future hardlinking doomed.
This is a slight improvement from the current situation, we still avoid
hardliking in a case we might be able to do it. However this does not have an
impact of the rest of the operation.
(This is an opportunity improvement while looking at something next to that.)
Differential Revision: https://phab.mercurial-scm.org/D10841
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 08 Jun 2021 03:40:36 +0200] rev 47422
clone: cleanup the "cleanup dir" logic used during local clone
With the previous code, there was a small windows were we could delete too much
data. This should no longer be the case.
(This is an opportunity improvement while looking at something next to that.)
Differential Revision: https://phab.mercurial-scm.org/D10840
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 09 Apr 2021 17:04:39 +0200] rev 47421
config: add an experimental option to list all known config
That option is not ready for prime-time, hence the `exp-` prefix. However, this
is a good base to start going toward completion. This is also quite useful for
developer on its own for now.
Differential Revision: https://phab.mercurial-scm.org/D10356
Matt Harbison <matt_harbison@yahoo.com> [Sat, 12 Jun 2021 00:51:34 -0400] rev 47420
revlog: byteify a few error strings
Differential Revision: https://phab.mercurial-scm.org/D10875
Matt Harbison <matt_harbison@yahoo.com> [Sat, 12 Jun 2021 00:50:03 -0400] rev 47419
revlog: fix a typo closing the wrong file
Caught by pytype as possibly being None, but the file is closed in the previous
conditional.
Differential Revision: https://phab.mercurial-scm.org/D10874
Matt Harbison <matt_harbison@yahoo.com> [Fri, 11 Jun 2021 23:57:14 -0400] rev 47418
py3: byteify the version string passed to the deprecation warning method
The other callers were already correct.
Differential Revision: https://phab.mercurial-scm.org/D10873
Matt Harbison <matt_harbison@yahoo.com> [Fri, 11 Jun 2021 23:51:27 -0400] rev 47417
urlutil: byteify several localized messages
Flagged by pytype.
Differential Revision: https://phab.mercurial-scm.org/D10872
Matt Harbison <matt_harbison@yahoo.com> [Fri, 11 Jun 2021 23:50:29 -0400] rev 47416
urlutil: use the deprecation warning function on the `ui` object
PyCharm flagged this as not existing, and I suspect a copy/paste error.
Differential Revision: https://phab.mercurial-scm.org/D10871
Simon Sapin <simon.sapin@octobus.net> [Wed, 02 Jun 2021 11:25:18 +0200] rev 47415
dirstate-v2: Store a hash of ignore patterns (.hgignore)
Later, this help extend `read_dir` caching to directories that contain ignored
files (but no unknown files). Such cache must be invalidated when ignore patterns
change since a formerly-ignored file might become unknown.
This helps the default configuration of `hg status` where unknown files must
be listed, but ignored files are not.
Differential Revision: https://phab.mercurial-scm.org/D10836
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 07 Jun 2021 17:29:32 +0530] rev 47414
rhg: propogate error coming from HgError::Abort to CommandError
Differential Revision: https://phab.mercurial-scm.org/D10839
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 07 Jun 2021 17:27:49 +0530] rev 47413
rhg: add exit code to HgError::Abort()
My previous attempts to have rhg end with correct exit code was more of bug
hunting. I found cases which were failing and fixed them. But as one might
expect, more tests started failing.
Let's add exit code `HgError::Abort()` and make it users explicitly tell what
exit code they want.
Differential Revision: https://phab.mercurial-scm.org/D10838
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 07 Jun 2021 17:19:46 +0530] rev 47412
rhg: split non_repo_config and `--config` loading in different functions
This will help us in better handling of error caused when trying to
load `--config` values.
Differential Revision: https://phab.mercurial-scm.org/D10837
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 24 May 2021 16:27:54 +0530] rev 47411
rhg: look for repository in ancestors also instead of cwd only
Last patch introduced config reading at startup to parse value of `--repository`
flag. However, that patch only tried to check for current repository at current
working directory and not it's ancestors. This patch fixes that.
Differential Revision: https://phab.mercurial-scm.org/D10767
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 11 Apr 2021 00:50:10 +0530] rev 47410
rhg: read [paths] for `--repository` value
hg parses `-R` and `--repository` CLI arguments "early" in order to know which
local repository to load config from. (Config can then affect whether or how to
fall back.)
The value of of those arguments can be not only a filesystem path, but also an
alias configured in the `[paths]` section. This part was missing in rhg and
this patch implements that.
The current patch still lacks functionality to read config of current repository
if we are not at root of repo. That will be fixed in upcoming patches.
A new crate `home` is added to get path of home directory.
Differential Revision: https://phab.mercurial-scm.org/D10296
Augie Fackler <augie@google.com> [Mon, 07 Jun 2021 17:10:35 -0400] rev 47409
merge: with stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 May 2021 18:09:29 +0200] rev 47408
revlog: allow to pass an existing docket to `_loadindex()`
This will be when switching undelying files, for examples during censors and strip operation with rvlog-v2.
Differential Revision: https://phab.mercurial-scm.org/D10800
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 May 2021 18:10:15 +0200] rev 47407
revlog: add a ways to blacklist some revision when searching for a delta
This will be useful to recompute appropriate deltas one the fly during
censor/strip operation with revlog-v2.
Differential Revision: https://phab.mercurial-scm.org/D10799
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 May 2021 18:08:52 +0200] rev 47406
util: add `nb_bytes` argument to `copyfile` to partially copy a file
When set, this allow to copy only the first `nb_bytes` of a file. This will be
useful for censor/strip operation with revlogv2.
Differential Revision: https://phab.mercurial-scm.org/D10798
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 May 2021 16:20:36 +0200] rev 47405
revlog: move `revisioninfo` in `revlogutils`
We will need it in other utility module. So lets extract it from `revlog.py`,
the module is too large already anyway.
Differential Revision: https://phab.mercurial-scm.org/D10797
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 May 2021 17:11:49 +0200] rev 47404
revlog: use the `entry` function in bundlerepo
We can use some of the default value again!
Differential Revision: https://phab.mercurial-scm.org/D10796
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 May 2021 17:11:21 +0200] rev 47403
revlog: use entry in revlogv0.py
This make things clearer and we can reply on some of the default value directly.
Differential Revision: https://phab.mercurial-scm.org/D10795
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 May 2021 17:11:10 +0200] rev 47402
revlog: use the new `entry` function in revlog.py
This just make the construction of the tuple clearer.
Differential Revision: https://phab.mercurial-scm.org/D10794
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 May 2021 17:10:56 +0200] rev 47401
revlog: add a function to build index entry tuple
Keeping index entry as tuple make sense for performance reason, however it does
not means we need to manually build that tuple for all piece of python code that
are not performance critical.
So we add a nice function responsible to build the tuple using argument using
explicit keyword argument.
Differential Revision: https://phab.mercurial-scm.org/D10793