Wed, 23 Dec 2015 12:51:45 -0800 filemerge: default change/delete conflicts to 'leave unresolved' (BC)
Siddharth Agarwal <sid0@fb.com> [Wed, 23 Dec 2015 12:51:45 -0800] rev 27599
filemerge: default change/delete conflicts to 'leave unresolved' (BC) It makes far more sense to leave these conflicts unresolved and kick back to the user than to just assume that the local version be chosen. There are almost certainly buggy scripts and applications using Mercurial in the wild that do merges or rebases non-interactively, and then assume that if the operation succeeded there's nothing the user needs to pay attention to. (This wasn't possible earlier because there was no way to re-resolve change/delete conflicts -- but now it is.)
Wed, 23 Dec 2015 12:41:20 -0800 tests: explicitly request changed version in test-rebase-newancestor.t
Siddharth Agarwal <sid0@fb.com> [Wed, 23 Dec 2015 12:41:20 -0800] rev 27598
tests: explicitly request changed version in test-rebase-newancestor.t We're going to change the default for this in an upcoming patch, but in this instance we do want to continue picking the changed version.
Wed, 23 Dec 2015 12:41:20 -0800 tests: explicitly request changed version in c/d conflict in test-commit-amend.t
Siddharth Agarwal <sid0@fb.com> [Wed, 23 Dec 2015 12:41:20 -0800] rev 27597
tests: explicitly request changed version in c/d conflict in test-commit-amend.t We're going to change the default for this in an upcoming patch, but in this instance we do want to continue picking the changed version.
Wed, 23 Dec 2015 12:41:20 -0800 test-copy-move-merge.t: explicitly request changed version
Siddharth Agarwal <sid0@fb.com> [Wed, 23 Dec 2015 12:41:20 -0800] rev 27596
test-copy-move-merge.t: explicitly request changed version We're going to change the default for this in an upcoming patch, but in this instance we do want to continue picking the changed version.
Sat, 26 Dec 2015 19:40:38 -0800 match: add option to return line and lineno from readpattern
Laurent Charignon <lcharignon@fb.com> [Sat, 26 Dec 2015 19:40:38 -0800] rev 27595
match: add option to return line and lineno from readpattern This will be used to display the line and linenumber of ignorefile that matched an ignored file (issue4856).
Wed, 23 Dec 2015 11:52:54 -0800 dirstate: extract logic to compute the list of ignorefiles
Laurent Charignon <lcharignon@fb.com> [Wed, 23 Dec 2015 11:52:54 -0800] rev 27594
dirstate: extract logic to compute the list of ignorefiles We are going to reuse this logic to improve debugignore in the next patches of the series.
Wed, 23 Dec 2015 13:16:03 -0800 dirstate: call the C implementation of nonnonormalentries when available
Laurent Charignon <lcharignon@fb.com> [Wed, 23 Dec 2015 13:16:03 -0800] rev 27593
dirstate: call the C implementation of nonnonormalentries when available Before this patch, we were using python code for computing the nonnormal dirstate entries. This patch makes us use the C implementation of the function when it is available. Using the nonnormal set in hgwatchman improves hg status performance. Below are the numbers for mozilla-central. with the changes: $ hg perfstatus ! wall 0.010632 comb 0.000000 user 0.000000 sys 0.000000 (best of 246) without the changes: $ hg perfstatus ! wall 0.036442 comb 0.030000 user 0.030000 sys 0.000000 (best of 100) On mozilla-central the improvement to hg status is ~20% (0.25s to 0.2s), on our big repos at Facebook, the win is ~40% (1.2s to 0.72s).
Mon, 21 Dec 2015 16:27:16 -0800 dirstate: add a C implementation for nonnormalentries
Laurent Charignon <lcharignon@fb.com> [Mon, 21 Dec 2015 16:27:16 -0800] rev 27592
dirstate: add a C implementation for nonnormalentries Before this patch, there was only a python version of nonnormalentries. On mozilla-central we have a 10x win by putting this function in C: % python -m timeit -s \ 'from mercurial import hg, ui, parsers; \ repo = hg.repository(ui.ui(), "mozilla-central"); \ m = repo.dirstate._map' \ 'parsers.nonnormalentries(m)' 100 loops, best of 3: 3.15 msec per loop The python implementation runs in 31ms, a similar test gives: 10 loops, best of 3: 31.7 msec per loop On our big repos, the win is still of 10x with the python implementation running in 350ms and the C implementation running in 30ms.
Mon, 21 Dec 2015 16:26:44 -0800 dirstate: add test for non-normal set consistency
Laurent Charignon <lcharignon@fb.com> [Mon, 21 Dec 2015 16:26:44 -0800] rev 27591
dirstate: add test for non-normal set consistency This adds a test extension to check that the non-normal set contains the expected entries. It wraps several methods of the dirstate to check that the non-normal set has the correct values before and after the call. The extension lives in contrib so that paranoid developers can easily enable it to make sure that the non-normal set is consistent across more complex operations than the included tests.
Fri, 01 Jan 2016 23:40:54 +0100 dirstate: add code to update the non-normal set
Laurent Charignon <lcharignon@fb.com> [Fri, 01 Jan 2016 23:40:54 +0100] rev 27590
dirstate: add code to update the non-normal set Before this patch, we were only populating the non-normal set when parsing or packing the dirstate. This was not enough to keep the non-normal set up to date at all time as we don't write and read the dirstate whenever a change happens. This patch solves this issue by updating the non-normal set when it should be updated. note: pack_dirstate changes the dmap and we have it keep it unchanged for retrocompatibility so we are forced to recompute the non-normal set after calling it.
Wed, 23 Dec 2015 13:13:22 -0800 dirstate: attach the nonnormalset to a propertycache
Laurent Charignon <lcharignon@fb.com> [Wed, 23 Dec 2015 13:13:22 -0800] rev 27589
dirstate: attach the nonnormalset to a propertycache This patch attaches the nonnormalset to a property cache so that we build it only when needed.
Mon, 21 Dec 2015 16:22:43 -0800 dirstate: add a function to compute non-normal entries from the dmap
Laurent Charignon <lcharignon@fb.com> [Mon, 21 Dec 2015 16:22:43 -0800] rev 27588
dirstate: add a function to compute non-normal entries from the dmap This patch adds a new python function in the dirstate to compute the set of non-normal files from the dmap. These files are useful to compute the repository status.
Tue, 29 Dec 2015 23:58:30 +0900 revset: use decorator to mark a predicate as safe
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27587
revset: use decorator to mark a predicate as safe Using decorator can localize changes for adding (or removing) a "safe" revset predicate function in source code. To avoid accidentaly treating unsuitable predicates as safe, this patch uses False as default value of "safe" argument. This forces safe predicates to be decorated with explicit 'safe=True'.
Tue, 29 Dec 2015 23:58:30 +0900 revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27586
revset: use delayregistrar to register predicate in extension easily Previous patch introduced 'revset.predicate' decorator to register revset predicate function easily. But it shouldn't be used in extension directly, because it registers specified function immediately. Registration itself can't be restored, even if extension loading fails after that. Therefore, registration should be delayed until 'uisetup()' or so. This patch uses 'extpredicate' decorator derived from 'delayregistrar' to register predicate in extension easily. This patch also tests whether 'registrar.delayregistrar' avoids function registration if 'setup()' isn't invoked on it, because 'extpredicate' is the first user of it.
Tue, 29 Dec 2015 23:58:30 +0900 registrar: add delayregistrar class to register function in extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27585
registrar: add delayregistrar class to register function in extensions 'delayregistrar' delays actual registration of function until 'setup()' invocation on it.
Tue, 29 Dec 2015 23:58:30 +0900 revset: use decorator to register a function as revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27584
revset: use decorator to register a function as revset predicate Using decorator can localize changes for adding (or removing) a revset predicate function in source code. It is also useful to pick predicates up for specific purpose. For example, subsequent patch marks predicates as "safe" by decorator. This patch defines 'parsefuncdecl()' in 'funcregistrar' class, because this implementation can be uesd by other decorator class for fileset predicate and template function.
Tue, 29 Dec 2015 23:58:30 +0900 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 29 Dec 2015 23:58:30 +0900] rev 27583
registrar: add funcregistrar class to register function for specific purpose This class centralizes the common logic to register function for specific purpose like below: - template keyword, filter and function - revset predicate - fileset predicate - webcommand 'funcregistrar' also formats help document of the function with the 'decl'(aration) specified at the construction. This can avoid (1) redundancy between 'decl' and help document, and (2) accidental typo of help document. For example, 'foo' should appear twice like below, if without such formatting: @keyword('foo') def foo(....): """:foo: Explanation of keyword foo ...""" Almost all cases needs very simple document formatting like below: - "``DECL``\n EXPLANATION" - ":DECL: EXPLANATION" But webcommand needs a little complicated formatting like: /PATH/SPEC ---------- EXPLANATION .... To make minirst recognize the section header, hyphen line should be as long as "/PATH/SPEC". It should be arranged by program. Implementing 'formatdoc()' in derived class can support complicated formatting in the latter case. But it seems redundant for simple one in the former case. Therefore, 'funcregistrar' does: - invoke 'self.formatdoc', if it is callable (for the latter case) - use it as the format string, otherwise (for the former case)
Wed, 30 Dec 2015 17:15:10 -0700 hgweb: support rendering a sub-topic
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:15:10 -0700] rev 27582
hgweb: support rendering a sub-topic If the requested topic contains a "." we assume a sub-topic is requested and display it.
Wed, 30 Dec 2015 17:34:51 -0700 hgweb: support rendering sub-topic indexes
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:34:51 -0700] rev 27581
hgweb: support rendering sub-topic indexes If the requested topic name is the name of a sub-topic, we now render an index of topics within that sub-topic.
Wed, 30 Dec 2015 17:26:33 -0700 templates: support linking to main help page
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:26:33 -0700] rev 27580
templates: support linking to main help page Currently, the "helptopics" template assumes it is only used as the main index and therefore doesn't hyperlink "help" in the navigation list. Sub-topics will introduce an additional consumer of this template. So teach the template to hyperlink the "help" navigation entry when necessary.
Wed, 30 Dec 2015 17:01:28 -0700 templates: differentiate between partial and full topic name
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:01:28 -0700] rev 27579
templates: differentiate between partial and full topic name In order to support sub-topics, we need to support linking to a full topic name while displaying the base topic name. Change the {helpentry} template to grab the display name from an optional seperate variable (which will be defined in a future patch).
Wed, 30 Dec 2015 17:12:59 -0700 templates: make earlycommands and othercommands optional
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 30 Dec 2015 17:12:59 -0700] rev 27578
templates: make earlycommands and othercommands optional We now have sub-topics in the help system. The "helptopics" template serves as a mechanism for displaying an index of help topics. Previously, it was only used to show the top-level list of help topics, which includes special groupings of topics. In the near future, we'll adapt "helptopics" for showing the index of sub-topics. In this patch, we optionally render {earlycommands} and {othercommands} since they aren't present on sub-topics.
Tue, 29 Dec 2015 15:32:12 -0800 rebase: better error message when rebased changes are all in destination
Laurent Charignon <lcharignon@fb.com> [Tue, 29 Dec 2015 15:32:12 -0800] rev 27577
rebase: better error message when rebased changes are all in destination Before this patch, when rebasing a set of obsolete revisions that were plain pruned or already present in the destination, we were displaying: abort: no matching revisions This was not very helpful to understand what was going on, instead we replace the error message by: abort: all requested changesets have equivalents or were marked as obsolete (to force the rebase, set the config experimental.rebaseskipobsolete to False)
Wed, 30 Dec 2015 13:10:53 -0800 lrucachedict: add copy method
Eric Sumner <ericsumner@fb.com> [Wed, 30 Dec 2015 13:10:53 -0800] rev 27576
lrucachedict: add copy method This diff implements the standard dict copy() method for lrucachedicts, which will be used in the pushrebase extension to make a copy of the manifestcache.
Sat, 02 Jan 2016 02:04:32 +0100 Added signature for changeset ea389970c084 stable
Matt Mackall <mpm@selenic.com> [Sat, 02 Jan 2016 02:04:32 +0100] rev 27575
Added signature for changeset ea389970c084
Sat, 02 Jan 2016 02:04:26 +0100 Added tag 3.6.3 for changeset ea389970c084 stable
Matt Mackall <mpm@selenic.com> [Sat, 02 Jan 2016 02:04:26 +0100] rev 27574
Added tag 3.6.3 for changeset ea389970c084
Sat, 02 Jan 2016 01:49:18 +0100 merge with i18n stable 3.6.3
Matt Mackall <mpm@selenic.com> [Sat, 02 Jan 2016 01:49:18 +0100] rev 27573
merge with i18n
Fri, 01 Jan 2016 12:21:11 +0900 i18n-ja: synchronized with ca8ada499529 stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 01 Jan 2016 12:21:11 +0900] rev 27572
i18n-ja: synchronized with ca8ada499529
Mon, 28 Dec 2015 22:51:37 -0800 merge: while checking for unknown files don't follow symlinks (issue5027) stable
Siddharth Agarwal <sid0@fb.com> [Mon, 28 Dec 2015 22:51:37 -0800] rev 27571
merge: while checking for unknown files don't follow symlinks (issue5027) Previously, we were using Python's native 'os.path.isfile' method which follows symlinks. In this case, since we're operating on repo contents, we don't want to follow symlinks. There's a behaviour change here, as shown by the second part of the added test. Consider a symlink 'f' pointing to a file containing 'abc'. If we try and replace it with a file with contents 'abc', previously we would have let it though. Now we don't. Although this breaks naive inspection with tools like 'cat' and 'diff', on balance I believe this is the right change.
Thu, 31 Dec 2015 09:55:56 +0100 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 31 Dec 2015 09:55:56 +0100] rev 27570
merge with stable
(0) -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip