Tue, 29 Aug 2017 00:21:25 +0530 releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com> [Tue, 29 Aug 2017 00:21:25 +0530] rev 34341
releasenotes: update docstrings with information on additional flags This patch adds documentation related to the two new flags --check and --list for releasenotes extension. Differential Revision: https://phab.mercurial-scm.org/D544
Thu, 28 Sep 2017 13:22:58 +0530 releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com> [Thu, 28 Sep 2017 13:22:58 +0530] rev 34340
releasenotes: raise error on simultaneous usage of flags The releasenotes command is supposed to raise an error when --list and --rev/--check flags are used together. This patch adds the above functionality. Differential Revision: https://phab.mercurial-scm.org/D831
Tue, 26 Sep 2017 03:56:20 -0700 dirstate: move parents source of truth to dirstatemap
Durham Goode <durham@fb.com> [Tue, 26 Sep 2017 03:56:20 -0700] rev 34339
dirstate: move parents source of truth to dirstatemap As part of moving dirstate storage to its own class, let's move the source of truth for the dirstate parents to dirstatemap. This requires that dirstate._pl no longer be a cache, and that all sets go through dirstatemap.setparents. Differential Revision: https://phab.mercurial-scm.org/D759
Tue, 26 Sep 2017 03:56:20 -0700 dirstate: move parent reading to the dirstatemap class
Durham Goode <durham@fb.com> [Tue, 26 Sep 2017 03:56:20 -0700] rev 34338
dirstate: move parent reading to the dirstatemap class As part of moving dirstate storage logic to a separate class, let's move the function that reads the parents from the file. This will allow extensions to write dirstate's that store the parents in other ways. Differential Revision: https://phab.mercurial-scm.org/D758
Tue, 26 Sep 2017 03:56:20 -0700 dirstate: move opendirstatefile to dirstatemap
Durham Goode <durham@fb.com> [Tue, 26 Sep 2017 03:56:20 -0700] rev 34337
dirstate: move opendirstatefile to dirstatemap As part of moving the dirstate storage logic to another class, let's move opendirstatefile to dirstatemap. This will allow extensions to replace the pending abstraction. Future patches will move the consumers of _opendirstatefile into dirstatemap as well. Differential Revision: https://phab.mercurial-scm.org/D757
Tue, 26 Sep 2017 03:56:20 -0700 dirstate: move _copymap to dirstatemap
Durham Goode <durham@fb.com> [Tue, 26 Sep 2017 03:56:20 -0700] rev 34336
dirstate: move _copymap to dirstatemap As part of moving all dirstate storage to a new class, let's move the copymap onto that class. In a future patch this will let us move the read/write functions to the dirstatemap class, and for extensions this lets us replace the copy storage with alternative storage. Differential Revision: https://phab.mercurial-scm.org/D756
Tue, 26 Sep 2017 03:56:20 -0700 dirstate: move _dirs to dirstatemap
Durham Goode <durham@fb.com> [Tue, 26 Sep 2017 03:56:20 -0700] rev 34335
dirstate: move _dirs to dirstatemap As part of moving the dirstate storage logic to a new class, lets move the _dirs computation onto the class so extensions can replace it with a persisted index of directories. Differential Revision: https://phab.mercurial-scm.org/D755
Tue, 26 Sep 2017 03:56:20 -0700 dirstate: move filefoldmap to dirstatemap
Durham Goode <durham@fb.com> [Tue, 26 Sep 2017 03:56:20 -0700] rev 34334
dirstate: move filefoldmap to dirstatemap As part of moving the dirstate storage logic to a separate class, lets move the filfoldmap computation to that class. This will allow extensions to replace the dirstate storage with something that persists the filefoldmap. Differential Revision: https://phab.mercurial-scm.org/D754
Tue, 26 Sep 2017 03:56:20 -0700 dirstate: move nonnormalentries to dirstatemap
Durham Goode <durham@fb.com> [Tue, 26 Sep 2017 03:56:20 -0700] rev 34333
dirstate: move nonnormalentries to dirstatemap As part of moving dirstate storage to its own class, let's move the nonnormalentries logic onto the dirstatemap class. This will let extensions replace the nonnormalentries logic with a persisted cache. Differential Revision: https://phab.mercurial-scm.org/D753
Tue, 26 Sep 2017 03:56:20 -0700 dirstate: create new dirstatemap class
Durham Goode <durham@fb.com> [Tue, 26 Sep 2017 03:56:20 -0700] rev 34332
dirstate: create new dirstatemap class This is part of a larger refactor to move the dirstate storage logic to a separate class, so it's easier to rewrite the dirstate storage layer without having to rewrite all the algorithms as well. Step one it to create the class, and replace dirstate._map with it. The abstraction bleeds through in a few places where the main dirstate class has to access self._map._map, but those will be cleaned up in future patches. Differential Revision: https://phab.mercurial-scm.org/D752
Fri, 29 Sep 2017 15:49:43 +0000 style: always use `x is not None` instead of `not x is None`
Alex Gaynor <agaynor@mozilla.com> [Fri, 29 Sep 2017 15:49:43 +0000] rev 34331
style: always use `x is not None` instead of `not x is None` Differential Revision: https://phab.mercurial-scm.org/D842
Sun, 24 Apr 2016 18:41:23 +0900 templatekw: add new-style template expansion to {manifest}
Yuya Nishihara <yuya@tcha.org> [Sun, 24 Apr 2016 18:41:23 +0900] rev 34330
templatekw: add new-style template expansion to {manifest} The goal is to allow us to easily access to nested data. The dot operator will be introduced later so we can write '{p1.files}' instead of '{revset("p1()") % "{files}"}' for example. In the example above, 'p1' needs to carry a mapping dict along with its string representation. If it were a list or a dict, it could be wrapped semi-transparently with the _hybrid class, but for non-list/dict types, it would be difficult to proxy all necessary functions to underlying value type because several core operations may conflict with the ones of the underlying value: - hash(value) should be different from hash(wrapped(value)), which means dict[wrapped(value)] would be invalid - 'value == wrapped(value)' would be false, breaks 'ifcontains' - len(wrapped(value)) may be either len(value) or len(iter(wrapped(value))) So the wrapper has no proxy functions and its scope designed to be minimal. It's unwrapped at eval*() functions so we don't have to care for a wrapped object unless it's really needed: # most template functions just call evalfuncarg() unwrapped_value = evalfuncarg(context, mapping, args[n]) # if wrapped value is needed, use evalrawexp() maybe_wrapped_value = evalrawexp(context, mapping, args[n]) Another idea was to wrap every template variable with a tagging class, but which seemed uneasy without a static type checker. This patch updates {manifest} to a mappable as an example.
Mon, 24 Apr 2017 21:37:11 +0900 templater: adjust binding strength of '%' and '|' operators (BC)
Yuya Nishihara <yuya@tcha.org> [Mon, 24 Apr 2017 21:37:11 +0900] rev 34329
templater: adjust binding strength of '%' and '|' operators (BC) This makes 'foo|bar%baz' parsed as '(foo|bar)%baz', not 'foo|(bar%baz)'. Perhaps it was a mistake that '%' preceded '|'. Both '|' and '%' can be considered a kind of function application, and '|' is more like a '.' operator seen in OO languages. So IMHO '|' should have the same (or higher) binding as '%'. The BC breakage should be minimal since both '|' and '%' operators have strict requirements for their operands and 'foo|bar%baz' was invalid: - right-hand side of '|' must be a symbol - left-hand side of '%' must be a dict or list - right-hand side of '%' must be a string or symbol
Sun, 24 Sep 2017 15:22:46 +0900 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org> [Sun, 24 Sep 2017 15:22:46 +0900] rev 34328
templatekw: just pass underlying value (or key) to joinfmt() function Before, iter(hybrid) was proxied to hybrid.gen, which generated formatted strings. That's why we had to apply joinfmt() to the dicts generated by hybrid.itermaps(). Since this weird API was fixed at a0f2d83f8083, we can get rid of the makemap() calls from join().
Sun, 24 Sep 2017 12:43:57 +0900 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org> [Sun, 24 Sep 2017 12:43:57 +0900] rev 34327
scmutil: extract helper functions that returns human-readable change id We do "'%d:%s' % (ctx...)" at several places, so let's formalize it. A low- level function, formatrevnode(ui, rev, node), is extracted so we can pass a manifest rev/node pair. Note that hex() for manifest output can be replaced with hexfunc() because it is printed only when debugflag is set. i18n/de.po is updated so test-log.t passes with no error.
Sat, 02 Sep 2017 23:13:54 +0900 templater: extract helper to just evaluate template expression
Yuya Nishihara <yuya@tcha.org> [Sat, 02 Sep 2017 23:13:54 +0900] rev 34326
templater: extract helper to just evaluate template expression A named function can be easily grepped and is probably good for code readability.
Sat, 02 Sep 2017 23:09:34 +0900 templater: do not destructure operands in buildmap()
Yuya Nishihara <yuya@tcha.org> [Sat, 02 Sep 2017 23:09:34 +0900] rev 34325
templater: do not destructure operands in buildmap() This makes the next patch slightly simpler.
Sat, 09 Sep 2017 19:01:18 +0900 templater: use helper function to get name of non-iterable keyword
Yuya Nishihara <yuya@tcha.org> [Sat, 09 Sep 2017 19:01:18 +0900] rev 34324
templater: use helper function to get name of non-iterable keyword
Tue, 26 Sep 2017 15:55:01 +0200 pull: remove inadequate use of operations records to update stepdone
Boris Feld <boris.feld@octobus.net> [Tue, 26 Sep 2017 15:55:01 +0200] rev 34323
pull: remove inadequate use of operations records to update stepdone The 'stepdone' set is design to be a client side mechanism. If the client used some advanced capabilities to request necessary information (changeset, obsmarkers, phases, etc). It marks the steps as done to avoid having a less advanced mechanism issue a duplicated request. So, the "stepdone.add('phases')" should be the result of a client choice, because only the client can know it has requested all it needed to request. In 4a08cf1a2cfe this principle was broken because any phase-heads part sent by the server to the client would declare the phases retrieval complete. Now that there is an official phases related capability and code associated to it. We do not need the change in 4a08cf1a2cfe anymore and we can back it out. This brings back 'stepdone' management for 'phases' in line with the rest of the code (including other phases handing). Here is an example of potential misbehavior that 4a08cf1a2cfe introduced: Imagine a server that pre-computes bundles. The bundles contains a changegroup part and an (advisory) 'phase-heads' part. When a pull occurs, precomputed bundled are reused if available. As the phase part is advisory it can be sent to all clients. However they could be relevant changesets without phase information. Either because they are already common or because they had no precomputed bundle for them yet. If receiving any 'phase-heads' parts disable subsequent phases re-trivial parts, the client will not request phase data for all relevant changesets. For example common changesets will not turn public.
Sun, 24 Sep 2017 21:27:18 +0200 pull: use 'phase-heads' to retrieve phase information
Boris Feld <boris.feld@octobus.net> [Sun, 24 Sep 2017 21:27:18 +0200] rev 34322
pull: use 'phase-heads' to retrieve phase information A new bundle2 capability 'phases' has been added. If 'heads' is part of the supported value for 'phases', the server supports reading and sending 'phase- heads' bundle2 part. Server is now able to process a 'phases' boolean parameter to 'getbundle'. If 'True', a 'phase-heads' bundle2 part will be included in the bundle with phase information relevant to the whole pulled set. If this method is available the phases listkey namespace will no longer be listed. Beside the more efficient encoding of the data, this new method will greatly improve the phase exchange efficiency for repositories with non-served changesets (obsolete, secret) since we'll no longer send data about the filtered heads. Add a new 'devel.legacy.exchange' config item to allow fallback to the old 'listkey in bundle2' method. Reminder: the pulled set is not just the changesets bundled by the pull. It also contains changeset selected by the "pull specification" on the client side (eg: everything for bare pull). One of the reason why the 'pulled set' is important is to make sure we can move -common- nodes to public.
Wed, 20 Sep 2017 18:29:10 +0200 bundle2: only grab a transaction when 'phase-heads' affect the repository
Boris Feld <boris.feld@octobus.net> [Wed, 20 Sep 2017 18:29:10 +0200] rev 34321
bundle2: only grab a transaction when 'phase-heads' affect the repository The next patch will use the 'phase-heads' part to exchange phase data relevant to the pulled set. 'handlephases' currently acquires a transaction even in case of no-op pull, which would results in an empty transaction and messing with the existing journal. Pass the transaction fetcher to updatephases so it can fetch it if necessary.
Tue, 19 Sep 2017 22:23:41 +0200 phases: move the binary decoding function in the phases module
Boris Feld <boris.feld@octobus.net> [Tue, 19 Sep 2017 22:23:41 +0200] rev 34320
phases: move the binary decoding function in the phases module We move the decoding function near the encoding one in a place where they can be reused in other place (current target, 'exchange.py').
Tue, 19 Sep 2017 22:01:31 +0200 phases: move binary encoding into a reusable function
Boris Feld <boris.feld@octobus.net> [Tue, 19 Sep 2017 22:01:31 +0200] rev 34319
phases: move binary encoding into a reusable function We want to use binary phases for pushing and pulling. We extract the encoding function out of the bundle2 module first.
Tue, 19 Sep 2017 22:08:09 +0200 phases: use a Struct object for binary encoding and decoding
Boris Feld <boris.feld@octobus.net> [Tue, 19 Sep 2017 22:08:09 +0200] rev 34318
phases: use a Struct object for binary encoding and decoding We will move the binary encoding and decoding code to 'phases.py' in order to make it easier to reuse. First, let's cleanup it a bit.
Wed, 20 Sep 2017 05:47:33 +0200 discovery: avoid dropping remote heads hidden locally
Boris Feld <boris.feld@octobus.net> [Wed, 20 Sep 2017 05:47:33 +0200] rev 34317
discovery: avoid dropping remote heads hidden locally An extra post processing was added to recognize remote heads that are hidden locally as "common" instead of "unknown". However, this processing was removing such hidden heads from the remote heads sets. It had no impact because we used to pull phase information from all remote heads. This series will replace the phase pulling operation to a more efficient process but requires the unmodified pulled set information.
Fri, 29 Sep 2017 11:41:24 -0700 test-patchbomb: use mocktime
Jun Wu <quark@fb.com> [Fri, 29 Sep 2017 11:41:24 -0700] rev 34316
test-patchbomb: use mocktime The test was using system time for displaying ETAs, which could be flaky if the sysload is high. This patch extracts mocktime.py from test-progress.t to make sure test-patchbomb.t is unaffected by system time. Differential Revision: https://phab.mercurial-scm.org/D844
Thu, 28 Sep 2017 10:37:53 -0700 test-patchbomb: fix the test
Jun Wu <quark@fb.com> [Thu, 28 Sep 2017 10:37:53 -0700] rev 34315
test-patchbomb: fix the test With the experimental config `progress.estimate` removed, the progress output in `test-patchbomb.t` has a minor change: it shows ETA since the beginning. (This could be folded into f428c3)
Wed, 27 Sep 2017 15:14:59 -0700 progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com> [Wed, 27 Sep 2017 15:14:59 -0700] rev 34314
progress: make ETA only consider progress made in the last minute This patch limits the estimate time interval to roughly the last minute (configurable by `estimateinterval`) to be more practical. See the test change for why this is better. .. feature:: Estimated time is more accurate with non-linear progress Differential Revision: https://phab.mercurial-scm.org/D820
Wed, 27 Sep 2017 14:30:58 -0700 progress: remove progress.estimate config
Jun Wu <quark@fb.com> [Wed, 27 Sep 2017 14:30:58 -0700] rev 34313
progress: remove progress.estimate config It was introduced by 98e4d39 ("progress: add speed format" 2011-5-9) and was intended to hide ETA information for the first few seconds. Later 5d261fd ("progress: add a changedelay to prevent parallel topics from flapping (issue2698)" 2011-6-23) introduced `changedelay` config which hides the entire progress bar for the first few seconds. So `progress.estimate` seems somehow duplicated feature-wise. Since it's experimental and duplicated, let's just remove it. This makes the next patch simpler - it no longer needs to make sure `starttimes` is the real start time. Differential Revision: https://phab.mercurial-scm.org/D828
Tue, 26 Sep 2017 12:48:15 -0700 progress: demonstrate non-linear progress has a bad ETA experience
Jun Wu <quark@fb.com> [Tue, 26 Sep 2017 12:48:15 -0700] rev 34312
progress: demonstrate non-linear progress has a bad ETA experience Previously, the ETA and speed assumes the progress is linear. Often, due to network or other issues, it could be fast for the most time, and suddenly slow down: [====================================================> ] \___________________________________________/\______/ very fast suddenly much slower This patch adds a test demonstrating the ETA could be way off in those cases. Differential Revision: https://phab.mercurial-scm.org/D819
Thu, 21 Sep 2017 15:58:44 +0530 copytrace: add a a new config to limit the number of drafts in heuristics
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 21 Sep 2017 15:58:44 +0530] rev 34311
copytrace: add a a new config to limit the number of drafts in heuristics The heuristics options tries to the default full copytracing algorithm if both the source and destination branches contains of non-public changesets only. But this can be slow in cases when we have a lot of drafts. This patch adds a new config option experimental.copytrace.sourcecommitlimit which defaults to 100. This value will be the limit of number of drafts from c1 to base. Incase there are more changesets even though they are draft, the heuristics algorithm will be used. Differential Revision: https://phab.mercurial-scm.org/D763
Tue, 26 Sep 2017 16:14:57 +0300 mail: encode long unicode lines in emails properly (issue5687)
Igor Ippolitov <iippolitov@gmail.com> [Tue, 26 Sep 2017 16:14:57 +0300] rev 34310
mail: encode long unicode lines in emails properly (issue5687) 3e544c074459 introduced a bug: emails Content-Transfer-Encoding is silently replaced with 'quoted-printable' while any other encoding could be used by underlying code. The problem is revealed when a long unicode line is encoded. The patch implements proper check which works for any text and encoding.
Sat, 23 Sep 2017 14:58:40 -0700 chg: show timestamp with debug messages
Jun Wu <quark@fb.com> [Sat, 23 Sep 2017 14:58:40 -0700] rev 34309
chg: show timestamp with debug messages Like `strace -tr`, this helps finding performance bottlenecks. Differential Revision: https://phab.mercurial-scm.org/D807
Mon, 25 Sep 2017 11:05:16 +0200 keepalive: add more context to bad status line errors
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 25 Sep 2017 11:05:16 +0200] rev 34308
keepalive: add more context to bad status line errors As the TODO in the test said, the previous error message was not very helpful. Let's improve things. Differential Revision: https://phab.mercurial-scm.org/D811
Fri, 18 Aug 2017 20:20:38 -0700 tests: add interface checks for bundle, statichttp, and union peers
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 18 Aug 2017 20:20:38 -0700] rev 34307
tests: add interface checks for bundle, statichttp, and union peers I forgot to add these when I initially wrote the test. They inherit from localrepo.localpeer, so they should be explicitly tested. Differential Revision: https://phab.mercurial-scm.org/D810
Sat, 23 Sep 2017 13:46:12 -0700 alias: make alias command lazily resolved
Jun Wu <quark@fb.com> [Sat, 23 Sep 2017 13:46:12 -0700] rev 34306
alias: make alias command lazily resolved With many aliases, resolving them could have some visible overhead. Below is part of traceprof [1] output of `hg bookmark --hidden`: (time unit: ms) 37 \ addaliases dispatch.py:526 37 | __init__ (60 times) dispatch.py:402 33 | findcmd (108 times) cmdutil.py:721 16 | findpossible (49 times) cmdutil.py:683 It may get better by optimizing `findcmd` to do a bisect, but we don't really need to resolve an alias if it's not used, so let's make those command entries lazy. After this patch, `addalias` takes less than 1ms. .. perf:: improved performance when many aliases are defined [1]: https://bitbucket.org/facebook/hg-experimental/src/9aca0dbdbdfc48457e5d2581ca2d6e662fced2e6/hgext3rd/traceprof.pyx Differential Revision: https://phab.mercurial-scm.org/D805
Sat, 23 Sep 2017 13:31:09 -0700 alias: test duplicated definition earlier
Jun Wu <quark@fb.com> [Sat, 23 Sep 2017 13:31:09 -0700] rev 34305
alias: test duplicated definition earlier This patch moves the old definition checking logic introduced by f4b7be3f8430 earlier. So that the test itself does not depend on `aliasdef`. The check is to avoid wrapping a same alias multiple times. It can be done by checking the config name and value (`definition` in code), without constructing a `cmdalias` instance. This makes the next patch easier to review. Differential Revision: https://phab.mercurial-scm.org/D804
Sun, 24 Sep 2017 19:37:55 +0530 uncommit: add a test for uncommit with uncommitondirtywdir config in merge
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 24 Sep 2017 19:37:55 +0530] rev 34304
uncommit: add a test for uncommit with uncommitondirtywdir config in merge Differential Revision: https://phab.mercurial-scm.org/D809
Thu, 14 Sep 2017 13:14:32 -0700 largefiles: force an on-disk merge
Phil Cohen <phillco@fb.com> [Thu, 14 Sep 2017 13:14:32 -0700] rev 34303
largefiles: force an on-disk merge Largefiles isn't a good candidate for in-memory merge (it uses a custom dirstate, matcher, and the files might not fit in memory) so have it always run an old-style merge. Differential Revision: https://phab.mercurial-scm.org/D683
Thu, 14 Sep 2017 13:14:32 -0700 merge: allow a custom working context to be passed to update
Phil Cohen <phillco@fb.com> [Thu, 14 Sep 2017 13:14:32 -0700] rev 34302
merge: allow a custom working context to be passed to update This will allow anyone to enable the first in-menmory merge milestone by wrapping merge.update in an extension and creating an overlayworkingctx. Differential Revision: https://phab.mercurial-scm.org/D682
Wed, 14 Jun 2017 11:13:57 -0400 patchbomb: add test that shows --to and --cc override matching config item
Augie Fackler <augie@google.com> [Wed, 14 Jun 2017 11:13:57 -0400] rev 34301
patchbomb: add test that shows --to and --cc override matching config item As far as I know this has always been true and is intentional (it's in line with many other behaviors), but it wasn't tested.
Thu, 21 Sep 2017 11:10:20 -0700 blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com> [Thu, 21 Sep 2017 11:10:20 -0700] rev 34300
blackbox: move _openlogfile to a separate method This removes several `stat` syscalls for accessing `_bbvfs` and makes `ui` object cleaner. Differential Revision: https://phab.mercurial-scm.org/D769
Thu, 21 Sep 2017 11:03:37 -0700 blackbox: do not prevent 'chg init' from working
Jun Wu <quark@fb.com> [Thu, 21 Sep 2017 11:03:37 -0700] rev 34299
blackbox: do not prevent 'chg init' from working Previously, blackbox always appends to blackbox.log and creates the directory for that file on demand. That could be an issue if: 1. chg starts from `$REPO` directory, so `ui._bbrepo` is set. 2. `rm -rf $REPO`. 3. `chg init $REPO`, blackbox writes something and `init` will fail because `$REPO` directory is non-empty. This patch fixes that by verifying whether vfs exists before re-using it. Differential Revision: https://phab.mercurial-scm.org/D768
Mon, 11 Sep 2017 20:07:41 -0400 tests: add a test for blackbox with nested alias configurations
Augie Fackler <augie@google.com> [Mon, 11 Sep 2017 20:07:41 -0400] rev 34298
tests: add a test for blackbox with nested alias configurations I've observed some weirdness around this, and needed to rule some things out. There aren't any bugs in core around this, but it was nice to have confirmation.
Mon, 11 Sep 2017 20:06:52 -0400 tests: clean up blackbox test around aliases a little bit
Augie Fackler <augie@google.com> [Mon, 11 Sep 2017 20:06:52 -0400] rev 34297
tests: clean up blackbox test around aliases a little bit
Wed, 13 Sep 2017 17:26:26 +0000 revlog: add option to mmap revlog index
Mark Thomas <mbthomas@fb.com> [Wed, 13 Sep 2017 17:26:26 +0000] rev 34296
revlog: add option to mmap revlog index Following on from Jun Wu's patch last October[1], we have found that using mmap for the revlog index in repos with large revlogs gives a noticable performance improvment (~110ms on each hg invocation), particularly for commands that don't touch the index very much. This changeset adds this as an option, activated by a new experimental config option so that it can be enabled on a per-repo basis. The configuration option specifies an index size threshold at which Mercurial will switch to using mmap to access the index. If the configuration option is not specified, the default remains to load the full file, which seems to be the best option for smaller repos. Some initial performance numbers for average of 5 invocations of `hg log -l 5` for different cache states: | Repo: | HG | FB | |---|---|---| | Index size: | 2.3MB | much bigger | | read (warm): | 237ms | 432ms | | mmap (warm): | 227ms | 321ms | | | (-3%) | (-26%) | | read (cold): | 397ms | 696ms | | mmap (cold): | 410ms | 888ms | | | (+3%) | (+28%) | [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-October/088737.html Test Plan: `hg log --config experimental.mmapindex=true` Differential Revision: https://phab.mercurial-scm.org/D477
Thu, 21 Sep 2017 05:54:34 -0700 util: add an mmapread method
Mark Thomas <mbthomas@fb.com> [Thu, 21 Sep 2017 05:54:34 -0700] rev 34295
util: add an mmapread method This is useful for large files that are only partly touched. Test Plan: Will be used and tested in a later patch. Differential Revision: https://phab.mercurial-scm.org/D476
Wed, 20 Sep 2017 09:35:45 -0700 changegroup: remove dictionary creation from deltachunk
Durham Goode <durham@fb.com> [Wed, 20 Sep 2017 09:35:45 -0700] rev 34294
changegroup: remove dictionary creation from deltachunk Previously delta chunk returned a dictionary. Now that we consume deltachunk within changegroup (instead of outside in revlog) we can just return a tuple and have it be returned directly by deltaiter. Differential Revision: https://phab.mercurial-scm.org/D746
Wed, 20 Sep 2017 09:39:03 -0700 bundlerepo: update to use new deltaiter api
Durham Goode <durham@fb.com> [Wed, 20 Sep 2017 09:39:03 -0700] rev 34293
bundlerepo: update to use new deltaiter api Differential Revision: https://phab.mercurial-scm.org/D745
Wed, 20 Sep 2017 09:28:30 -0700 debug: update debugbundle to use new deltaiter api
Durham Goode <durham@fb.com> [Wed, 20 Sep 2017 09:28:30 -0700] rev 34292
debug: update debugbundle to use new deltaiter api Changegroup now has a deltaiter api for easy iteration over a series of deltas. Let's use that in the debugbundle command. Differential Revision: https://phab.mercurial-scm.org/D744
Wed, 20 Sep 2017 09:22:22 -0700 revlog: add revmap back to revlog.addgroup
Durham Goode <durham@fb.com> [Wed, 20 Sep 2017 09:22:22 -0700] rev 34291
revlog: add revmap back to revlog.addgroup The recent c8b6ed51386b patch removed the linkmapper argument from addgroup, as part of trying to make addgroup more agnostic from the changegroup format. It turns out that the changegroup can't resolve linkrevs while iterating over the deltas, because applying the deltas might affect the linkrev resolution. For example, when applying a series of changelog entries, the linkmapper just returns len(cl). If we're iterating over the deltas without applying them to the changelog, this results in incorrect linkrevs. This was caught by the hgsql extension, which reads the revisions before applying them. The fix is to return linknodes as part of the delta iterator, and let the consumer choose what to do. Differential Revision: https://phab.mercurial-scm.org/D730
Tue, 19 Sep 2017 22:06:26 -0700 rebase: also include other namespaces in changeset description
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Sep 2017 22:06:26 -0700] rev 34290
rebase: also include other namespaces in changeset description This makes use of the generic method of listing bookmarks and tags, so other extensions that add other namespaces will get their names added too. This does mean that bookmarks will come before tags, just like we apparently decided to order them in the "hg log" output. It doesn't seem like people would be parsing the rebase output anyway. We also did 79ab5369d55a (rebase: use _ctxdesc in one more place, 2017-08-29) recently, so now seems like a good time. Differential Revision: https://phab.mercurial-scm.org/D741
Wed, 20 Sep 2017 07:46:55 +0530 tersestatus: sort the dictionary before iterating on it
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 20 Sep 2017 07:46:55 +0530] rev 34289
tersestatus: sort the dictionary before iterating on it There has report of flakiness in test-status-terse.t. In the terse code, we are iterating on a dictionary without sorting and since python dicts are unordered, that can be a reason behind the flakiness. Before we have a better implementation for the terse thing, let's make sure current implementation possess minimum bugs. Differential Revision: https://phab.mercurial-scm.org/D740
Sun, 03 Sep 2017 20:06:45 +0530 copytrace: use the full copytracing method if only drafts are involved
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 03 Sep 2017 20:06:45 +0530] rev 34288
copytrace: use the full copytracing method if only drafts are involved This patch adds the functionality to use the full copytracing even if `experimental.copytrace = heuristics` in cases when drafts are involved. This is also a part of copytrace extension in fbext. This also adds tests which are also taken from fbext. .. feature:: The `heuristics` option for `experimental.copytrace` performs full copytracing if both source and destination branches contains non-public changsets only. Differential Revision: https://phab.mercurial-scm.org/D625
Fri, 15 Sep 2017 10:43:22 -0700 templates: introduce a obsfateoperation() function
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Sep 2017 10:43:22 -0700] rev 34287
templates: introduce a obsfateoperation() function Differential Revision: https://phab.mercurial-scm.org/D723
Fri, 15 Sep 2017 10:42:49 -0700 obsmarker: track operation by default
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Sep 2017 10:42:49 -0700] rev 34286
obsmarker: track operation by default We added support for including the operation responsible for creating the obsmarker in 3546a771e376 (obsolete: add operation metadata to rebase/amend/histedit obsmarkers, 2017-05-09). However, soon thereafter, in f432897a9f49 (obsmarker: add an experimental flag controlling "operation" recording, 2017-05-20), it was hidden behind a config that was off by default. It seems unlikely that people will manually turn it on, and obsmarkers/evolution as a whole is still experimental anyway, so let's turn on the tracking by default. Differential Revision: https://phab.mercurial-scm.org/D722
Wed, 20 Sep 2017 02:40:25 +0530 uncommit: add an experimental.uncommitondirtywdir config
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 20 Sep 2017 02:40:25 +0530] rev 34285
uncommit: add an experimental.uncommitondirtywdir config There are people who wants to do `hg uncommit` on dirty working directory, so this patch adds a config which can be used to the achieve that. Adds tests for the same. Differential Revision: https://phab.mercurial-scm.org/D735
Wed, 20 Sep 2017 02:18:01 +0530 uncommit: don't allow bare uncommit on dirty working directory
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 20 Sep 2017 02:18:01 +0530] rev 34284
uncommit: don't allow bare uncommit on dirty working directory As per IRC discussion and suggestion by Augie, we should not allow bare `hg uncommit` on dirty working directory. Differential Revision: https://phab.mercurial-scm.org/D734
Sat, 16 Sep 2017 02:34:13 +0530 uncommit: rename the flag 'empty' to 'keep' which retains empty changeset
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 16 Sep 2017 02:34:13 +0530] rev 34283
uncommit: rename the flag 'empty' to 'keep' which retains empty changeset This patch renames the flag 'empty' which retains the empty changeset if all the files are uncommitted to 'keep'. Differential Revision: https://phab.mercurial-scm.org/D726
Mon, 18 Sep 2017 14:19:47 -0400 tests: avoid repr in test-bundle2-format.t
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 14:19:47 -0400] rev 34282
tests: avoid repr in test-bundle2-format.t We don't *really* need it here, and it was making Python 3 harder.
Mon, 18 Sep 2017 14:04:05 -0400 tests: port test-bundle2-format inline helper script to Python 3
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 14:04:05 -0400] rev 34281
tests: port test-bundle2-format inline helper script to Python 3 We're now very close to this test passing.
Tue, 19 Sep 2017 00:27:55 -0400 bundle2: portably grab first byte of part name for letter check
Augie Fackler <augie@google.com> [Tue, 19 Sep 2017 00:27:55 -0400] rev 34280
bundle2: portably grab first byte of part name for letter check
Mon, 18 Sep 2017 14:03:21 -0400 bundle2: make ValueError messages native strings
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 14:03:21 -0400] rev 34279
bundle2: make ValueError messages native strings
Mon, 18 Sep 2017 13:36:05 -0400 bundle2: update check for a generator to work on Python 3
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 13:36:05 -0400] rev 34278
bundle2: update check for a generator to work on Python 3
Mon, 18 Sep 2017 13:35:43 -0400 bundle2: stop using %r to quote part names
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 13:35:43 -0400] rev 34277
bundle2: stop using %r to quote part names Valid part names are restricted to [a-zA-Z0-9_:-]+, so I'm not worried about having quoting present in places where we should have predominantly valid part names. This will significantly ease the Python 3 transition, and simultaneously isn't a BC because this is only in error messages that should never be shown.
Mon, 18 Sep 2017 16:01:03 -0700 blackbox: set lastui even if ui.log is not called (issue5518)
Jun Wu <quark@fb.com> [Mon, 18 Sep 2017 16:01:03 -0700] rev 34276
blackbox: set lastui even if ui.log is not called (issue5518) `lastui` decides where (where is the `.hg`) to use if the current `ui` object does not have a `_bbrepo` associated. Previously it only gets set in `ui.log`, which means unless a `ui` with repo associated calls `log` with tracked event, blackbox does not know where to write its log. This patch makes `reposetup` set `lastui` so it so we could log some more events (see test changes). Differential Revision: https://phab.mercurial-scm.org/D655
Wed, 06 Sep 2017 21:23:38 -0700 blackbox: unindent a try block
Jun Wu <quark@fb.com> [Wed, 06 Sep 2017 21:23:38 -0700] rev 34275
blackbox: unindent a try block The try block is no longer necessary. Differential Revision: https://phab.mercurial-scm.org/D654
Mon, 18 Sep 2017 15:56:08 -0700 blackbox: simplify ui states
Jun Wu <quark@fb.com> [Mon, 18 Sep 2017 15:56:08 -0700] rev 34274
blackbox: simplify ui states It seems cleaner to just remove `_partialinit`, `copy`, `__init__`. This patch makes it so by using `getattr` in `log` so those fields do not need to be existed. Differential Revision: https://phab.mercurial-scm.org/D652
Fri, 01 Sep 2017 19:42:09 -0700 revset: move weight information to predicate
Jun Wu <quark@fb.com> [Fri, 01 Sep 2017 19:42:09 -0700] rev 34273
revset: move weight information to predicate Previously revset weight is hardcoded and cannot be modified. This patch moves it to predicate so newly registered revsets could define their weight to properly give static optimization some hint. Differential Revision: https://phab.mercurial-scm.org/D657
Fri, 01 Sep 2017 19:30:40 -0700 revset: remove "small" argument from "_optimize"
Jun Wu <quark@fb.com> [Fri, 01 Sep 2017 19:30:40 -0700] rev 34272
revset: remove "small" argument from "_optimize" `_optimize` calculates weights of subtrees. "small" affects some weight calculation (either 1 or 0.5). The weights are now only useful in `and` optimization where we might swap two arguments and use `andsmally`. In the real world, it seems unlikely that revsets with weight of 0.5 or 1 matters the `and` order optimization. I think the important thing is to get weights of expensive revsets right (ex. `contains`). This patch removes the `small` argument to simplify the interface. As for choosing between 0.5 vs 1, things returning a single revision (`ancestor`, `string`) has a weight of 0.5. Things returning multiple revisions returns 1. This could be sometimes useful in the `andsmally` optimization, ex. (((:)-2) & expensive()) & ((1-2) & expensive()) ^^^ ^ ^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ weight=1 weight=0.5 would have an `andsmally` optimization so `1-2` gets executed first, which seems to be desirable. Differential Revision: https://phab.mercurial-scm.org/D656
Mon, 18 Sep 2017 13:37:00 -0400 ui: fix progress debug log format strings to work on Python 3
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 13:37:00 -0400] rev 34271
ui: fix progress debug log format strings to work on Python 3
Mon, 18 Sep 2017 13:37:32 -0400 tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 13:37:32 -0400] rev 34270
tests: update `f` helper script to work on Python 3
Tue, 19 Sep 2017 00:09:37 -0400 tests: fix run-tests XML reporting on Python 3
Augie Fackler <augie@google.com> [Tue, 19 Sep 2017 00:09:37 -0400] rev 34269
tests: fix run-tests XML reporting on Python 3 cdatasafe wants to work in terms of bytes, but of course we have a unicode. Easy to work around, especially since we know we'll get utf-8 at the end.
Tue, 19 Sep 2017 00:08:52 -0400 tests: convert bisect support regex to binary
Augie Fackler <augie@google.com> [Tue, 19 Sep 2017 00:08:52 -0400] rev 34268
tests: convert bisect support regex to binary The bisection feature of run-tests still fails tests with this because bisect itself doesn't work yet. We'll get there.
Tue, 19 Sep 2017 00:08:12 -0400 tests: decode bytes path to hg command before hitting with shellquote
Augie Fackler <augie@google.com> [Tue, 19 Sep 2017 00:08:12 -0400] rev 34267
tests: decode bytes path to hg command before hitting with shellquote
Tue, 19 Sep 2017 00:07:51 -0400 tests: fix test-is-whitelisted check in run-tests
Augie Fackler <augie@google.com> [Tue, 19 Sep 2017 00:07:51 -0400] rev 34266
tests: fix test-is-whitelisted check in run-tests Again, look for bytes in a set of bytes objects.
Tue, 19 Sep 2017 00:07:23 -0400 tests: fix run-tests "slow test" check
Augie Fackler <augie@google.com> [Tue, 19 Sep 2017 00:07:23 -0400] rev 34265
tests: fix run-tests "slow test" check Look for bytes in a set of bytes objects.
Tue, 19 Sep 2017 00:06:57 -0400 tests: fix run-tests default values in Test constructor
Augie Fackler <augie@google.com> [Tue, 19 Sep 2017 00:06:57 -0400] rev 34264
tests: fix run-tests default values in Test constructor As far as I can tell, default values are evaluated far earlier on Python 3.6 than 2.7, meaning we've got to be more careful about when we read the defaults dictionary for the kwarg defaults. Sigh. With this change, test-run-tests.t is significantly less of a mess under 3.6.
Mon, 18 Sep 2017 17:11:32 -0400 tests: add support for listing tests to run in a file
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 17:11:32 -0400] rev 34263
tests: add support for listing tests to run in a file This will make it easier for us to run the tests in the python3 whitelist in buildbot.
Mon, 18 Sep 2017 15:34:50 -0400 python3: remove test-update-dest.t from the whitelist
Augie Fackler <augie@google.com> [Mon, 18 Sep 2017 15:34:50 -0400] rev 34262
python3: remove test-update-dest.t from the whitelist I've poked at this on and off several times, and I can't figure out what regressed. Let's kick this out of the whitelist for now so that we can get the *rest* of our progress covered by the buildbots.
Thu, 14 Sep 2017 10:20:05 -0700 bundle2: move part processing to a separate function
Durham Goode <durham@fb.com> [Thu, 14 Sep 2017 10:20:05 -0700] rev 34261
bundle2: move part processing to a separate function Now that the part processing loop is tiny, let's move it to a separate function. This will allow extensions to completely replace the part processing logic, without having to replace the overall bundle processing logic or the stream maintenance logic. This will be useful for the infinitepush extension, so it can completely take over receiving a bundle and rerouting it to a side store. This will also make it easier to upstream the infinitepush functionality later. Differential Revision: https://phab.mercurial-scm.org/D709
Thu, 14 Sep 2017 10:20:05 -0700 bundle2: remove unnecessary try finally
Durham Goode <durham@fb.com> [Thu, 14 Sep 2017 10:20:05 -0700] rev 34260
bundle2: remove unnecessary try finally This is no longer needed. Differential Revision: https://phab.mercurial-scm.org/D708
Thu, 14 Sep 2017 10:20:05 -0700 bundle2: move handler validation out of processpart
Durham Goode <durham@fb.com> [Thu, 14 Sep 2017 10:20:05 -0700] rev 34259
bundle2: move handler validation out of processpart As part of refactoring bundle part processing let's move handler validation to its own function. Differential Revision: https://phab.mercurial-scm.org/D707
Thu, 14 Sep 2017 10:20:05 -0700 bundle2: move processpart stream maintenance into part iterator
Durham Goode <durham@fb.com> [Thu, 14 Sep 2017 10:20:05 -0700] rev 34258
bundle2: move processpart stream maintenance into part iterator The processpart function also did some stream maintenance, so let's move it to the part iterator as well, as part of moving all part iteration logic into the class. There is one place processpart is called outside of the normal loop, so we manually handle the seek there. The now-empty try/finally will be removed in a later patch, for ease of review. Differential Revision: https://phab.mercurial-scm.org/D706
Mon, 18 Sep 2017 14:12:20 -0500 merge with stable
Kevin Bullock <kbullock+mercurial@ringworld.org> [Mon, 18 Sep 2017 14:12:20 -0500] rev 34257
merge with stable
Sun, 17 Sep 2017 12:39:53 +0900 py3: convert system strings to bytes in doctest of formatter.py
Yuya Nishihara <yuya@tcha.org> [Sun, 17 Sep 2017 12:39:53 +0900] rev 34256
py3: convert system strings to bytes in doctest of formatter.py
Sun, 17 Sep 2017 12:39:14 +0900 py3: rewrite stdout hack of doctest by using ui.pushbuffer()
Yuya Nishihara <yuya@tcha.org> [Sun, 17 Sep 2017 12:39:14 +0900] rev 34255
py3: rewrite stdout hack of doctest by using ui.pushbuffer() We can't use pycompat.stdout here because the doctest runner replaces sys.stdout with a string buffer.
Sun, 17 Sep 2017 12:26:42 +0900 py3: use bytes os.sep in doctest of pathutil.py
Yuya Nishihara <yuya@tcha.org> [Sun, 17 Sep 2017 12:26:42 +0900] rev 34254
py3: use bytes os.sep in doctest of pathutil.py
Sun, 17 Sep 2017 12:23:16 +0900 py3: fix doctests in patch.py to be compatible with Python 3
Yuya Nishihara <yuya@tcha.org> [Sun, 17 Sep 2017 12:23:16 +0900] rev 34253
py3: fix doctests in patch.py to be compatible with Python 3 We were lucky that parsepatch() could concatenate a character slice as if it were a list of chunks.
Sun, 17 Sep 2017 12:20:35 +0900 py3: stop using bytes[n] in patch.py
Yuya Nishihara <yuya@tcha.org> [Sun, 17 Sep 2017 12:20:35 +0900] rev 34252
py3: stop using bytes[n] in patch.py
Sun, 03 Sep 2017 16:45:33 +0900 error: move patch.PatchError so it can easily implement __bytes__ (API)
Yuya Nishihara <yuya@tcha.org> [Sun, 03 Sep 2017 16:45:33 +0900] rev 34251
error: move patch.PatchError so it can easily implement __bytes__ (API)
Fri, 15 Sep 2017 00:01:57 -0700 templater: extract shortest() logic from template function
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Sep 2017 00:01:57 -0700] rev 34250
templater: extract shortest() logic from template function It can be useful for extensions to be able to produce the shortest unambiguous hash (including the in-tree "show" extension). That logic is currently inside the shortest() template function. Let's move it out of the templater. I've put it on revlog since it's closely related to revlog._partialmatch. We may also want a convenience method on context, but I'll leave that for a later patch. Differential Revision: https://phab.mercurial-scm.org/D724
Fri, 15 Sep 2017 18:37:29 -0400 bundle2: raise a more helpful error if building a bundle part header fails
Augie Fackler <raf@durin42.com> [Fri, 15 Sep 2017 18:37:29 -0400] rev 34249
bundle2: raise a more helpful error if building a bundle part header fails I've tripped on this several times now, and am tired of debugging. Now the header parts are part of the error message when the ''.join() fails, which makes debugging obvious.
Fri, 15 Sep 2017 18:57:50 +0200 hgwebdir: read 'web.template' untrusted
Boris Feld <boris.feld@octobus.net> [Fri, 15 Sep 2017 18:57:50 +0200] rev 34248
hgwebdir: read 'web.template' untrusted The 'hgweb_mod.py' version of this read it untrusted. For consistency we align the two versions of this code.
Fri, 30 Jun 2017 03:45:53 +0200 configitems: register the 'web.templates' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:45:53 +0200] rev 34247
configitems: register the 'web.templates' config
Fri, 30 Jun 2017 03:45:52 +0200 configitems: register the 'web.style' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:45:52 +0200] rev 34246
configitems: register the 'web.style' config
(0) -30000 -10000 -3000 -1000 -300 -100 -96 +96 +100 +300 +1000 +3000 +10000 tip