Commit Graph

20394 Commits

Author SHA1 Message Date
Phil Cohen
740831270a context: fix a truthy check in overlayworkingctx.data()
Summary:
This if statement is testing whether we ever set any data, not whether the data is truthy.

This can cause a bug where rebasing an empty file can cause IMM to fail and restart.

Test Plan: ./run-tests.py

Reviewers: durham, #mercurial

Reviewed By: durham

Differential Revision: https://phabricator.intern.facebook.com/D6687459

Signature: 6687459:1515535581:c2018237f3ca9daed6a0cb2f5a1475d1dc8e4865
2018-01-16 17:24:23 -08:00
Phil Cohen
d252e1a488 merge: only abort in IMM if files are actually marked as driver-resolved
Summary:
Before, we would raise whenever the `usemergedriver` condition was set when merging in-memory,
which equated to "any merge with (cd, dc, or m) actions in a repo with a mergedriver script".
This was done to be as conservative as possible.

However, a better solution is to run the preprocess() script and only raise if any files are
marked to actually be driver-resolved. That way we only restart the merge if we absolutely need
to.

Since some of our preprocess() scripts aren't ready yet, I also added
experimental.inmemory.nomergedriver in a previous change so we can deploy this in a build before the preprocess scripts are good to go.

Test Plan: ./run-tests.py

Reviewers: quark, #sourcecontrol

Reviewed By: quark

Subscribers: durham

Differential Revision: https://phabricator.intern.facebook.com/D6668426

Signature: 6668426:1515185050:a640208454caf053f8213b831d0f8e645ebe682c
2018-01-16 17:24:16 -08:00
Phil Cohen
24f40237ba filemerge: fix backing up an in-memory file to a custom location
If the user specifies a ui.origbackuppath, we used to always copy the file
there, but if the source file is in memory we must write it instead of copying.

Differential Revision: https://phab.mercurial-scm.org/D1806
2018-01-16 17:23:40 -08:00
Phil Cohen
a1c1d5e38d merge: fix default value for experimental.inmemorydisallowedpaths 2018-01-16 17:23:22 -08:00
Phil Cohen
8a4473f1d0 merge: log which files were driver-resolved to scuba
Summary: Log whichever paths were driver-resolved but not in experimental.inmemorydisallowedpaths, so we can update experimental.inmemorydisallowedpaths and keep the experience of rebasing with IMM and
mergedriver a pleasant one.

Test Plan: .

Reviewers: #sourcecontrol

Differential Revision: https://phabricator.intern.facebook.com/D6656159
2018-01-16 17:23:15 -08:00
Kevin O'Sullivan
fa38fee98f Using a set() for names to remove duplicates before calling bookmarks.delete
Summary: Fixing a bug that causes a fatal crash when a user attempts to delete a bookmark by inputting it's name twice, for example:

# hg bookmark --delete name name
Test Plan: The following test has been added in the test/test-bookmarks.t file
https://pxl.cl/bmTf
 to test the new functionality:

~~~
kosullivan-mbp:hg-crew kosullivan$ hg diff tests/test-bookmarks.t
diff --git a/tests/test-bookmarks.t b/tests/test-bookmarks.t
--- a/tests/test-bookmarks.t
+++ b/tests/test-bookmarks.t
@@ -288,6 +288,10 @@
   abort: bookmark 'A' does not exist
   [255]

+ensure bookmark names are deduplicated before deleting
+  $ hg book delete-me
+  $ hg book -d delete-me delete-me
+
 bookmark name with spaces should be stripped

   $ hg bookmark ' x  y '
~~~
Reviewers: rmcelroy,rafeca
Subscribers: suiting
Tags: python,bootcamp,source_control
Tasks: 22525999
Differential Revision: https://phabricator.intern.facebook.com/D6711774
2018-01-16 15:20:21 +00:00
Phil Cohen
72085d2e96 testdir: fix test-extension.t for DEFAULT_EXTENSIONS
Differential Revision: https://phabricator.intern.facebook.com/D6718663
2018-01-14 14:53:52 -08:00
Phil Cohen
6095f32f96 extensions: enable githelp by default
Summary:
Demonstrate the full power of this batte station with the first extension to be default-enabled, `githelp.py`. This also lets us write a test for `DEFAULT_EXTENSIONS`
(`test-extensions-default.t`)

