Joerg Sonnenberger <joerg@bec.de> [Tue, 27 Feb 2018 02:37:31 +0100] rev 37414
wireproto: allow direct stream processing for unbundle
Introduce a new option server.streamunbundle which starts a transaction
immediately to apply a bundle instead of writing it to a temporary file
first. This side steps the need for a large tmp directory at the cost of
preventing concurrent pushes. This is a reasonable trade-off for many
setups as concurrent pushes for the main branch at least are disallowed
anyway. The option defaults to off to preserve existing behavior.
Change the wireproto interface to provide a generator for reading the
payload and make callers responsible for consuming all data.
Differential Revision: https://phab.mercurial-scm.org/D2470
Joerg Sonnenberger <joerg@bec.de> [Fri, 06 Apr 2018 22:22:19 +0200] rev 37413
wireproto: send server capabilities in canonical order
Differential Revision: https://phab.mercurial-scm.org/D3171
Joerg Sonnenberger <joerg@bec.de> [Fri, 06 Apr 2018 22:16:11 +0200] rev 37412
wireproto: don't special case bundlecaps, but sort all scsv arguments
Differential Revision: https://phab.mercurial-scm.org/D3170
Joerg Sonnenberger <joerg@bec.de> [Fri, 06 Apr 2018 21:50:01 +0200] rev 37411
wireproto: turn client capabilities into sets, sorted on the wire
Differential Revision: https://phab.mercurial-scm.org/D3169
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 04 Apr 2018 13:43:52 -0700] rev 37410
verify: drop "revlog" from warning message
Not all stores may be backed by revlogs. Switch to a more generic
error message.
Differential Revision: https://phab.mercurial-scm.org/D3094
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 04 Apr 2018 10:16:08 -0700] rev 37409
store: make file filtering during walk configurable
Previously, the walking mechanism assumed the use of revlogs for
storage.
Making the file filter configurable will enable custom stores
to override _walk() so it recognizes additional files.
Differential Revision: https://phab.mercurial-scm.org/D3093
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 04 Apr 2018 09:31:19 -0700] rev 37408
simplestore: shore up lookup errors
When revisions or nodes can't be resolved, we're expected to raise
an error.LookupError. When I ported code from revlog.py, I failed
to realize that "LookupError" in that module is aliased to
error.LookupError. I thought we were using the builtin LookupError
instead.
This commit switches us to error.LookupError. It also fixes
rev() to raise error.LookupError instead of KeyError.
Differential Revision: https://phab.mercurial-scm.org/D3092
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 04 Apr 2018 09:57:21 -0700] rev 37407
tests: extract dumprevlog tests to own file
And mark the test as requiring the revlog store.
Differential Revision: https://phab.mercurial-scm.org/D3091
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 04 Apr 2018 09:21:11 -0700] rev 37406
tests: skip test-censor.t when using simple store
Censor assumes the use of revlogs.
Proper censor support for non-revlog storage will require a better
abstraction in the storage layer to remove data. Let's skip the
censor tests until we have something in place.
Differential Revision: https://phab.mercurial-scm.org/D3090
Yuya Nishihara <yuya@tcha.org> [Mon, 02 Apr 2018 21:54:12 +0900] rev 37405
templater: deduplicate iterator of overlay mappings
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Mar 2018 21:01:23 +0900] rev 37404
templater: complain about invalid application of '%' operator (BC)
Before, '{x % y % z ...}' was silently evaluated as '{x % y}'. We no longer
need this hack since the web template bugs was fixed by earlier patches.
At this point, the error message may contain '<generator *>', which will
be fixed later.
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Mar 2018 21:18:57 +0900] rev 37403
hgweb: fix type of {nav} keyword when linerange filter is active
Spotted by making '%' operator check the operand type more strictly. Before,
"{nav}" would be evaluated to a lazy "" (empty string) and {"" % x} would
yield one empty string.
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Mar 2018 21:46:20 +0900] rev 37402
hgweb: fix {diff} expansion in JSON template
The same sort of bug as the previous patch. In this case, I decided to fix
the JSON template since we aren't ready to fix the {diff} keyword without BC.
I'll rework it later.
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Mar 2018 21:35:43 +0900] rev 37401
hgweb: fix summary {tags} and {shortlog} to not forcibly expand template
The same sort of bug as the previous patch. In this case, JSON template was
wrong.
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Mar 2018 20:51:39 +0900] rev 37400
hgweb: fix search {entries} to not return results of template expansion
"{entries%changelogentry}" in raw/search.tmpl was utterly wrong because
"{entries}" here was a generator yielding results of template expansion.
That's why we have a weird hack in runmap(), which I'm going to get rid of.
https://www.mercurial-scm.org/repo/hg/file/4.5.2/mercurial/templater.py#l469
We have two choices:
a) drop "%changelogentry" from raw/search.tmpl
b) fix "{entries}" to yield mappings
I take (b) because that's what the other log-like "{entries}" do. The
"entries" keyword is wrapped by mappinggenerator so "{entries}" without
"%searchentry" still works.
Yuya Nishihara <yuya@tcha.org> [Sat, 17 Mar 2018 22:47:02 +0900] rev 37399
templater: add class representing a nested mappings
The mappinggenerator class is necessary to fix hgweb bugs without BC. The
mappinglist is for nested formatter items. They are similar, so factored
out the base class. The mappinglist could be implemented by using the
mappinggenerator, but we'll probably need a direct access to the raw list,
so they are implemented as separate classes.
Note that tovalue() isn't conforming to the spec yet in that it may return
a list of dicts containing unprintable resources. This problem will be
fixed later.
Tests will be added by subsequent patches.
Yuya Nishihara <yuya@tcha.org> [Sat, 17 Mar 2018 22:56:49 +0900] rev 37398
templater: add function that expands internal literal templates
This will be used when rendering nested formatter items with the default
template, e.g.
fm.nested('parents', tmpl='{rev}:{node|formatnode}', sep=' ')
^^^^^^^^^^^^^^^^^^^^^^^
the default item template
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 11:28:26 -0700] rev 37397
bookmarks: use isrevsymbol() for detecting collision with existing symbol
Differential Revision: https://phab.mercurial-scm.org/D3167
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 11:26:50 -0700] rev 37396
debugwhyunstable: add support for revsets
Differential Revision: https://phab.mercurial-scm.org/D3166
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 10:46:24 -0700] rev 37395
convert: look up branch only among branches
repo[<branch name>] can find something that's not a branch, which is
not good.
Differential Revision: https://phab.mercurial-scm.org/D3161
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 16:10:52 -0700] rev 37394
convert: remove unused/unnecessary variable "parentctx"
Differential Revision: https://phab.mercurial-scm.org/D3160
Joerg Sonnenberger <joerg@bec.de> [Sat, 24 Mar 2018 17:57:22 +0100] rev 37393
wireproto: provide accessors for client capabilities
For HTTP, this refactors the existing logic, including the parsing of
the compression engine capability.
For SSH, this adds a ssh-only capability "protocaps" and a command for
informing the server on what the client supports. Since SSH is stateful,
keep track of the capabilities in the server instance.
Differential Revision: https://phab.mercurial-scm.org/D1944
Gábor Stefanik <gabor.stefanik@nng.com> [Thu, 05 Apr 2018 17:51:10 +0200] rev 37392
copies: clean up _related logic
The limit parameter was never actually used, since the only way the 4th case
could be reached was if f1r and f2r converged. The new code makes this clear,
and additionally reduces the conditional block to just 3 cases.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 09:34:44 -0700] rev 37391
context: stop catching RepoLookupError from namespace.singlenode()
As pointed out by Yuya, the RepoLookupError was there for catching
errors from repo.branchtip(). However, since 885c0290f7d5 (localrepo:
add ignoremissing parameter to branchtip, 2014-10-16), that should no
longer happen. I think it should now be an error if a namespace raises
a RepoLookupError, so we propagate the exception up and and make it
easy to fix, rather than trying to interpret the changeid as nodeid
prefix and raise a general "unknown revision '...'" error.
I also don't think we should catch FilteredLookupError and LookupError
from the changelog.rev() call, for the same reason as above: If a
namespace returns a node that doesn't exist, we should provide a more
helpful exception than "unknown revision '...'".
Differential Revision: https://phab.mercurial-scm.org/D3145
Boris Feld <boris.feld@octobus.net> [Thu, 05 Apr 2018 18:02:42 +0200] rev 37390
histedit: simplify desthistedit
Instead of sorting the revset and take the first one, take the minimum
revision.
Differential Revision: https://phab.mercurial-scm.org/D3137
Boris Feld <boris.feld@octobus.net> [Thu, 05 Apr 2018 17:58:58 +0200] rev 37389
stack: follow-up on the stack revset
Follow good-practice for defining the stack revset.
Differential Revision: https://phab.mercurial-scm.org/D3136
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 23:23:48 -0700] rev 37388
githelp: use revsymbol() for looking up symbol
I don't know if we should be using revsingle() here, so I was
conservative and switched to revsymbol().
Differential Revision: https://phab.mercurial-scm.org/D3156
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 21:32:59 -0700] rev 37387
hgweb: use revsymbol() to determine if query is a revision
repo.__getitem__ is about to get dumber.
Differential Revision: https://phab.mercurial-scm.org/D3155
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 14:03:33 -0700] rev 37386
context: make repo[<filtered binary nodeid>] match node
If you pass in a binary nodeid of a filtered node to repo.__getitem__,
it would run through this code:
try:
self._node = changeid
self._rev = repo.changelog.rev(changeid)
return
except error.FilteredLookupError:
raise
except LookupError:
pass
However, repo.changelog.rev() would raise a FilteredLookupError, not
FilteredRepoLookupError. Instead, we would hit the "except
LookupError" and continue, trying to interpret the nodeid as a
bookmark etc. The end result would be an error like this:
abort: unknown revision 'ddadbd7c40ef8b8ad6d0d01a7a842092fc431798'!
After this patch, it would instead be:
abort: 00changelog.i@ddadbd7c40ef8b8ad6d0d01a7a842092fc431798: filtered node!
This only happens when we get a binary nodeid, which means it's not
string directly from the user, so it would be a programming error if
it happened. It's therefore a little hard to test (I checked
test-context.py, but it doesn't use obsmarkers).
It looks like this has been wrong ever since dc25ed84bee8 (changectx:
issue a FilteredRepoLookupError when applicable, 2014-10-15).
Differential Revision: https://phab.mercurial-scm.org/D3144
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 00:04:09 -0700] rev 37385
context: move handling of filtering error to revsymbol() (API)
When changectx's constructor runs into various Filtered*Error, it
creates an exception with a hint about using --hidden. This only makes
sense when the revision was provided by the user (if we get e.g. a
FilteredLookupError from repo[p1], then it's instead a programming
error). Thus, I'm moving the handling into revsymbol(). Also changed
"unfilteredrepo[changeid]" to "revsymbol(unfilteredrepo, changeid)" as
part of the move.
Differential Revision: https://phab.mercurial-scm.org/D3143
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 17:56:24 +0530] rev 37384
py3: whitelist 13 new passing tests
Some tests were passing before the series too.
Differential Revision: https://phab.mercurial-scm.org/D3133
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 16:47:44 +0530] rev 37383
py3: convert user value to bytes by b'' prefix
This makes test-journal* pass on Python 3.5.
# skip-blame beacuse just b'' prefix
Differential Revision: https://phab.mercurial-scm.org/D3125
Augie Fackler <augie@google.com> [Thu, 05 Apr 2018 10:13:01 -0400] rev 37382
util: whitelist apfs for hardlink support
Seems to work fine for me.
Differential Revision: https://phab.mercurial-scm.org/D3134
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 11:33:36 -0700] rev 37381
mq: avoid a silly conversion from binary nodeid to hex
We generally deal with binary nodeids in code. In this case the hex
nodeid was passed to strip.checksubstate() where it was passed to
repo.__getitem__, which of course accepts a binary nodeid.
Differential Revision: https://phab.mercurial-scm.org/D3141
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 12:36:44 -0700] rev 37380
narrow: remove unused "cacheprop" stuff
This is unused since D3046. I didn't even notice it then, but tests
still pass so I hope it's still handled safely.
Differential Revision: https://phab.mercurial-scm.org/D3142
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 03 Apr 2018 14:11:43 -0700] rev 37379
tests: disable infinitepush tests for simple store
Infinitepush relies heavily on bundles and bundlerepo. As such,
it won't be easy to make compatible with alternate storage
backends at this time.
Let's disable the tests when running with our simple store.
Differential Revision: https://phab.mercurial-scm.org/D3062
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 11:01:42 -0700] rev 37378
rebase: remove unnecessary and incorrect handling of nullid
We used to write a nullid as hex to the rebase state file and
interpret it as the "todo" state (value -1). However, when reading it,
we compared the string value to (binary) nullid, which would of course
not match. AFAICT, it still worked because when the read nodeid did
not match nullid (which, again, it didn't), we'd use the normal path
which did repo[<hex nullid>].rev(), and that also happens to return
-1. It seems to have been this way ever since 9972758ab4c5 (rebase:
handle revtodo as a special value when storing/restoring state,
2014-12-02).
Differential Revision: https://phab.mercurial-scm.org/D3140
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 10:13:45 -0700] rev 37377
rebase: convert "oldrev" to revnum earlier
It was done in 3 places before, now just 1.
Differential Revision: https://phab.mercurial-scm.org/D3139
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 10:12:10 -0700] rev 37376
rebase: make "destnode" consistently a revnum and rename it to "destrev"
Differential Revision: https://phab.mercurial-scm.org/D3138
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 08:28:12 -0700] rev 37375
bookmarks: drop always-None argument from calculateupdate()
Thanks to Yuya for noticing.
Differential Revision: https://phab.mercurial-scm.org/D3135
Martin von Zweigbergk <martinvonz@google.com> [Tue, 03 Apr 2018 09:58:16 -0700] rev 37374
narrow: move manifestlog overrides to core
With this and the previous patch, I couldn't measure any significant
difference from `hg files -r .` in a FireFox repo with 65k files. I
tried with both a flat-manifest and a tree-manifest version of
it. Neither had the narrow extension enabled.
Differential Revision: https://phab.mercurial-scm.org/D3046
Martin von Zweigbergk <martinvonz@google.com> [Mon, 02 Apr 2018 23:46:04 -0700] rev 37373
narrow: move manifestrevlog overrides to core
Differential Revision: https://phab.mercurial-scm.org/D3045
Martin von Zweigbergk <martinvonz@google.com> [Tue, 03 Apr 2018 00:13:02 -0700] rev 37372
narrow: move excludeddir and related classes to core
Differential Revision: https://phab.mercurial-scm.org/D3044
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 17:29:32 +0530] rev 37371
py3: add missing b'' prefix in mdiff.py
Transformer won't add b'' prefix because that value is already have a r''
prefix.
# skip-blame because just b'' prefix
Differential Revision: https://phab.mercurial-scm.org/D3132
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 17:15:52 +0530] rev 37370
py3: fix error string with bytestr() on repr()d value
Differential Revision: https://phab.mercurial-scm.org/D3131
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 17:14:11 +0530] rev 37369
py3: suppress output from f.write() function class
We need to suppress them because the output is not present on Python 2
Differential Revision: https://phab.mercurial-scm.org/D3130
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 17:13:09 +0530] rev 37368
py3: use pycompat.byteskwargs() in tests/autodiff.py
Differential Revision: https://phab.mercurial-scm.org/D3129
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 17:00:15 +0530] rev 37367
py3: suppress the output of open() using `and None`
This patch suppresses the output of open() on Python 3 as it does not return any
output on Python 2.
This makes test-diffstat.t pass on Python 3.5
Differential Revision: https://phab.mercurial-scm.org/D3128
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 16:56:34 +0530] rev 37366
py3: return bytes from util.removeauth()
util.hidepassword() also returns bytes and we should deal in bytes as much as
possible.
This makes test-logexchange.t pass on Python 3.5
Differential Revision: https://phab.mercurial-scm.org/D3127
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 16:54:56 +0530] rev 37365
py3: use bytes instead of str in instance()
We deal internally with bytes, so we should check whether the remote is a bytes
or not.
Differential Revision: https://phab.mercurial-scm.org/D3126
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 05 Apr 2018 16:46:34 +0530] rev 37364
py3: use pycompat.bytestr in test-journal.t
Differential Revision: https://phab.mercurial-scm.org/D3124
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Apr 2018 23:55:47 -0700] rev 37363
hgweb: don't include hidden revisions in /filelog/ view
This is a very crude way of doing it, but it seems to be working well
enough. The number of entries on the page won't be the usual maximum
number per page, but this is good enough for me.
Differential Revision: https://phab.mercurial-scm.org/D3122
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 00:00:48 -0700] rev 37362
tests: show that hgweb contains hidden revisions in /filelog/ view
Note that these entries contain the summary line of the hidden commit,
which is a bit a privacy issue to display. Also note that the links
from the entries take you to a page that says:
An error occurred while processing your request:
filtered revision '2d32257e1109' (not in 'served' subset)
Differential Revision: https://phab.mercurial-scm.org/D3121
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Apr 2018 09:03:17 -0700] rev 37361
convert: use repo.lookup() for converting to nodeid
This is a list of revs that come from the CLI (opts['rev']). Perhaps
we should allow any revset, but I'll leave that for someone else to
improve if they care.
Differential Revision: https://phab.mercurial-scm.org/D3089
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Apr 2018 22:36:21 -0700] rev 37360
extdatasource: use revsymbol() for converting to node
It's unclear what we want to support here. Perhaps it should just be
nodeids? It doesn't make much sense to share revnums between repos,
and bookmarks are probably too unstable. I used scmutil.revsymbol() to
preserve the current behavior. We can change later if we want to.
Differential Revision: https://phab.mercurial-scm.org/D3088
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Apr 2018 15:13:32 -0700] rev 37359
bookmarks: calculateupdate() returns a bookmark, not a rev
This changes the inaccurate/unclear documentation and also changes the
code so "node" now contains a binary nodeid.
Differential Revision: https://phab.mercurial-scm.org/D3087
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Apr 2018 10:13:08 -0700] rev 37358
pull: pass rev to check out as integer to postincoming()
I don't know if there's ever been a need for it to be a string (it's
been like that since 02f40b2ece3f (commands: use rev from remote repo
when updating as part of a pull, 2009-10-21)). I'm soon going to
require it to be an integer, so let's fix this first.
Differential Revision: https://phab.mercurial-scm.org/D3086
Martin von Zweigbergk <martinvonz@google.com> [Thu, 05 Apr 2018 14:21:37 +0530] rev 37357
children: support specifying revision by revset
Same reason as the previous patch.
Differential Revision: https://phab.mercurial-scm.org/D3085
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Apr 2018 15:08:26 -0700] rev 37356
heads: add support for specifying branches by revset
Before this commit, e.g. "hg heads .^" would fail with:
abort: unknown revision '.^'!
Like the previous patch, I don't care about the command itself (I
don't think I had ever used it before), I'm just cleaning up uses of
repo[<string>].
Differential Revision: https://phab.mercurial-scm.org/D3084
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Apr 2018 15:06:32 -0700] rev 37355
perf: make perfmanifest and perfnodelookup work with revsets
They were using repo[rev], which only works with a single symbol
(e.g. "." or "my-bookmark"), not general revsets. Switch them to
scmutil.revsingle() so they can also be used with e.g. ".^".
I don't actually care about these commands, but I want to remove uses
of repo[<string>].
Differential Revision: https://phab.mercurial-scm.org/D3083