Wed, 19 Sep 2018 16:51:57 -0700 localrepo: validate directories before creating any
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 19 Sep 2018 16:51:57 -0700] rev 39852
localrepo: validate directories before creating any There is no meaningful change in behavior because wdir would already exist in the case where we raised RepoError. But I think the code is easier to read if we do all validation first then take actions with side-effects. Differential Revision: https://phab.mercurial-scm.org/D4706
Wed, 19 Sep 2018 16:15:22 -0700 localrepo: add missing join()
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 19 Sep 2018 16:15:22 -0700] rev 39851
localrepo: add missing join() Differential Revision: https://phab.mercurial-scm.org/D4705
Wed, 19 Sep 2018 11:38:05 -0700 revlog: use proper version comparison during verify
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 19 Sep 2018 11:38:05 -0700] rev 39850
revlog: use proper version comparison during verify Verify appears to want to compare the changelog's revlog version number with the version number of filelogs and error if they are different. But what it was actually doing was comparing the full 32-bit header integer, which contains 2 shorts: 1 for the revlog version number and 1 for feature flags. This commit tweaks the verification code so it only looks at the version number component of the header and emits a warning if they differ. The new code is more robust because it accounts for future revlog version numbers without them needing to be special cased. Differential Revision: https://phab.mercurial-scm.org/D4704
Wed, 19 Sep 2018 11:22:56 -0700 filelog: stop proxying checksize() (API)
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 19 Sep 2018 11:22:56 -0700] rev 39849
filelog: stop proxying checksize() (API) This was only used by verify code. And the check using it is now implemented as part of verifyintegrity(). The method is unused and is revlog-centric, which means it isn't appropriate for the file storage interface. So remove it. Differential Revision: https://phab.mercurial-scm.org/D4703
Wed, 19 Sep 2018 11:20:02 -0700 filelog: remove version attribute (API)
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 19 Sep 2018 11:20:02 -0700] rev 39848
filelog: remove version attribute (API) This was only used by verify code. The check it was used for is now implemented as part of the verifyintegrity() implementation. The attribute is now unused, is revlog-specific, and isn't appropriate to be exposing on the file storage interface. So drop it. Differential Revision: https://phab.mercurial-scm.org/D4702
Wed, 19 Sep 2018 11:17:28 -0700 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 19 Sep 2018 11:17:28 -0700] rev 39847
verify: start to abstract file verification Currently, the file storage interface has a handful of attributes that are exclusively or near-exclusively used by repo verification code. In order to support verification on non-revlog/alternate storage backends, we'll need to abstract verification so it can be performed in a storage-agnostic way. This commit starts that process. We establish a new verifyintegrity() method on revlogs and expose it to the file storage interface. Most of verify.verifier.checklog() has been ported to this new method. We need a way to represent verification problems. So we invent an interface to represent a verification problem, invent a revlog type to implement that interface, and use it. The arguments to verifyintegrity() will almost certainly change in the future, once more functionality is ported from the verify code. And the "revlogv1" version check is very hacky. (The code in verify is actually buggy because it is comparing the full 32-bit header integer instead of just the revlog version short. I'll likely fix this in a subsequent commit.) Differential Revision: https://phab.mercurial-scm.org/D4701
Mon, 24 Sep 2018 08:58:57 -0700 unionrepo: remove _constructmanifest()
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Sep 2018 08:58:57 -0700] rev 39846
unionrepo: remove _constructmanifest() It is unused after a previous refactor. Spotted in D4641. Differential Revision: https://phab.mercurial-scm.org/D4700
Wed, 26 Sep 2018 08:46:56 -0700 merge with stable
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 26 Sep 2018 08:46:56 -0700] rev 39845
merge with stable
Tue, 25 Sep 2018 08:53:20 -0700 encoding: remove unnecessary lambdas from _encodingfixers
Martin von Zweigbergk <martinvonz@google.com> [Tue, 25 Sep 2018 08:53:20 -0700] rev 39844
encoding: remove unnecessary lambdas from _encodingfixers They have been unnecessary since 1a3a08b5d4d5 (encoding: remove workaround for locale.getpreferredencoding(), 2017-05-13). Also rename the variable since "fixer" sounds like a function. Differential Revision: https://phab.mercurial-scm.org/D4743
Tue, 25 Sep 2018 18:59:04 -0700 py3: cast exception to bytes
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 25 Sep 2018 18:59:04 -0700] rev 39843
py3: cast exception to bytes In order to appease Python 3. Differential Revision: https://phab.mercurial-scm.org/D4733
Tue, 25 Sep 2018 09:11:56 -0700 py3: cast exception to bytes
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 25 Sep 2018 09:11:56 -0700] rev 39842
py3: cast exception to bytes This was raising a TypeError on Python 3 and preventing most (all?) wireprotov2 commands from working. Differential Revision: https://phab.mercurial-scm.org/D4731
Tue, 25 Sep 2018 23:25:36 -0400 py3: remove a couple of superfluous calls to pycompat.rapply()
Matt Harbison <matt_harbison@yahoo.com> [Tue, 25 Sep 2018 23:25:36 -0400] rev 39841
py3: remove a couple of superfluous calls to pycompat.rapply() These places can only be strings.
Tue, 25 Sep 2018 22:11:17 -0400 py3: byteify an inline python test extension
Matt Harbison <matt_harbison@yahoo.com> [Tue, 25 Sep 2018 22:11:17 -0400] rev 39840
py3: byteify an inline python test extension # skip-blame for b'' prefixing
Tue, 25 Sep 2018 21:39:42 -0400 py3: conditionalize access to socketserver.ForkingMixIn
Matt Harbison <matt_harbison@yahoo.com> [Tue, 25 Sep 2018 21:39:42 -0400] rev 39839
py3: conditionalize access to socketserver.ForkingMixIn This is no longer exported on platforms that don't support forking, as of 3.6. https://github.com/python/cpython/commit/aadff9bea61a2fc9f4cf0f213f0ee50fc54d6574
Tue, 25 Sep 2018 22:46:18 -0400 convert: fix a file descriptor leak
Matt Harbison <matt_harbison@yahoo.com> [Tue, 25 Sep 2018 22:46:18 -0400] rev 39838
convert: fix a file descriptor leak test-check-code flagged this after I changed this line for something unrelated.
Wed, 26 Sep 2018 20:33:09 +0900 merge with stable
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Sep 2018 20:33:09 +0900] rev 39837
merge with stable
Tue, 25 Sep 2018 22:19:40 +0900 revlog: catch more specific exception in shortest()
Yuya Nishihara <yuya@tcha.org> [Tue, 25 Sep 2018 22:19:40 +0900] rev 39836
revlog: catch more specific exception in shortest() Since revlog._partialmatch() catches RevlogError coming from cext and re-raises AmbiguousPrefixLookupError, catching RevlogError here seems less correct. Differential Revision: https://phab.mercurial-scm.org/D4735
Mon, 24 Sep 2018 22:32:30 -0400 py3: update missing module list in test-check-py3-compat.t for Windows
Matt Harbison <matt_harbison@yahoo.com> [Mon, 24 Sep 2018 22:32:30 -0400] rev 39835
py3: update missing module list in test-check-py3-compat.t for Windows
Mon, 24 Sep 2018 20:31:42 -0700 py3: add b'' prefixes to wire protocol test
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Sep 2018 20:31:42 -0700] rev 39834
py3: add b'' prefixes to wire protocol test Otherwise the CBOR encoder fails on Python 3 due to lacking support for encoding str/unicode. # skip-blame just some b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D4734
Mon, 24 Sep 2018 20:17:42 -0700 py3: use pycompat.strkwargs()
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Sep 2018 20:17:42 -0700] rev 39833
py3: use pycompat.strkwargs() Otherwise we get an error attempting to dispatch a command with arguments because we're passing a dict with bytes keys. Differential Revision: https://phab.mercurial-scm.org/D4732
Mon, 24 Sep 2018 20:10:01 -0700 py3: ensure _start_response() is called with system string
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Sep 2018 20:10:01 -0700] rev 39832
py3: ensure _start_response() is called with system string This was preventing HTTP 500's from being sent in Python 3. Differential Revision: https://phab.mercurial-scm.org/D4730
Sun, 23 Sep 2018 00:47:04 -0400 py3: convert arguments, cwd and env to native strings when spawning subprocess
Matt Harbison <matt_harbison@yahoo.com> [Sun, 23 Sep 2018 00:47:04 -0400] rev 39831
py3: convert arguments, cwd and env to native strings when spawning subprocess This keeps Windows happy.
Fri, 21 Sep 2018 21:14:27 -0400 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com> [Fri, 21 Sep 2018 21:14:27 -0400] rev 39830
py3: apply byteskwargs to contrib/perf
Fri, 21 Sep 2018 20:28:00 -0400 py3: un-byteify strings around os.system() and os.devnull in contrib/perf
Matt Harbison <matt_harbison@yahoo.com> [Fri, 21 Sep 2018 20:28:00 -0400] rev 39829
py3: un-byteify strings around os.system() and os.devnull in contrib/perf
Fri, 21 Sep 2018 20:16:13 -0400 py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com> [Fri, 21 Sep 2018 20:16:13 -0400] rev 39828
py3: work around the lack of sys.maxint in contrib/perf
Fri, 21 Sep 2018 20:13:14 -0400 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com> [Fri, 21 Sep 2018 20:13:14 -0400] rev 39827
py3: switch contrib/perf from xrange to pycompat.xrange
Fri, 21 Sep 2018 20:10:36 -0400 py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com> [Fri, 21 Sep 2018 20:10:36 -0400] rev 39826
py3: handle sysstr conversion around get/set attr in contrib/perf
Fri, 21 Sep 2018 20:03:07 -0400 py3: proxy posixfile objects to re-add a useful 'name' attribute on Windows
Matt Harbison <matt_harbison@yahoo.com> [Fri, 21 Sep 2018 20:03:07 -0400] rev 39825
py3: proxy posixfile objects to re-add a useful 'name' attribute on Windows This file object is used in the vfs layer, so there are many errors like this: ... File "mercurial\localrepo.py", line 2569, in savecommitmessage return self.pathto(fp.name[len(self.root) + 1:]) TypeError: 'int' object is not subscriptable It looks like the 'name' value is actually the fileno() value, and the documentation says the name parameter to PyFile_FromFd() is ignored. [1] I tried just assigning the attribute after osutil.posixfile() returns, but that crashes saying that it's read-only. [1] https://docs.python.org/3.6/c-api/file.html
Sun, 23 Sep 2018 22:36:44 -0400 py3: don't use os.getcwdb() on Windows to avoid DeprecationWarnings
Matt Harbison <matt_harbison@yahoo.com> [Sun, 23 Sep 2018 22:36:44 -0400] rev 39824
py3: don't use os.getcwdb() on Windows to avoid DeprecationWarnings See also ac32685011a3.
Fri, 21 Sep 2018 19:48:23 -0400 py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com> [Fri, 21 Sep 2018 19:48:23 -0400] rev 39823
py3: rename pycompat.getcwd() to encoding.getcwd() (API) We need to avoid os.getcwdb() on Windows to avoid DeprecationWarnings, and we need encoding.strtolocal() to encode the result of os.getcwd().
Mon, 24 Sep 2018 22:46:22 -0400 py3: whitelist two more passing tests
Augie Fackler <augie@google.com> [Mon, 24 Sep 2018 22:46:22 -0400] rev 39822
py3: whitelist two more passing tests Caught by the ratchet, but initially only the non-legacy path of test-clone-uncompressed.t was passing. That required the preceding patch. Differential Revision: https://phab.mercurial-scm.org/D4729
Mon, 24 Sep 2018 22:45:32 -0400 keepalive: be more careful about self._rbuf when calling super impls
Augie Fackler <augie@google.com> [Mon, 24 Sep 2018 22:45:32 -0400] rev 39821
keepalive: be more careful about self._rbuf when calling super impls In Python 3, HTTPResponse implements read() in terms of readinto(), which was calling back into our readinto(), which duplicates self._rbuf if it's not empty. Before calling into super's read(), ensure self._rbuf is empty. Inheritance is bad, and undocumented self-use of your public API is one of many reasons. Differential Revision: https://phab.mercurial-scm.org/D4728
Mon, 17 Sep 2018 11:50:59 -0700 wireprotov2: teach changesetdata to fetch ancestors until depth
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 17 Sep 2018 11:50:59 -0700] rev 39820
wireprotov2: teach changesetdata to fetch ancestors until depth For shallow clone, it is useful to specify a starting node and tell the server to send up to N ancestors from that starting point. This enables the server to perform the DAG walk without the client having to discover the base/stop node(s) first. This commit implements support for said queries on the changesetdata command. Differential Revision: https://phab.mercurial-scm.org/D4621
Thu, 20 Sep 2018 12:57:23 -0700 wireprotov2: allow multiple fields to follow revision maps
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 20 Sep 2018 12:57:23 -0700] rev 39819
wireprotov2: allow multiple fields to follow revision maps The *data wire protocol commands emit a series of CBOR values. Because revision/delta data may be large, their data is emitted outside the map as a top-level bytestring value. Before this commit, we'd emit a single optional bytestring value after the revision descriptor map. This got the job done. But it was limiting in that we could only send a single field. And, it required the consumer to know that the presence of a key in the map implied the existence of a following bytestring value. This commit changes the encoding strategy so top-level bytestring values in the stream are explicitly denoted in a "fieldsfollowing" key. This key contains an array defining what fields that follow and the expected size of each field. By defining things this way, we can easily send N bytestring values without any ambiguity about their order. In addition, clients only need to know how to parse ``fieldsfollowing`` to know if extra values are present. Because this breaks backwards compatibility, we've bumped the version number of the wire protocol version 2 API endpoint. Differential Revision: https://phab.mercurial-scm.org/D4620
Mon, 17 Sep 2018 11:54:00 -0700 wireprotov2: advertise set of valid values for requestable fields
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 17 Sep 2018 11:54:00 -0700] rev 39818
wireprotov2: advertise set of valid values for requestable fields changesetdata, manifestdata, and filedata all allow the caller to specify what data fields to request. Data fields are extensible and may evolve over time. In order to prevent clients from making requests for fields that are not available, the client needs to know what fields are available. This commit teaches the server to declare a set of "valid values" for wire protocol command arguments. That set of values is exposed in the command's capabilities descriptor. The changesetdata, manifestdata, and filedata commands all declare their set of available "fields." Differential Revision: https://phab.mercurial-scm.org/D4619
Mon, 17 Sep 2018 10:15:27 -0700 wireprotov2: expose rich arguments metadata
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 17 Sep 2018 10:15:27 -0700] rev 39817
wireprotov2: expose rich arguments metadata Now that we internally store rich metadata about arguments, it makes sense to make that metadata available to the client. This will allow clients to validate outgoing command requests before they are sent over the wire. Strictly speaking, we should bump the wire protocol version for this change since it is backwards incompatible. But no client-side code touches the arguments map and I don't want to incur the work. Differential Revision: https://phab.mercurial-scm.org/D4618
Mon, 17 Sep 2018 09:49:28 -0700 wireprotov2: advertise recognized path filter prefixes
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 17 Sep 2018 09:49:28 -0700] rev 39816
wireprotov2: advertise recognized path filter prefixes While the wire protocol doesn't yet support it, we'll eventually have commands that accept narrow patterns to specify the set of files relevant to a command. For security and performance reasons, only specific filter types are allowed. This commit teaches the server to advertise the set of allowed filter types. By doing so, clients can e.g. validate user-specified patterns against the server's abilities without having to send a command to retrieve data. Having the data in the capabilities data structure will also serve as a check against unwanted BC. Differential Revision: https://phab.mercurial-scm.org/D4616
Thu, 30 Aug 2018 17:43:47 -0700 wireprotov2: declare command arguments richly
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 30 Aug 2018 17:43:47 -0700] rev 39815
wireprotov2: declare command arguments richly Previously, we declared command arguments with an example of their value. After this commit, we declare command arguments as a dict of metadata. This allows us to define the value type, whether the argument is required, and provide default values. This in turn allows us to have nice things, such as less boilerplate code in individual commands for validating input and assigning default values. It should also make command behavior more consistent as a result. Test output changed slightly because I realized that the "fields" argument wasn't being consistently defined as a set. Oops! Other test output changed because of slight differences in code performing type validation. Differential Revision: https://phab.mercurial-scm.org/D4615
Sat, 15 Sep 2018 17:26:23 +0900 annotate: pass in wdir rev and node to formatter (BC)
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Sep 2018 17:26:23 +0900] rev 39814
annotate: pass in wdir rev and node to formatter (BC) This is a part of the unification series. The 'ff..' hash is preferred over None as it is a valid revision specifier. https://www.mercurial-scm.org/wiki/GenericTemplatingPlan#Sanity_check_output
Sat, 15 Sep 2018 17:26:22 +0900 annotate: pass around full hex node until formatting plain output
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Sep 2018 17:26:22 +0900] rev 39813
annotate: pass around full hex node until formatting plain output In short, this patch moves h[:12] from hexfn() to formathex() so that formathex() can test if h is the wdirhex or not. This helps switching the wdir value to wdirrev/wdirhex. See the next patch.
Sat, 15 Sep 2018 17:26:21 +0900 log: fill in pseudo rev and node as wdir() manifest identifiers
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Sep 2018 17:26:21 +0900] rev 39812
log: fill in pseudo rev and node as wdir() manifest identifiers While we'll never support such identifiers to look up the manifest, this behavior seems more consistent.
Sat, 15 Sep 2018 17:26:20 +0900 log: have changesetformatter fill in wdir() rev and node (BC)
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Sep 2018 17:26:20 +0900] rev 39811
log: have changesetformatter fill in wdir() rev and node (BC) This matches the behavior of the default template keywords. wdir() support is still experimental so we can change the output.
Sun, 23 Sep 2018 16:11:01 +0900 hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988)
Yuya Nishihara <yuya@tcha.org> [Sun, 23 Sep 2018 16:11:01 +0900] rev 39810
hgweb: use scmutil.binnode() to translate None to wdir hash (issue5988) I left some of ctx.node() calls unchanged as they seemed unlikely to be workingctx, or passed to diff functions where None is the default value. Note that a None revision can also cause a similar problem, but I'm not sure if we can simply bulk-replace ctx.rev() with scmutil.intrev(ctx) as there's large hole between tip revision and wdir revision. If such pair were passed in to xrange() for example, we would waste CPU time.
Sun, 23 Sep 2018 16:15:48 +0900 hgweb: register web.static to the config table
Yuya Nishihara <yuya@tcha.org> [Sun, 23 Sep 2018 16:15:48 +0900] rev 39809
hgweb: register web.static to the config table Otherwise we would got a develwarn.
Sun, 23 Sep 2018 17:01:26 +0900 help: document web.static config
Yuya Nishihara <yuya@tcha.org> [Sun, 23 Sep 2018 17:01:26 +0900] rev 39808
help: document web.static config Spotted by check-config.py.
Mon, 24 Sep 2018 00:00:04 +0300 py3: use pycompat.strkwargs() in contrib/simplemerge
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 24 Sep 2018 00:00:04 +0300] rev 39807
py3: use pycompat.strkwargs() in contrib/simplemerge Differential Revision: https://phab.mercurial-scm.org/D4699
Sun, 23 Sep 2018 23:59:35 +0300 py3: add b'' prefixes in contrib/simplemerge
Pulkit Goyal <pulkit@yandex-team.ru> [Sun, 23 Sep 2018 23:59:35 +0300] rev 39806
py3: add b'' prefixes in contrib/simplemerge They were added using byteify-strings.py. # skip-blame because just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D4698
Sun, 23 Sep 2018 23:39:07 +0300 tests: use assertTrue() instead of assert_() in test-bdiff.py
Pulkit Goyal <pulkit@yandex-team.ru> [Sun, 23 Sep 2018 23:39:07 +0300] rev 39805
tests: use assertTrue() instead of assert_() in test-bdiff.py The later is deprecated in Python 3. This patch also makes the test pass on Python 3. Differential Revision: https://phab.mercurial-scm.org/D4697
Sun, 23 Sep 2018 23:35:38 +0300 py3: use '%d' for integers instead of '%s'
Pulkit Goyal <pulkit@yandex-team.ru> [Sun, 23 Sep 2018 23:35:38 +0300] rev 39804
py3: use '%d' for integers instead of '%s' Python 3 does not allow using "%s" for integers. This makes the test works on Python 3. The test still does not pass because there is a deprecation warning. Differential Revision: https://phab.mercurial-scm.org/D4696
Sun, 23 Sep 2018 23:34:22 +0300 py3: add b'' prefixes in tests/test-bdiff.py
Pulkit Goyal <pulkit@yandex-team.ru> [Sun, 23 Sep 2018 23:34:22 +0300] rev 39803
py3: add b'' prefixes in tests/test-bdiff.py This makes the test close to passing # skip-blame because just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D4695
Sun, 23 Sep 2018 22:57:17 +0300 py3: fix kwargs handling in hgext/absorb.py
Pulkit Goyal <pulkit@yandex-team.ru> [Sun, 23 Sep 2018 22:57:17 +0300] rev 39802
py3: fix kwargs handling in hgext/absorb.py This fixes couple of tests on Python 3. There is only one absorb test left failing on Python 3. Differential Revision: https://phab.mercurial-scm.org/D4694
Tue, 18 Sep 2018 19:26:44 -0700 filelog: stop proxying headrevs() (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 19:26:44 -0700] rev 39801
filelog: stop proxying headrevs() (API) The previous commit removed the last user of this method. It is redundant with heads() and adds little to no value other than convenience. Let's nuke it. Differential Revision: https://phab.mercurial-scm.org/D4663
Tue, 18 Sep 2018 19:00:17 -0700 hgweb: use heads() instead of headrevs()
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 19:00:17 -0700] rev 39800
hgweb: use heads() instead of headrevs() These appear to be the only callers of headrevs() on file storage objects. Let's port to heads() so we can remove headrevs(). Differential Revision: https://phab.mercurial-scm.org/D4662
Tue, 18 Sep 2018 18:56:02 -0700 filelog: record what's using attributes
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 18:56:02 -0700] rev 39799
filelog: record what's using attributes filelog and the file storage interface have some attributes that ideally shouldn't be there. This commit annotates some of those attributes with their users so we know where to look when it comes time to removing them. This exercise exposed a theme: many attributes are used by LFS, repo upgrade, verify, and special repo types (like bundlerepo). That points to missing abstractions on file storage to facilitate these special needs. Differential Revision: https://phab.mercurial-scm.org/D4661
Tue, 18 Sep 2018 18:21:47 -0700 filelog: stop proxying datafile (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 18:21:47 -0700] rev 39798
filelog: stop proxying datafile (API) It appears the censor code was the last user of this proxy. With there being a dedicated censor API, we can drop the proxy. Differential Revision: https://phab.mercurial-scm.org/D4660
Tue, 18 Sep 2018 18:03:41 -0700 filelog: stop proxying _addrevision() (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 18:03:41 -0700] rev 39797
filelog: stop proxying _addrevision() (API) There are no callers of this API in core. And I'm not sure why this proxy was added in the first place, as the commit that added it (1541e1a8e87d) didn't appear to have any callers in the repo either. Who knows. Differential Revision: https://phab.mercurial-scm.org/D4659
Tue, 18 Sep 2018 17:57:36 -0700 filelog: stop proxying compress() (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 17:57:36 -0700] rev 39796
filelog: stop proxying compress() (API) The censoring code was previously relying on this. With a dedicated censoring API on the interface, no consumers are left and we can stop proxying this method. Differential Revision: https://phab.mercurial-scm.org/D4658
Tue, 18 Sep 2018 17:56:15 -0700 filelog: stop proxying start(), end(), and length() (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 17:56:15 -0700] rev 39795
filelog: stop proxying start(), end(), and length() (API) These were needed by the censoring code, which formerly lived in the censor extension. Now that there is a censoring API on the file storage interface, nothing uses these methods and we can stop proxying them. Differential Revision: https://phab.mercurial-scm.org/D4657
Tue, 18 Sep 2018 17:51:43 -0700 revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 17:51:43 -0700] rev 39794
revlog: move censor logic out of censor extension The censor extension is doing very low-level things with revlogs. It is fundamentally impossible for this logic to remain in the censor extension while support multiple storage backends: we need each storage backend to implement censor in its own storage-specific way. This commit effectively moves the revlog-specific censoring code to be a method of revlogs themselves. We've defined a new API on the file storage interface for censoring an individual node. Even though the current censoring code doesn't use it, the API requires a transaction instance because it logically makes sense for storage backends to require an active transaction (which implies a held write lock) in order to rewrite storage. After this commit, the censor extension has been reduced to boilerplate precondition checking before invoking the generic storage API. I tried to keep the code as similar as possible. But some minor changes were made: * We use self._io instead of instantiating a new revlogio instance. * We compare self.version against REVLOGV0 instead of != REVLOGV1 because presumably all future revlog versions will support censoring. * We use self.opener instead of going through repo.svfs (we don't have a handle on the repo instance from a revlog). * "revlog" dropped * Replace "flog" with "self". Differential Revision: https://phab.mercurial-scm.org/D4656
Tue, 18 Sep 2018 16:47:09 -0700 global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 16:47:09 -0700] rev 39793
global: replace most uses of RevlogError with StorageError (API) When catching errors in storage, we should be catching StorageError instead of RevlogError. When throwing errors related to storage, we shouldn't be using RevlogError unless we know the error stemmed from revlogs. And we only reliably know that if we're in revlog.py or are inheriting from a type defined in revlog.py. Differential Revision: https://phab.mercurial-scm.org/D4655
Tue, 18 Sep 2018 16:45:13 -0700 error: introduce StorageError
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 16:45:13 -0700] rev 39792
error: introduce StorageError Errors in revlogs are often represented by RevlogError. It's fine for revlogs to raise a revlog-specific exception. But in the context of multiple storage backends, it doesn't make sense to be throwing or catching an exception with "revlog" in its name when revlogs may not even be in play. This commit introduces a new generic StorageError type for representing errors in the storage layer. RevlogError is an instance of this type. Interface documentation and tests referencing RevlogError has been updated to specify StorageError should be used. .. api:: ``error.StorageError`` has been introduced to represent errors in storage. It should be used in place of ``error.RevlogError`` unless the error is known to come from a revlog. Differential Revision: https://phab.mercurial-scm.org/D4654
Tue, 18 Sep 2018 16:28:17 -0700 revlog: drop LookupError alias (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 16:28:17 -0700] rev 39791
revlog: drop LookupError alias (API) This alias is especially bad because it shadows the built-in LookupError type. This has caused me confusion in the past when reading revlog code. Qualifying all uses with "error." will make it obvious that we're using a Mercurial error type. Differential Revision: https://phab.mercurial-scm.org/D4653
Tue, 18 Sep 2018 16:24:36 -0700 revlog: drop some more error aliases (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 16:24:36 -0700] rev 39790
revlog: drop some more error aliases (API) These should be lightly used and I doubt that will be any strong objections to removing the aliases. Note that some uses of ProgrammingError in this file use translated messages. I'm pretty sure that's a bug. But the linters don't complain, so meh. Differential Revision: https://phab.mercurial-scm.org/D4652
Tue, 18 Sep 2018 16:18:37 -0700 revlog: drop RevlogError alias (API)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 18 Sep 2018 16:18:37 -0700] rev 39789
revlog: drop RevlogError alias (API) error.RevlogError was moved from revlog.py in 08cabecfa8a8 in 2009. revlog.RevlogError has remained as an alias ever since. Let's drop the alias and use error.RevlogError directly. Differential Revision: https://phab.mercurial-scm.org/D4651
(0) -30000 -10000 -3000 -1000 -300 -100 -64 +64 +100 +300 +1000 +3000 +10000 tip