All other test changes are actual fallout from enabling the githelp extension.

Test Plan: Added a test.

Differential Revision: https://phabricator.intern.facebook.com/D6717098
2018-01-12 16:45:54 -08:00
Phil Cohen
051f25cfd3 extensions: add a list of always-on extensions
Summary:
Based on in-person discussion in the warroom, we think this is the right path forward to "upstream" certain extensions without actually folding them into the mercurial/ codebase.

Enabling extensions by default achieves most of our goals (testing _everything_ in tests, reducing configuration permutations) without having to pay an up-front cost of fixing all the code today or accepting subpar code in mercurial/.

Test Plan: ./run-tests.py.

Reviewers: quark, #mercurial

Reviewed By: quark

Subscribers: quark

Differential Revision: https://phabricator.intern.facebook.com/D6716674

Signature: 6716674:1515803845:a209ec288341e4de8e79fd3759250e834a3573e3
2018-01-12 16:45:54 -08:00
Phil Cohen
c097dde0b9 READMEs: tweaks based on feedback
Summary: Based on feedback to D6687860.

Test Plan: n/a

Reviewers: durham, #mercurial

Reviewed By: durham

Differential Revision: https://phabricator.intern.facebook.com/D6714211

Signature: 6714211:1515788399:386b8f7330f343349234d1f317e5ac0a594142cf
2018-01-12 12:35:52 -08:00
Jun Wu
5c05ef8327 extensions: forbid "foo=" from importing foreign mercurial modules
Summary: This avoids issues where a wrong (outside the repo) extension was used.

Test Plan: Ran all tests

Reviewers: durham, #mercurial

Reviewed By: durham

Subscribers: durham

Differential Revision: https://phabricator.intern.facebook.com/D6690534

Signature: 6690534:1515632034:1353c9272650cf925dd299d252592afd52970e98
2018-01-09 17:06:09 -08:00
Phil Cohen
bf8527e7a9 lib: add READMEs to lib, extlib, cext 2018-01-09 15:20:46 -08:00
Jun Wu
26485b34fb cython: move extensions to better places
Summary:
clindex is an hg extension, so moved to `hgext`.
linelog is not an hg extension, but is only used by hg extensions, not
`mercurial/`, so moved to `hgext/extlib`.

Test Plan: `make local` and `run-tests.py` without `-l` and with an empty `PYTHONPATH`.

Reviewers: durham, #mercurial

Reviewed By: durham

Subscribers: fried

Differential Revision: https://phabricator.intern.facebook.com/D6685080

Signature: 6685080:1515525106:88ebb275d0cac041911f243a3e82b82482b6cd34
2018-01-09 10:50:46 -08:00
Kostia Balytskyi
edc5c3ab25 fb-hgext: move clindex to core
Summary:
Move clindex to core.

Depends on D6683664

Test Plan: - run tests, see them pass

Reviewers: #sourcecontrol

Differential Revision: https://phabricator.intern.facebook.com/D6683689
2018-01-09 08:42:20 -08:00
Phil Cohen
bc45549249 filemerge: only write in-memory backup during premerge
This wasn't broken, but should mirror the non-in memory case to save an extra write.

Differential Revision: https://phab.mercurial-scm.org/D1807
(grafted from d592d5905ae972407fb6f9d649db1e2d41bf6c85)
(grafted from 9111386f1fe8316b9079669d0bd0e33704ba2a0c)
2018-01-09 06:29:25 -08:00
Mark Thomas
aeeba5db75 help: blacklist hgext/extlib module from help.
Summary:
`hg help` shows a list of all disabled extensions, which is gets by looking at
all submodules in the `hgext` modules.  Exclude the new `extlib` submodule,
which is actually just a container for extension libraries.

Test Plan: Re-run `test-help.t`.

Reviewers: durham, #mercurial

Reviewed By: durham

Differential Revision: https://phabricator.intern.facebook.com/D6679750

Tasks: T24908724

Signature: 6679750:1515458834:8813e9ea9aaf6a4d55d24bc8a48ddc628f6070fa
2018-01-08 17:01:31 -08:00
Jun Wu
1802036ff3 linelog: move to lib/ and mercurial/cyext
Summary:
The `lib/linelog` directory contains pure C code that is unrelated from
either Mercurial or Python. The `mercurial/cyext` contains Cython extension
code (although for linelog's case, the Cython extension is unrelated from
Mercurial).

Cython is now a hard dependence to simplify the code.

Test Plan: `make local` and check `from mercurial.cyext import linelog` works.

Reviewers: durham, #mercurial

Reviewed By: durham

Subscribers: durham, fried

Differential Revision: https://phabricator.intern.facebook.com/D6678541

Signature: 6678541:1515455512:967266dc69c702dbff95fdea05671e11c32ebf28
2018-01-08 14:35:01 -08:00
Ryan McElroy
722a16ea0c lz4revlog: document uselz4 in config help 2018-01-03 07:16:04 -08:00
Phil Cohen
1a2012bad3 merge: raise before running mergedriver if using IMM
Merge driver scripts run in the working copy, so disable with IMM for now.

Differential Revision: https://phab.mercurial-scm.org/D1781
2018-01-03 05:35:56 -08:00
Phil Cohen
a39703fdff filemerge: only raise InMemoryMergeConflictsError when running _xmerge
The old code here was overly broad and would raise in cases when we didn't end
up calling `xmerge` and resolved using an internal tool (such as when
`premerge=True`).

Instead, let's swap out _xmerge if IMM is enabled and have the new tool raise
when called, which is the behavior we want.

Differential Revision: https://phab.mercurial-scm.org/D1739
2018-01-03 05:35:56 -08:00
Zhihui Huang
5518fa1a0b Backed out changeset 4dd462c5c1c3 2018-01-03 05:35:56 -08:00
Zhihui Huang
274bc5fb01 verify: add --rev support
Differential Revision: https://phabricator.intern.facebook.com/D6558110
2018-01-03 05:35:56 -08:00
Jun Wu
a597df3749 commandserver: unblock SIGCHLD
This enables the SIGCHLD handler to work properly if some buggy program
started chg server with SIGCHLD blocked.

A test of this probably requires C code, but we don't have such kind of
tests already. Since this is a simple and clear fix, I'm leaving it as
"untested" but I did a manual test and there were no longer zombie workers.

Differential Revision: https://phab.mercurial-scm.org/D1737
2018-01-03 05:35:56 -08:00
Jun Wu
57ef465cca osutil: add a function to unblock signals
Signals could be blocked by something like:

  #include <unistd.h>
  #include <signal.h>
  int main(int argc, char * const argv[]) {
    sigset_t set;
    sigfillset(&set);
    sigprocmask(SIG_BLOCK, &set, NULL);
    execv("/bin/hg", argv);
    return 0;
  }

One of the problems is if SIGCHLD is blocked, chgserver would not reap
zombie workers since it depends on SIGCHLD handler entirely.

While it's the parent process to blame but it seems a good idea to just
unblock the signal from hg. FWIW git does that for SIGPIPE already [1].

Unfortunately Python 2 does not reset or provide APIs to change signal
masks. Therefore let's add one in osutil. Note: Python 3.3 introduced
`signal.pthread_sigmask` which solves the problem.

`sigprocmask` is part of POSIX [2] so there is no feature testing in
`setup.py`.

[1]: 7559a1be8a
[2]: http://pubs.opengroup.org/onlinepubs/7908799/xsh/sigprocmask.html

Differential Revision: https://phab.mercurial-scm.org/D1736
2018-01-03 05:35:56 -08:00
Jun Wu
1c69fbf161 phase: backout "generate a push-race detection part on push"
It's causing issues with pushrebase. See https://fburl.com/hd5yz5w6
(grafted from 431521982e6add35955b5b5e8b74d9e317d9ca0c)
(grafted from 8e34bb24dfc0436a65724f30e601efd08b6f2abd)
(grafted from 72e1214d63bd8de353fd1e9d1ffedc4d338fadde)
(grafted from 3588155212ad313a7abd52e44f7ebde5fedbfe06)
(grafted from de91755cc930607220d0926effc69506ca85eabc)
(grafted from 8a44eb22d38c9a60ec6102d43f5b7b5ba60100ab)
(grafted from 396b563d93e5645d4a4ec60ecf56bd91ab28f3be)
(grafted from 14a53b4cf2b352e88a3bcfda5075f9679d067b61)
(grafted from 457c63699089270e6658e1186c70a5bc3426f183)
(grafted from 5e525709296041b77cda5d9f04176a31784afbb7)
(grafted from 80926668f057e712eb11fdc580f65501830f4f8c)
(grafted from a350ecb9b0e94a332fdfebb7f0bba72d87a687ca)
2018-01-03 05:35:56 -08:00
Jun Wu
db43fda5b7 bundlerepo: always copy bundle parts before processing
This fixes treemanifest-infinitepush.
(grafted from 0364e7f0f9ef7eb92c7ca6f825cd252d1ecdac2e)
(grafted from c62ae0604a5124ae799f3ba7e309c23696fbd03d)
(grafted from e4b056930eb739c01d34a04e852643bf9c175d77)
2018-01-03 05:35:56 -08:00
Michael Bolin
4c9e29681a dirstate: change all writes to dirstatemap._map to go through one method
Summary:
This separates some concerns that were introduced in
https://phab.mercurial-scm.org/D1341.

In particular, this makes it easier for `eden_dirstate` to provide its own
implementation, which incidentally, does not use `dirstatetuple`.

Test Plan:
Ran this against a complementary change in Eden and verified that all of Eden's
integration tests pass.

Reviewers: mbthomas, durham, #hg-reviewers!

Subscribers: mercurial-devel

Differential Revision: https://phab.mercurial-scm.org/D1354
(grafted from eb6590eec45176982198e1a91ccae5821f65958c)
(grafted from 43c991e04a2a1e56918040db8e7c0ea49d3d0abe)
(grafted from 4926c8af95b45593749ef96a194a1a065d916b3c)
(grafted from 5c77cbac5f578e3924a76f7017bf5d34b6718757)
(grafted from 14cf809e89209da973d17b38a8cde9fe6659e424)
(grafted from 7ddca31c3875fdcaf7a2a64198bbb321ec1cb018)
2018-01-03 05:35:56 -08:00
Kostia Balytskyi
e8eaa18f75 chgserver: import sys module
(grafted from 9e9ff559440e4733fda49ddeb1b9ce5e7c9660af)
(grafted from b14a9cd166ad6e48284ad887a7a47537ab4b1df4)
(grafted from 749be17f25a14a0a91d9e68e68df77a1b305eb7f)
(grafted from fd3caadd0a3f365551334f346875799964056354)
(grafted from ce1070bbc53c18d0afa9ba6fe000588c4fb3cf33)
(grafted from 834c5948156ceb0be31c40e95293277d9648f423)
(grafted from 24ec6b8d9402b53d38f9763b4706afaca4fb5b20)
(grafted from 0104f253d24f416e8034f302fd2bd57ec2cdbd3e)
(grafted from 893aadeea79010ca5e039a6bfaaca7471f7d9061)
(grafted from dc447bcdf1499da52b43723426aefd4b1cec4c01)
(grafted from 2db9cf55d1566b7273342b711073a57e075b11f3)
2018-01-03 05:35:56 -08:00
Jun Wu
acca580d61 chgserver: reduce idletimeout for non-common usecases
This should be effective to reduce the number of chg servers on OS X.
(grafted from 64cc416c50a4c54dfcebdbdcea73ea0a4dcc6b12)
(grafted from 4d35490df4c269132c43e5783d12697735ef1eae)
(grafted from 0f739f622491de9c6f7cfe3d8949843923291d95)
(grafted from ae11921088ae3ec06726719c7037ce7e9fb204a1)
(grafted from c1d14170449337f008d0f09e9c940309021236c8)
(grafted from e5d909b77f32f7d2e36c76cc318876e999d8cffe)
(grafted from 50a780fc7fb2ac422250d4aad426e0d010f5a290)
(grafted from f66d8cc7d1a72ece27e4ec682fa9e2401a50e2d2)
(grafted from a2fae201970502c50a7240a1fd8a597cc83f9db9)
(grafted from a102b2c1deb978bfc69be02730f9685062835691)
(grafted from dd3133eae2ba7268310115196c53135f0ccd3087)
2018-01-03 05:35:56 -08:00
Durham Goode
bd57c81881 config: disable config devel-warn
(grafted from 3b15fb83e1d940a65b107422c4c8e34c9ecabf87)
(grafted from ed74ebc92814da5283e2cedbcfcaabb3f0c16f40)
(grafted from fbe58b0351a20121f1cfd68c80b37ded8f94e81d)
(grafted from 89e8affd3e204663e9ec57bfb2653c9f253553ce)
(grafted from 5b88b03fc62991939872516eb04dd35583225157)
(grafted from 3e4861b738936daa58b881e07af850cb9ffa336e)
(grafted from b05e674be709c24b61540eccf692bee5ba88536b)
(grafted from 28bd58eace4db7dc6ce739e9594974b3fe0d62ca)
(grafted from 8ec38a43c525ee62e8f46dd4be03fcbf63273760)
(grafted from f91b3053b66e4425d21bdbe7399832beeccd497e)
(grafted from 6658c07390dc0c27ec8f91effeeccaab34ca7d20)
2018-01-03 05:35:56 -08:00
Durham Goode
f13c34a644 serve: move hg-ssh readonly logic into hg serve
Recently hg-ssh was changed to block writes via in-memory hook configuration
instead of by passing config hooks, and dispatch.py blocks any invocation of hg
serve --stdio that has options passed. We have infrastructure that sets up read
only serve processes without using hg-ssh, and it was broken by this change.

Let's add a --read-only option to hg serve so non-hg-ssh solutions can still
launch hg in read-only mode. This makes it also work with non-stdio serve
processes as well.
(grafted from 7a0ed9aad8526f689343a5a02aa4a66e5f3be1f2)
(grafted from bf33f750447d8b0dfeae2a311e1d1eb93e19d6a0)
(grafted from 9ada6a6e4ac2a92325592cd58edd9160e17c9e31)
(grafted from 50e676e99c3b7cc929ceaaebbd3c684a8a58f9d8)
(grafted from 01833a49fa4dca204dc0e606f21279530925307c)
(grafted from 301af2e1a42fe912acf90ae9a87ca6a20ce5cd5d)
(grafted from 6ae2eaad3edbfdfb04ac5880a86341e69980529c)
(grafted from fcdedd417b29d28797840fc2393e0ff846fa54c8)
(grafted from ddda3705adfb2ac103f506d694d2b30028dfaca9)
(grafted from 138e3cf3bc394c4ff507341a390e1876c7104042)
(grafted from f8073d595e87086213525dbb642962b84158ee9a)
(grafted from 96bac04dc722030250a53616f0fb55125829f25e)
(grafted from 2aeed48cc3b3324b564343d8515aed1ecec69b14)
(grafted from 4fb2e02a273c868febdae9530b0a07a53a0e92a7)
(grafted from c57b28835f0b880c075d5b8aa99ddb9da54b21b1)
(grafted from 35fd78b021bec96db63e8dd99f98efc3b2342380)
(grafted from 9ac14f96c9a82068f07a709374f359283c206791)
(grafted from 4b64c191a9aacd52ea58ae8ec943605667759398)
(grafted from 1db390a79e32db12dde7a225e26b86ed245f9473)
(grafted from 9a999ed1ce50af8e5fa03dc270488c37304d8c94)
(grafted from b6791f2eb83f176192c9df50c736bc4c54fab5a6)
(grafted from 4b6e87c5be38d9971399e4ad989e4261f283b93a)
(grafted from ae660c075b4af0849d1ff5d36404ef66aeea9933)
(grafted from ff0f3bf0834b38a527654495369cd538ca8744f4)
(grafted from bff8177767c9023295ff93bc520114bb909952a8)
(grafted from 05a833e4071b9da7b447669f6bd8a3f62c1d3c27)
(grafted from be8ab299731fb8295efbe10a014798c7a177d4a0)
(grafted from beec2bc2ebd9eaf7093bba5fca8fef07c669d970)
(grafted from 03d88ba3cd8795d17a99dc1b50ac55e1937d38e1)
(grafted from 92a33bc0d275a96c61553f8bccefcd32f1360931)
(grafted from 3d37833f54e37356f3e32db2ad8fb2ffe4fa14f2)
(grafted from 77fa3393787a9410e14afc26465abb5561253075)
(grafted from 9d908f86cc7986c167cef5cdccaabb565fd2bc04)
(grafted from 0dbc2023c42f72aea6b608e5111725163dcbb64b)
(grafted from 3acf4e9bb718617efaf31abcba583b9b7be2559d)
(grafted from c671696a06e418f5f040427efb3e51fe4c9fa6cd)
(grafted from 309f11e682eb3c6fa497bf767cbcbef3b0dbaf4b)
(grafted from 4f828ef4b70a6a16fe747d5f6393042bff204b5e)
(grafted from 71193e84a71d029dedc744882978285cbe5722e6)
(grafted from 2929832c61c9727bd884f94da5afa29e80334a96)
(grafted from 2ff8a9f1761f82ffa8ebd2a96d86f7de7c712d9c)
(grafted from b438cb1e6cff36e7e197da7669def8a5e528053c)
(grafted from a9ed103481b779af9e160d2b81a9bfe81cc7d173)
(grafted from d139e95d22dc811002dafef1ecaac5dac99825fe)
(grafted from b4e41a9f2c3a6328ada72810407686d11833347c)
(grafted from 2b3826c7b3bdf669b397f1ad31ae106a05d7b05b)
(grafted from 23737fb5e1d6874cf79a1eb841dd1614c0295a1b)
(grafted from 69588396b17d3dafeece8bc9e2101559d871d9fb)
(grafted from b3252a277a53b1657e6bcf31359b413d2becffcc)
(grafted from 12c8e6062d34d4d6cf0b0128084278800a1ed8f7)
(grafted from 8ce5c67748afbe6e82fc3f822e35ddc58cb03694)
(grafted from b0f656426efcf9a70386b1c781507f40ab95af49)
(grafted from 147ae96993dcffbed2f39f31795ef3d60631d43f)
(grafted from 2ecb34a565accf638e6004c59aa5b2d2361f9428)
(grafted from 6bfc53cd4c479b4e789d4086a2c7c2f4045a288f)
(grafted from bf73f92394a079928db6d4b0b3e7aa78448af91a)
(grafted from b69a654342339eb740527fc84af523eb53edeb71)
(grafted from 3f090f44e8a33cde8d5708454a5292d0976269e6)
(grafted from ac4432275d3b750405e53f67b1267579764f4fee)
(grafted from dbfd0bce0eded53dc7d824393f03ddd2f2e693fb)
(grafted from bf7087d072ca6c5d5dac2ddef4c43339d02f6133)
(grafted from b9d63feb8c90f83e74f3e9a89328419c81088082)
(grafted from 718e93a4e545f3e16d09c66f210a567427f1068a)
(grafted from e0ba57c8bf13ccc45b7eaa62d64e03038cd002ad)
(grafted from 5c849011421ad00ef190c2bf15c640656424f681)
(grafted from e833de714167fe6039b42f1cd1890b0470a32ea2)
(grafted from 480872890137130564910a29ed8ef3890810f0c4)
(grafted from 6224dc455a24542cf7d55721fceb14a08e92d391)
(grafted from 24ced5d2b0d6fb837a3994a80ef808e29f62ccc5)
(grafted from 452eb5c8624cc22867fafa692c6c7905e46da27a)
(grafted from cdc9f1b121878c26c986eca2233b5d03ea50ad74)
(grafted from 8b3a45fe3a612fdbee3a1f291f41bfaadfd16a6f)
(grafted from 2a07c0b3cb9785a9f8d5d669b885044e4d4544b1)
(grafted from 56d892df53cfdf3a13f38cd386a437ea59ef0d77)
(grafted from b63c65fad2d28a86a3bc3871d58e45019b11e6a1)
(grafted from 8618bd56f309543d8577000a4310fdf8648f1087)
(grafted from e04c7ddddc5cc40d6347d2336b81d5be2289243e)
(grafted from 5951fe6318d02a9b739f0174f3aecc3d5eead31c)
(grafted from 0f4d380f641a55791ca9eef13cd49da24cf40a7a)
(grafted from d7ecf3376e572d77b670cbe2184370b08d38dcf7)
(grafted from a75534c9e6d7a481303096e44e265593fb5b0b2f)
2018-01-03 05:35:56 -08:00
Mateusz Kwapich
acd4d4a638 debugcommands: fix an obvious type error
Summary: It surprising that this bug lasted for over a year.

Test Plan:
there's no tests for it. Do we have any tooling for simulating the inconsitent
state?

Reviewers: phillco, #mercurial

Reviewed By: phillco

Subscribers: baq

Differential Revision: https://phabricator.intern.facebook.com/D6651663

Signature: 6651663:1514938468:715869f443e24d7921c9a67b32d36c66fdf61a92
2018-01-03 04:45:18 -08:00
Augie Fackler
eed6eb51f4 merge with stable 2017-12-19 16:27:24 -05:00
Wojciech Lis
75dbf9e567 worker: handle interrupt on windows
After applying suggestions from https://phab.mercurial-scm.org/D1564
to catch all exceptions in the same way I actually broke the handling of
KeyboardInterrupt on windows. The reason is that KeyboardInterrupt doesn't
dervie from Exception, but BaseException:
https://docs.python.org/2/library/exceptions.html starting from python 2.5

Test Plan:
Run hg on windows and ctrl-c during a large update. No random
exceptions from threads surface in the shell. Previously we'd nearly always get
stack traces from some of threads

Run tests ./run-tests.py
[...]
Failed test-convert-svn-encoding.t: output changed
# Ran 622 tests, 41 skipped, 1 failed.
python hash seed: 2962682116

The test failing seems to have nothing to do with the change and fails on base
revision as well

Differential Revision: https://phab.mercurial-scm.org/D1718
2017-12-18 15:18:37 -08:00
Yuya Nishihara
3985a8fdb4 diff: disable diff.noprefix option for diffstat (issue5759)
We could use patch.diffhunks() instead of patch.diff() to get filenames
without parsing patch content, but that isn't always possible because we
sometimes feed raw patch data to patch.diffstat().
2017-12-17 18:43:05 +09:00
Yuya Nishihara
e6f35d04b2 hgweb: disable diff.noprefix option for diffstat
Copied from 62d04dd7ece9.
2017-12-17 18:28:15 +09:00
Yuya Nishihara
788c9042f0 debugssl: convert port number to int (issue5757)
It doesn't use util.getport(), which may resolve service name to port number.
2017-12-14 22:07:46 +09:00
Anton Shestakov
e82ef1ea39 templater: fix "one arguments" 2017-12-12 16:29:26 +08:00
Boris Feld
cf4679a55d debuginstall: add a line about re2 availability
Using re2 engine can massively speed up regexp. We make it simpler to check if
it is available in a given install.
2017-11-27 18:48:36 -05:00
Mark Thomas
107956c510 merge: check created file dirs for path conflicts only once (issue5716)
In large repositories, updates involving the creation of many files check the
same directories repeatedly in the wctx manifest.  Move these checks out to a
separate loop to avoid repeated checks hitting the manifest.

Differential Revision: https://phab.mercurial-scm.org/D1226
2017-11-24 12:53:58 -08:00
Mark Thomas
2f4962c2a4 merge: cache unknown dir checks (issue5716)
As mentioned in D1222, the recent pathconflicts change regresses update
performance in large repositories when many files are being updated.

To mitigate this, we introduce two caches of directories that have
already found to be either:

  - unknown directories, but which are not aliased by files and
    so don't need to be checked if they are files again; and

  - missing directores, which cannot cause path conflicts, and
    cannot contain a file that causes a path conflict.

When checking the paths of a file, testing against this caches means we can
skip tests that involve touching the filesystem.

Differential Revision: https://phab.mercurial-scm.org/D1224
2017-11-24 12:53:58 -08:00
Yuya Nishihara
5ff5d9b38c dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
If this feature is enabled, early options are parsed using the global options
table. As the parser stops processing options when non/unknown option is
encountered, it won't mistakenly take an option value as a new early option.
Still "--" can be injected to terminate the parsing (e.g. "hg -R -- log"), I
think it's unlikely to lead to an RCE.

To minimize a risk of this change, new fancyopts.earlygetopt() path is enabled
only when +strictflags is set. Also the strict parser doesn't support '--repo',
a short for '--repository' yet. This limitation will be removed later.

As this feature is backward incompatible, I decided to add a new opt-in
mechanism to HGPLAIN. I'm not pretty sure if this is the right choice, but
I'm thinking of adding +feature/-feature syntax to HGPLAIN. Alternatively,
we could add a new environment variable. Any bikeshedding is welcome.

Note that HGPLAIN=+strictflags doesn't work correctly in chg session since
command arguments are pre-processed in C. This wouldn't be easily fixed.
2017-11-23 22:17:03 +09:00
Yuya Nishihara
b0d1fec38b fancyopts: add early-options parser compatible with getopt()
The next patch will add a flag for strict parsing of early options, where
we'll have to parse all early options at once instead of processing them
one-by-one by dispatch._earlygetopt(). That's why I decided to hook
fancyopts().

All dispatch._early*opt() functions is planned to be replaced with this
function. But in this stable series, only the strict mode will be handled
by fancyopts.earlygetopt().
2017-11-23 22:04:53 +09:00
Yuya Nishihara
d46d87090c cat: record the current behavior of wildcard matches in subrepos
Mercurial subrepos support any match patterns.
2017-11-25 15:29:34 +09:00
Matt Harbison
40cf71ae24 convert: avoid wrong lfconvert defaults by moving configitems to core
The `hg lfconvert --to-normal` command uses the convert extension internally to
work its magic, but that produced devel-warn messages if the convert extension
wasn't loaded by the user.  The test in 658e7a6d93e0 (modified here) wasn't
showing the warnings because the convert extension was loaded via $HGRCPATH.
Most of the config options default to None/False, but 'hg.usebranchnames' and
'hg.tagsbranch' are supposed to default to True and 'default' respectively.

The first iteration of this was to ui.setconfig() inside lfconvert, to force the
convert extension to load.  But there really is no precedent for doing this, and
check-config complained that 'extensions.convert' isn't documented.  Yuya
suggested this alternative.

This partially backs out 448e09d8859d.
2017-11-28 23:20:08 -05:00
Boris Feld
cf402c02f7 tr-summary: keep a weakref to the unfiltered repository
Repoview can have a different life cycle, causing issue in some corner
cases. The particular instance that revealed this comes from localpeer. The
localpeer hold a reference to the unfiltered repository, but calling 'local()'
will create an on-demand 'visible' repoview. That repoview can be garbaged
collected any time. Here is a simplified step by step reproduction::

    1) tr = peer.local().transaction('foo')
    2) tr.close()

After (1), the repoview object is garbage collected, so weakref used in (2)
point to nothing.


Thanks to Sean Farley for helping raising and debugging this issue.
2017-11-24 21:51:41 -05:00
Yuya Nishihara
52b06fe73d dispatch: verify result of early command parsing
Before, early options were stripped from args, and because of this, some
kind of parsing errors weren't reported. For example,

  $ hg ci -m -Ra file

would execute "hg ci -m file" in repository "a".

This patch fixes the issue by parsing early options again by real getopt-based
parser, and verifying the results. If the early parsing appears wrong, hg just
aborts. The current error message seems not nice, and should be improved, maybe
in V2 or follow-up.

Note that this isn't a security feature because we can still do anything by
using shell aliases.
2017-11-11 12:40:13 +09:00
Yuya Nishihara
fccba4aa77 dispatch: convert non-list option parsed by _earlygetopt() to string
So we can easily compare it with the corresponding getopt() result.

There's a minor behavior change. Before, "hg --cwd ''" failed with ENOENT.
But with this patch, an empty cwd is silently ignored. "hg -R ''" has always
worked as such, so -R has no BC.
2017-11-11 17:55:15 +09:00
Yuya Nishihara
f9dd555dd4 dispatch: add option to not strip command args parsed by _earlygetopt()
This allows us to parse the original args later by full-blown getopt() in
order to verify the result of the faulty early parsing. Still we need the
'strip=True' behavior for shell aliases.

Note that this series is RFC because it seems to change too much to be
included in stable release.
2017-11-11 16:46:41 +09:00
Yuya Nishihara
333fc1d401 dispatch: fix early parsing of short option with value like -R=foo
Before, -R=foo was parsed as '-R' 'foo', which disagrees with the standard
getopt behavior.
2017-11-14 00:25:59 +09:00