Fri, 17 Oct 2014 14:59:10 +0200 getbundle: send highest changegroup format supported by both side
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 17 Oct 2014 14:59:10 +0200] rev 23179
getbundle: send highest changegroup format supported by both side When using bundle2, we find the common subset of supported changegroup-packers and we pick the max of them. This allow to use generaldelta aware changegroup through bundle2.
Fri, 17 Oct 2014 14:41:21 +0200 changegroup: allow use of different cg#packer in getchangegroupraw
Sune Foldager <cryo@cyanite.org> [Fri, 17 Oct 2014 14:41:21 +0200] rev 23178
changegroup: allow use of different cg#packer in getchangegroupraw This will allow the use of general delta aware changegroup formats.
Fri, 17 Oct 2014 14:41:02 +0200 changegroup: introduce "raw" versions of some commands
Sune Foldager <cryo@cyanite.org> [Fri, 17 Oct 2014 14:41:02 +0200] rev 23177
changegroup: introduce "raw" versions of some commands The commands getchangegroup, getlocalchangegroup and getsubset now each have a version ending in -raw. The raw versions return the chunk generator from the changegroup packer directly, without wrapping it in a chunkbuffer and unpacker. This avoids extra chunkbuffers in the bundle2 code path. Also, the raw versions can be extended to support alternative packers in the future, to be used from bundle2.
Tue, 04 Nov 2014 16:43:33 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 04 Nov 2014 16:43:33 -0600] rev 23176
merge with stable
Tue, 04 Nov 2014 21:54:27 +0100 win32: remove Mercurial.ini file from Inno Setup installer (issue4435)
Pascal Quantin <pascal.quantin@gmail.com> [Tue, 04 Nov 2014 21:54:27 +0100] rev 23175
win32: remove Mercurial.ini file from Inno Setup installer (issue4435)
Tue, 04 Nov 2014 21:35:49 +0100 win32: fix win32 installers generation
Pascal Quantin <pascal.quantin@gmail.com> [Tue, 04 Nov 2014 21:35:49 +0100] rev 23174
win32: fix win32 installers generation cd0c51c07e5f introduced a typo preventing a proper generation of the installers. Also remove ConcatenateFiles() function as it is no more required.
Tue, 04 Nov 2014 13:38:33 +0000 patchbomb: add label and color to the confirm output
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 04 Nov 2014 13:38:33 +0000] rev 23173
patchbomb: add label and color to the confirm output The current output is mostly a wall of text. This makes it hard to actually check something for people with lazy eyes. We use labels and colors to make it more joyful (and get the patch summaries to stand out). The colors have been arbitrarily choosen. They can be changed later if someone has a more scientific choice.
Tue, 04 Nov 2014 23:41:46 +0900 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org> [Tue, 04 Nov 2014 23:41:46 +0900] rev 23172
tests: write hgrc of more than two lines by using shell heredoc Here document should be readable than repeating echo commands.
Tue, 04 Nov 2014 10:40:06 +0000 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 04 Nov 2014 10:40:06 +0000] rev 23171
perf: use a formatter for output We use a `formatter` object in the perf extensions. This allow the use of formatted output like json. To avoid adding logic to create a formatter and pass it around to the timer function in every command, we add a `gettimer` function in charge of returning a `timer` function as simple as before but embedding an appropriate formatter. This new `gettimer` function also return the formatter as it needs to be explicitly closed at the end of the command. example output: $ hg --config ui.formatjson=True perfvolatilesets visible obsolete [ { "comb": 0.02, "count": 126, "sys": 0.0, "title": "obsolete", "user": 0.02, "wall": 0.0199398994446 }, { "comb": 0.02, "count": 117, "sys": 0.0, "title": "visible", "user": 0.02, "wall": 0.0250301361084 } ]
Wed, 24 Sep 2014 21:33:12 -0700 bundle2: support a "version" argument in `changegroup` part
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 24 Sep 2014 21:33:12 -0700] rev 23170
bundle2: support a "version" argument in `changegroup` part When included, this mandatory parameter (mandatory == cannot be ignored) lets the part handler select the right cgunpacker class.
Wed, 24 Sep 2014 21:28:54 -0700 bundle2caps: advertise the available versions for changegroup packer
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 24 Sep 2014 21:28:54 -0700] rev 23169
bundle2caps: advertise the available versions for changegroup packer This will let the bundle2 client and server detect what packer they should be using. This detection part is not done. I expect it to be done with the addition of the second packer (with generaldelta support).
Wed, 24 Sep 2014 21:24:06 -0700 changegroup: add a "packermap" dictionary to track different packer versions
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 24 Sep 2014 21:24:06 -0700] rev 23168
changegroup: add a "packermap" dictionary to track different packer versions We only have "01" right now, but we should get general delta in soon. Bundle2 is expected to make use of this to advertise and select the right packer to use on both sides.
Mon, 03 Nov 2014 12:08:03 -0500 templater: don't overwrite the keyword mapping in runsymbol() (issue4362) stable
Matt Harbison <matt_harbison@yahoo.com> [Mon, 03 Nov 2014 12:08:03 -0500] rev 23167
templater: don't overwrite the keyword mapping in runsymbol() (issue4362) This keyword remapping was introduced in e06e9fd2d99f as part of converting generator based iterators into list based iterators, mentioning "undesired behavior in template" when a generator is exhausted, but doesn't say what and introduces no tests. The problem with the remapping was that it corrupted the output for keywords like 'extras', 'file_copies' and 'file_copies_switch' in templates such as: $ hg log -r 142b5d5ec9cc --template "{file_copies % ' File: {file_copy}\n'}" File: mercurial/changelog.py (mercurial/hg.py) File: mercurial/changelog.py (mercurial/hg.py) File: mercurial/changelog.py (mercurial/hg.py) File: mercurial/changelog.py (mercurial/hg.py) File: mercurial/changelog.py (mercurial/hg.py) File: mercurial/changelog.py (mercurial/hg.py) File: mercurial/changelog.py (mercurial/hg.py) File: mercurial/changelog.py (mercurial/hg.py) What was happening was that in the first call to runtemplate() inside runmap(), 'lm' mapped the keyword (e.g. file_copies) to the appropriate showxxx() method. On each subsequent call to runtemplate() in that loop however, the keyword was mapped to a list of the first item's pieces, e.g.: 'file_copy': ['mercurial/changelog.py', ' (', 'mercurial/hg.py', ')'] Therefore, the dict for the second and any subsequent items were not processed through the corresponding showxxx() method, and the first item's data was reused. The 'extras' keyword regressed in de7e6c489412, and 'file_copies' regressed in 0b241d7a8c62 for other reasons. The common thread of things fixed by this seems to be when a list of dicts are passed to the templatekw._hybrid class.
Thu, 16 Oct 2014 23:15:35 -0700 revset-matching: call 'getset' on a 'fullreposet'
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 16 Oct 2014 23:15:35 -0700] rev 23166
revset-matching: call 'getset' on a 'fullreposet' Calling 'baseset(repo.changelog)' builds a list for all revisions in the repo. And we already have the lazy and efficient 'fullreposet' class for this purpose. This gives us the usual benefits of the fullreposet but it is less visible because the matching process itself is very expensive: revset) matching(100) before) wall 6.413281 comb 6.420000 user 5.910000 sys 0.510000 (best of 3) after) wall 6.173608 comb 6.170000 user 5.750000 sys 0.420000 (best of 3) However for some complex list, this provide a massive speedup revset) matching(parents(100)) before) wall 23.890740 comb 23.890000 user 23.450000 sys 0.440000 (best of 3) after) wall 6.382280 comb 6.390000 user 5.930000 sys 0.460000 (best of 3)
Thu, 16 Oct 2014 23:15:06 -0700 revset-parentspec: call 'getset' on a 'fullreposet'
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 16 Oct 2014 23:15:06 -0700] rev 23165
revset-parentspec: call 'getset' on a 'fullreposet' Calling 'baseset(repo.changelog)' builds a list for all revisions in the repo. And we already have the lazy and efficient 'fullreposet' class for this purpose. This gives us the usual benefits of the fullreposet: revset) 100^1 before) wall 0.002694 comb 0.000000 user 0.000000 sys 0.000000 (best of 897) after) wall 0.000997 comb 0.000000 user 0.000000 sys 0.000000 (best of 2324) revset) parents(100)^1 before) wall 0.003832 comb 0.000000 user 0.000000 sys 0.000000 (best of 587) after) wall 0.001034 comb 0.000000 user 0.000000 sys 0.000000 (best of 2309) revset) (100^1)^1 before) wall 0.005616 comb 0.000000 user 0.000000 sys 0.000000 (best of 405) after) wall 0.001030 comb 0.000000 user 0.000000 sys 0.000000 (best of 2258)
Thu, 16 Oct 2014 23:14:17 -0700 revset-children: call 'getset' on a 'fullreposet'
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 16 Oct 2014 23:14:17 -0700] rev 23164
revset-children: call 'getset' on a 'fullreposet' Calling 'baseset(repo.changelog)' builds a list for all revisions in the repo. And we already have the lazy and efficient 'fullreposet' class for this purpose. This gives us the usual benefits of the fullreposet: revset) children(tip~100) before) wall 0.007469 comb 0.010000 user 0.010000 sys 0.000000 (best of 338) after) wall 0.003356 comb 0.000000 user 0.000000 sys 0.000000 (best of 755)
Thu, 16 Oct 2014 23:11:25 -0700 revset-ancestorspec: call 'getset' on a 'fullreposet'
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 16 Oct 2014 23:11:25 -0700] rev 23163
revset-ancestorspec: call 'getset' on a 'fullreposet' Calling 'baseset(repo.changelog)' builds a list for all revisions in the repo. And we already have the lazy and efficient 'fullreposet' class for this purpose. This gives us the usual benefits of the fullreposet: revset) 100~5 before) wall 0.002712 comb 0.000000 user 0.000000 sys 0.000000 (best of 918) after) wall 0.000996 comb 0.000000 user 0.000000 sys 0.000000 (best of 2493) revset) parents(100)~5 before) wall 0.003812 comb 0.010000 user 0.010000 sys 0.000000 (best of 667) after) wall 0.001038 comb 0.000000 user 0.000000 sys 0.000000 (best of 2361) revset) (100~5)~5 before) wall 0.005614 comb 0.000000 user 0.000000 sys 0.000000 (best of 446) after) wall 0.001035 comb 0.000000 user 0.000000 sys 0.000000 (best of 2424)
Thu, 16 Oct 2014 23:10:44 -0700 revset-rangeset: call 'getset' on a 'fullreposet'
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 16 Oct 2014 23:10:44 -0700] rev 23162
revset-rangeset: call 'getset' on a 'fullreposet' Calling 'baseset(repo.changelog)' builds a list for all revisions in the repo. And we already have the lazy and efficient 'fullreposet' class for this purpose. This gives us the usual benefit ofs the fullreposet: revset) 10:100 before) wall 0.002774 comb 0.000000 user 0.000000 sys 0.000000 (best of 797) after) wall 0.001977 comb 0.000000 user 0.000000 sys 0.000000 (best of 1244) revset) parents(10):parents(100) before) wall 0.005054 comb 0.000000 user 0.000000 sys 0.000000 (best of 481) after) wall 0.002060 comb 0.000000 user 0.000000 sys 0.000000 (best of 1056)
Sun, 19 Oct 2014 22:19:22 -0700 test-revert: make sure all 'tracked' files are really tracked
Martin von Zweigbergk <martinvonz@google.com> [Sun, 19 Oct 2014 22:19:22 -0700] rev 23161
test-revert: make sure all 'tracked' files are really tracked When a file is missing in the 'parent' version and is tracked but missing in the working directory, which happens by the 'missing' or 'removed' types, and the 'clean' type in the working directory, the file does not exist in the working directory (unlike it would had the 'deleted' type been used). Thus, the *_missing_missing_tracked are not actually tracked and they end up testing the same state as *_missing_missing_untracked. To make them tracked, add a temporary file, just like we do for the delete case. For simplicity's sake, let's make sure the gen-revert-cases.py script always puts a file in the working directory, whether or not it's going to be deleted.
Sat, 18 Oct 2014 18:12:54 -0700 test-revert: sort by output filename again
Martin von Zweigbergk <martinvonz@google.com> [Sat, 18 Oct 2014 18:12:54 -0700] rev 23160
test-revert: sort by output filename again Future patches will change how the output of 'gen-revert-cases.py filelist' is generated, so now we want the order to depend on just the filename again.
Mon, 20 Oct 2014 22:54:18 -0700 test-revert: name files by state, not by state transition
Martin von Zweigbergk <martinvonz@google.com> [Mon, 20 Oct 2014 22:54:18 -0700] rev 23159
test-revert: name files by state, not by state transition This is the main patch in a series. See motivation in earlier patch. In this patch, we actually change the names of the generated files. For example, the file that is currently called missing_clean becomes missing_missing_missing-tracked and it's clearer that it should be tracked. It turns out that since the state was not previously clear, it ended up testing an untracked state, which was the same as for missing_clean. We'll fix this in a later patch. Let's also change the content from (base,parent,wc) to (content1,content2,content3) to make them all the same length so they line up when displayed.
Fri, 17 Oct 2014 06:27:43 -0700 test-revert: temporarily sort by input states instead of output filename
Martin von Zweigbergk <martinvonz@google.com> [Fri, 17 Oct 2014 06:27:43 -0700] rev 23158
test-revert: temporarily sort by input states instead of output filename The next patch will change the names of the files produced by the script in test-revert. In order to reduce the size and increase the clarity of the next patch, make the order produced by the internal 'gen-revert-cases.py filelist' command independent of the filenames.
Sat, 18 Oct 2014 22:23:19 -0700 test-revert: put content, not keys, into 'combination'
Martin von Zweigbergk <martinvonz@google.com> [Sat, 18 Oct 2014 22:23:19 -0700] rev 23157
test-revert: put content, not keys, into 'combination' By putting the file content rather than keys in the 'combination' list, we restrict the knowledge of 'ctxcontent' and 'wccontent' to the loop generating the combinations. That will make it easier to replace the generation code.
Fri, 17 Oct 2014 09:02:30 -0700 test-revert: replace 'removed' in working copy with 'untracked-deleted'
Martin von Zweigbergk <martinvonz@google.com> [Fri, 17 Oct 2014 09:02:30 -0700] rev 23156
test-revert: replace 'removed' in working copy with 'untracked-deleted' The 'wccontent' variable has eight different states, four of them tracked, and the other four untracked (at least when the file existed in the parent revision). Among these eight states, 'removed' sticks out by lacking the 'untracked-' prefix despite resulting in an untracked state. To make the symmetry clearer, and to prepare for future patches, rename 'removed' to 'untracked-deleted', which is exactly what it is. Note that, unlike 'remove', 'deleted' is configured in gen-revert-cases.py to have content in the working directory and that that content is instead expected to be removed in the test script. However, no changes are needed to the test script, since it already contains 'hg forget *untracked*' and 'rm *deleted*', which together have the same effect as 'hg remove'. See additional motivation in earlier patch.
Thu, 16 Oct 2014 23:59:08 -0700 test-revert: removing a missing file has no effect
Martin von Zweigbergk <martinvonz@google.com> [Thu, 16 Oct 2014 23:59:08 -0700] rev 23155
test-revert: removing a missing file has no effect The tests for removed_deleted and removed_removed test the same state as removed_clean and removed_untracked-clean, respectively. Drop the duplicate tests. See additional motivation in earlier patch.
Fri, 17 Oct 2014 00:39:26 -0700 test-revert: reverting an addition is the same as removing
Martin von Zweigbergk <martinvonz@google.com> [Fri, 17 Oct 2014 00:39:26 -0700] rev 23154
test-revert: reverting an addition is the same as removing The tests for added_revert and added_untracked-revert test the same state as added_deleted and added_removed, respectively. Drop the duplicate tests. See additional motivation in earlier patch.
Thu, 16 Oct 2014 23:36:40 -0700 test-revert: reverting no change means it's clean
Martin von Zweigbergk <martinvonz@google.com> [Thu, 16 Oct 2014 23:36:40 -0700] rev 23153
test-revert: reverting no change means it's clean This is the first step in a series that aims to put the state, not the state transitions, in the filenames of the files generated by the gen-revert-cases.py script. The possible state of a file in a revision and in the working copy is only whether it exists and what its content is (the tests don't care check flags). In the dirstate, the only state is whether it's tracked or not. With the new naming, the file that is currently called modified_untracked-clean now becomes content1_content2_content2-untracked, for example. By putting these states in the filename, it becomes easier to see that we're not missing or duplicating any state, and to check that the state is what we think it is. For example, the file that is currently called missing_clean becomes missing_missing_missing-tracked and it's clearer that it should be tracked. Putting the content in the filename will also make the tests of file content (e.g. "cat ../content-parent.txt") very obvious. When we put the state in the filename, the filenames clearly need to be unique. However, it turns out that some states are currently tested multiple times. The 'revert' transition in the script means to take the content from the grandparent. If the parent is the same as the grandparent, there is no change compared to the parent, which is exactly what 'clean' means. Avoid testing the same state twice.
Mon, 03 Nov 2014 16:56:32 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 03 Nov 2014 16:56:32 -0600] rev 23152
merge with stable
Sun, 02 Nov 2014 15:27:15 -0500 extdiff: drop the command alias without options example in the help text
Matt Harbison <matt_harbison@yahoo.com> [Sun, 02 Nov 2014 15:27:15 -0500] rev 23151
extdiff: drop the command alias without options example in the help text In the dropped example, the extension would look for 'vdiff.diffargs' in the configuration, and not finding it, would run kdiff3 without the configured options. That's not obvious to a new user who sees a kdiff3 configuration in the prepackaged mergetools.rc file, and sees that kdiff3 still runs. While it is conceivable that the user wants a kdiff3 command that runs without the preconfigured options, it is more likely what they want is this, which uses the canned options: [alias] vdiff = kdiff3 [extdiff] kdiff3 = We could mention alias here, but that seems like it belongs elswhere.
Fri, 31 Oct 2014 21:34:55 -0400 extdiff: allow a preconfigured merge-tool to be invoked
Matt Harbison <matt_harbison@yahoo.com> [Fri, 31 Oct 2014 21:34:55 -0400] rev 23150
extdiff: allow a preconfigured merge-tool to be invoked There are three ways to configure an extdiff tool: 1) cmd.tool = (/path/to/exe optional) 2) tool = (path/to/exe optional) 3) tool = sometool someargs Previously, if no executable is specified in the first two forms, the named tool must be in $PATH, or the invocation fails. Since the [merge-tools] section already has the path to the diff executable, and/or the registry keys to find the executable on Windows, reuse that configuration for forms 1 and 2 instead of failing. We already fallback to [diff-tools] and then [merge-tools] for program arguments if they aren't specified in the [extdiff] section. Since this additional lookup only occurs if an executable is not on the $PATH for the named tool, this is backwards compatible. For now, we assume the user knows what he is doing if a path is provided. This change allows a configuration file like this (assuming beyondcompare3 is configured in merge-tools), instead of hardcoding system specific a path: [extdiff] beyondcompare3 =
Mon, 03 Nov 2014 16:30:21 -0600 extdiff: sort files when snapshotting
Matt Mackall <mpm@selenic.com> [Mon, 03 Nov 2014 16:30:21 -0600] rev 23149
extdiff: sort files when snapshotting This fixes output stability and is generally filesystem-performance-friendly.
Sun, 02 Nov 2014 14:58:50 -0500 filemerge: split the logic for finding an external tool to its own function
Matt Harbison <matt_harbison@yahoo.com> [Sun, 02 Nov 2014 14:58:50 -0500] rev 23148
filemerge: split the logic for finding an external tool to its own function This will be used by extdiff in an subsequent patch.
Sun, 02 Nov 2014 13:18:08 -0800 largefiles: simplify check for lack of path arguments
Martin von Zweigbergk <martinvonz@google.com> [Sun, 02 Nov 2014 13:18:08 -0800] rev 23147
largefiles: simplify check for lack of path arguments Instead of checking for a partial merge by checking that the matches has no files and no patterns, check that it's not an always-matcher. Except for being shorter, it also catches the rare case of an exact-matcher with no files.
Fri, 31 Oct 2014 14:11:47 -0700 largefiles: shortcircuit status code also for non-matching patterns
Martin von Zweigbergk <martinvonz@google.com> [Fri, 31 Oct 2014 14:11:47 -0700] rev 23146
largefiles: shortcircuit status code also for non-matching patterns We currently shortcircuit the checking for large file standins if only patterns of type 'path' are given on the command line. That makes e.g. "hg st 'glob:foo/**'" unnecessarily slow when the only large files are in a sibling directory. Relax the check to be that it is not an always-matcher and that no large files match the patterns given on the command line. Note that before this change, only the latter of the following two would show the status of files in .hglf (since the -I makes match.anypats() true). After this change, they both display the status. This behavior doesn't seem correct, but it would be a separate change to explicitly filter out .hglf even in the shortcircuit case. hg st .hglf/$file hg st .hglf/$file -I .
Mon, 27 Oct 2014 21:10:24 -0700 largefiles: remove confusing 'or None' from predicate
Martin von Zweigbergk <martinvonz@google.com> [Mon, 27 Oct 2014 21:10:24 -0700] rev 23145
largefiles: remove confusing 'or None' from predicate The match function that is overriden returns a boolean value, so adding 'or None' is both unnecessary and confusing.
Thu, 30 Oct 2014 22:32:39 -0700 largefiles: drop unnecessary setting of matcher._always
Martin von Zweigbergk <martinvonz@google.com> [Thu, 30 Oct 2014 22:32:39 -0700] rev 23144
largefiles: drop unnecessary setting of matcher._always In two very similar segments of code, an existing matcher is modified by changing its _files attribute through a map and a filter operation. Neither operation can cause an empty list to become non-empty, so a matcher that always matches can not stop always matching. Drop the setting of the attribute, so we don't unnecessarily prevent the fast paths to be taken where these matchers end up being used.
Sun, 19 Oct 2014 03:22:23 +0200 config: move mergetools configuration from contrib to default configuration
Mads Kiilerich <madski@unity3d.com> [Sun, 19 Oct 2014 03:22:23 +0200] rev 23143
config: move mergetools configuration from contrib to default configuration The merge tool configuration is an essential part of a good initial user experience. 'make osx' installers and direct 'make' installation did not have merge tool configuration. Now they have. Note: The installer fixes for windows have been done blindly and might require additional changes.
Thu, 04 Sep 2014 21:36:35 +0200 config: introduce "built-in" default configuration settings in default.d
Mads Kiilerich <madski@unity3d.com> [Thu, 04 Sep 2014 21:36:35 +0200] rev 23142
config: introduce "built-in" default configuration settings in default.d This helps providing a more consistent user experience on all platforms and with all packaging. The exact location of default.d depends on how Mercurial is installed and whether it is 'frozen'. The exact location should never be relevant to users and is intentionally not explained in details in the documentation. It will however always be next to the help and templates files. Note that setting HGRCPATH also disables these defaults. I don't know if that should be considered a bug or a feature.
Sat, 18 Oct 2014 21:48:38 +0200 contrib: buildrpm checking of md5 checksums of downloaded Python and Docutils
Mads Kiilerich <madski@unity3d.com> [Sat, 18 Oct 2014 21:48:38 +0200] rev 23141
contrib: buildrpm checking of md5 checksums of downloaded Python and Docutils
Sun, 02 Nov 2014 16:39:02 +0100 contrib: update build defaults to latest Python and docutils versions
Mads Kiilerich <madski@unity3d.com> [Sun, 02 Nov 2014 16:39:02 +0100] rev 23140
contrib: update build defaults to latest Python and docutils versions Use Python 2.7.8 and Docutils 0.12 for Makefile.python and buildrpm (CentOS 5 rpms).
Thu, 17 Apr 2014 22:47:38 +0200 spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 22:47:38 +0200] rev 23139
spelling: fixes from proofreading of spell checker issues
Thu, 26 Jul 2012 11:38:13 +0100 extdiff: quote user-supplied options passed to shell stable
Michael Fyles <mf@vorston.net> [Thu, 26 Jul 2012 11:38:13 +0100] rev 23138
extdiff: quote user-supplied options passed to shell $ hg extdiff -p cmd -o "name <user@example.com>" resulted in a shell redirection error (due to the less-than sign), rather than passing the single option to cmd. This was due to options not being quoted for passing to the shell, via util.system(). Apply util.shellquote() to each of the user-specified options (-o) to the comparison program before they are concatenated and passed to util.system(). The requested external diff command (-p) and the files/directories being compared are already quoted correctly. The discussion at the time of changeset be98c5ce4022 correctly noted that this course of action breaks whitespace-separated options specified for external diff commands in the configuration. The lower part of the patch corrects this by lexing options read from the configuration file into separate options rather than reading them all into the first option. Update test to cover these conditions. Related changesets (reverse-chronological): - be98c5ce4022 (fix reverted to make configuration file options work) - 453097750fbf (issue fixed but without fix for configuration file)
Sun, 02 Nov 2014 13:20:07 +0900 serve: correct meta variable of --daemon-pipefds option stable
Yuya Nishihara <yuya@tcha.org> [Sun, 02 Nov 2014 13:20:07 +0900] rev 23137
serve: correct meta variable of --daemon-pipefds option It was changed to lock path at e22695b4472f.
Sun, 02 Nov 2014 13:08:46 +0900 tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Yuya Nishihara <yuya@tcha.org> [Sun, 02 Nov 2014 13:08:46 +0900] rev 23136
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen() Because the original dumbhttp.py exited without waiting for listen(), several tests could fail with "abort: error: Connection refused" if subsequent hg command is fast enough.
Sun, 19 Oct 2014 22:09:03 -0700 test-revert: remove obsolete comment about known misbehavior
Martin von Zweigbergk <martinvonz@google.com> [Sun, 19 Oct 2014 22:09:03 -0700] rev 23135
test-revert: remove obsolete comment about known misbehavior It seems like the last known misbehvior that the comment was referring to was dealt with in 2ff28e07d7d6 (revert: properly back up added files with local modification, 2014-08-31).
Mon, 03 Nov 2014 11:06:51 -0600 test-revert.t: fix wc check-code false positive
Matt Mackall <mpm@selenic.com> [Mon, 03 Nov 2014 11:06:51 -0600] rev 23134
test-revert.t: fix wc check-code false positive
Mon, 03 Nov 2014 14:01:52 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 03 Nov 2014 14:01:52 -0600] rev 23133
merge with stable
Sat, 01 Nov 2014 22:48:49 -0500 Added signature for changeset ced632394371 stable
Matt Mackall <mpm@selenic.com> [Sat, 01 Nov 2014 22:48:49 -0500] rev 23132
Added signature for changeset ced632394371
Sat, 01 Nov 2014 22:48:12 -0500 Added tag 3.2 for changeset ced632394371 stable
Matt Mackall <mpm@selenic.com> [Sat, 01 Nov 2014 22:48:12 -0500] rev 23131
Added tag 3.2 for changeset ced632394371
Sat, 01 Nov 2014 23:52:53 +0000 setdiscovery: limit the size of all sample (issue4411) stable 3.2
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 01 Nov 2014 23:52:53 +0000] rev 23130
setdiscovery: limit the size of all sample (issue4411) Further digging on this issue show that the limit on the sample size used in discovery never works for heads. Here is a quote from the code itself: desiredlen = size - len(always) if desiredlen <= 0: # This could be bad if there are very many heads, all unknown to the # server. We're counting on long request support here. The long request support never landed and evolution make the "very many heads, all unknown to the server" case quite common. We implement a simple and stupid hard limit of sample size for all query. This should prevent HTTP 414 error with the current state of the code.
Sat, 01 Nov 2014 23:17:50 +0000 hook: protect commit hooks against stripping of temporary commit (issue4422) stable
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 01 Nov 2014 23:17:50 +0000] rev 23129
hook: protect commit hooks against stripping of temporary commit (issue4422) History rewriting commands like histedit tend to use temporary commits. They may schedule hook execution on these temporary commits for after the lock has been released. But temporary commits are likely to have been stripped before the lock is released (and the hook run). Hook executed for missing revisions leads to various crashes. We disable hooks execution for revision missing in the repo. This provides a dirty but simple fix to user issues.
Sat, 01 Nov 2014 22:59:37 +0000 mq: do not call [0] on revset stable
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 01 Nov 2014 22:59:37 +0000] rev 23128
mq: do not call [0] on revset The __getitem__ method have been removed. The "first" method is to be used instead. Test have been extended to test this code path.
Sat, 01 Nov 2014 22:58:30 +0000 addset: fix `first` and `last` on sorted addset (issue4426) stable
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 01 Nov 2014 22:58:30 +0000] rev 23127
addset: fix `first` and `last` on sorted addset (issue4426) The lazy sorting were not enforced on addset. This was made visible through MQ.
Sat, 01 Nov 2014 17:30:57 -0500 clone: properly mark branches closed with --uncompressed (issue4428) stable
Matt Mackall <mpm@selenic.com> [Sat, 01 Nov 2014 17:30:57 -0500] rev 23126
clone: properly mark branches closed with --uncompressed (issue4428) On streaming clone, we were priming the local branch cache with the remote branchmap, without checking which heads were closed. This fixes an issue introduced in: changeset: 17740:e6067bec18da user: Tomasz Kleczek <tomasz.kleczek@fb.com> date: Wed Oct 03 13:19:53 2012 -0700 summary: branchcache: fetch source branchcache during clone (issue3378) that was exposed in 2.9 by: changeset: 20192:38fad5e76ee8 user: Brodie Rao <brodie@sf.io> date: Mon Sep 16 01:08:29 2013 -0700 summary: branches: simplify with repo.branchmap().iterbranches()
Sat, 01 Nov 2014 20:00:31 +0100 Makefile: update .PHONY stable
Mads Kiilerich <madski@unity3d.com> [Sat, 01 Nov 2014 20:00:31 +0100] rev 23125
Makefile: update .PHONY Based on sed -n 's/^\([a-z0-9-]*\):\(\s.*\)\?$/\1/gp' Makefile | xargs echo add check, check-code, update-pot, some packaging targets
Sat, 01 Nov 2014 20:00:00 +0100 buildrpm: fix use of invalid $PLATFORM in mercurial.repo stable
Mads Kiilerich <madski@unity3d.com> [Sat, 01 Nov 2014 20:00:00 +0100] rev 23124
buildrpm: fix use of invalid $PLATFORM in mercurial.repo
Sat, 01 Nov 2014 13:13:04 -0500 debuglocks: add missing usage summary stable
Matt Mackall <mpm@selenic.com> [Sat, 01 Nov 2014 13:13:04 -0500] rev 23123
debuglocks: add missing usage summary
Sat, 01 Nov 2014 19:02:31 +0100 help: don't crash on help for 'sections' with multiple '.' stable
Mads Kiilerich <madski@unity3d.com> [Sat, 01 Nov 2014 19:02:31 +0100] rev 23122
help: don't crash on help for 'sections' with multiple '.'
Sat, 01 Nov 2014 18:28:54 +0100 help: fix config description of ui.reportoldssl stable
Mads Kiilerich <madski@unity3d.com> [Sat, 01 Nov 2014 18:28:54 +0100] rev 23121
help: fix config description of ui.reportoldssl
Sat, 01 Nov 2014 18:03:17 +0900 i18n-ja: synchronized with f3baaeffe841 stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 18:03:17 +0900] rev 23120
i18n-ja: synchronized with f3baaeffe841
Fri, 31 Oct 2014 22:30:39 -0200 i18n-pt_BR: synchronized with 0b7853f969ac stable
Wagner Bruna <wbruna@yahoo.com> [Fri, 31 Oct 2014 22:30:39 -0200] rev 23119
i18n-pt_BR: synchronized with 0b7853f969ac
Fri, 31 Oct 2014 22:22:41 -0200 merge with i18n stable
Wagner Bruna <wbruna@yahoo.com> [Fri, 31 Oct 2014 22:22:41 -0200] rev 23118
merge with i18n
Sat, 01 Nov 2014 01:03:11 +0900 i18n-ja: synchronized with 5459b30aa498 stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 01:03:11 +0900] rev 23117
i18n-ja: synchronized with 5459b30aa498
Fri, 31 Oct 2014 12:56:25 -0700 clone: fix copying bookmarks in uncompressed clones (issue4430) stable
Durham Goode <durham@fb.com> [Fri, 31 Oct 2014 12:56:25 -0700] rev 23116
clone: fix copying bookmarks in uncompressed clones (issue4430) ef62c66bee1b broke bookmarks getting copied during uncompressed clones. Since most of the pull logic has been moved into exchange.py, lets just call exchange.pull to fix up the repo with the latest bits after the streaming clone has bootstrapped the repo. This keeps us from having to duplicate the bookmark logic.
Fri, 31 Oct 2014 10:41:36 -0700 revset: don't recreate matcher for every revision stable
Martin von Zweigbergk <martinvonz@google.com> [Fri, 31 Oct 2014 10:41:36 -0700] rev 23115
revset: don't recreate matcher for every revision The matcher variable 'm' in checkstatus() is reset to None on each call, so the caching of the matcher no longer happens as it was intended. This seems to be a regression in ed7b674824a3 (revset: added lazyset implementation to checkstatus, 2014-01-03). Fix by moving the cached matcher into the enclosing function so it's actually cached across calls. This speeds up hg log -r 'modifies(mercurial/context.py)' >/dev/null from 7.5s to 4s. Also see similar fix in f2aeff8a87b6 (revset: avoid recalculating filesets, 2014-10-22).
Sat, 01 Nov 2014 02:43:08 +0900 help: use ":hg:`command`" instead of incorrect ":hg:'command'" notation stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23114
help: use ":hg:`command`" instead of incorrect ":hg:'command'" notation
Sat, 01 Nov 2014 02:43:08 +0900 i18n: add i18n comment to error messages of filesets predicates stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23113
i18n: add i18n comment to error messages of filesets predicates
Sat, 01 Nov 2014 02:43:08 +0900 i18n: add i18n comment to error messages of template functions stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23112
i18n: add i18n comment to error messages of template functions
Sat, 01 Nov 2014 02:43:08 +0900 help: refer ":merge3" instead of "internal:merge3" stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23111
help: refer ":merge3" instead of "internal:merge3" According to warning message (introduced by 38e0363dcbe0) in filemerge.py, the former should be used as official name.
Sat, 01 Nov 2014 02:43:08 +0900 i18n: make hint message of exception translatable stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23110
i18n: make hint message of exception translatable
Sat, 01 Nov 2014 02:43:08 +0900 help: use "hg files" instead of "hg locate" in "hg help filesets" stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23109
help: use "hg files" instead of "hg locate" in "hg help filesets" The latter command is already deprecated.
Sat, 01 Nov 2014 02:41:18 +0900 files: refer "hg help filesets" instead of "hg help revsets" in help text stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:41:18 +0900] rev 23108
files: refer "hg help filesets" instead of "hg help revsets" in help text "specifying FILE patterns" should refer the former.
Thu, 30 Oct 2014 17:52:01 -0500 tests: silence output race in test-run-tests.t stable
Matt Mackall <mpm@selenic.com> [Thu, 30 Oct 2014 17:52:01 -0500] rev 23107
tests: silence output race in test-run-tests.t
Thu, 30 Oct 2014 16:57:28 -0500 merge with i18n stable
Matt Mackall <mpm@selenic.com> [Thu, 30 Oct 2014 16:57:28 -0500] rev 23106
merge with i18n
Mon, 27 Oct 2014 20:38:17 -0200 i18n-pt_BR: synchronized with 8d43c6bb38c0 stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 27 Oct 2014 20:38:17 -0200] rev 23105
i18n-pt_BR: synchronized with 8d43c6bb38c0
Thu, 23 Oct 2014 18:17:00 -0200 i18n-pt_BR: synchronized with c312ef382033 stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Thu, 23 Oct 2014 18:17:00 -0200] rev 23104
i18n-pt_BR: synchronized with c312ef382033
Fri, 17 Oct 2014 21:25:48 -0700 transaction: only generate file when we actually close the transaction stable
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 17 Oct 2014 21:25:48 -0700] rev 23103
transaction: only generate file when we actually close the transaction Before this change, the file were written for every call to `tr.close()` exposing data to reader far too early.
Mon, 29 Sep 2014 00:59:25 -0700 transaction: extract file generation into its own function stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 29 Sep 2014 00:59:25 -0700] rev 23102
transaction: extract file generation into its own function We extract the code generating files into its own function. We are about to move this code around to fix a bug. We'll need it in a function soon to reuse it for "pending" logic. So we move the code into a function instead of moving it twice.
Tue, 28 Oct 2014 23:05:19 -0400 amend: abort early if no username is configured with evolve enabled (issue4211) stable
Matt Harbison <matt_harbison@yahoo.com> [Tue, 28 Oct 2014 23:05:19 -0400] rev 23101
amend: abort early if no username is configured with evolve enabled (issue4211) Amend will reuse the original username if a new one is not provided with -U, but obsolete.createmarkers() only considers ui.username() for the obsolete marker's metadata. Allowing the metadata field to be spoofed seems to defeat the point of the field in the first place. This covers 'evolve amend' and 'ci --amend' with evolve enabled. Without this, the transaction aborts but the parent changeset is set to -1. The corresponding test will be added to evolve separately.
Tue, 28 Oct 2014 14:06:06 -0700 revset: fix O(2^n) perf regression in addset stable
Durham Goode <durham@fb.com> [Tue, 28 Oct 2014 14:06:06 -0700] rev 23100
revset: fix O(2^n) perf regression in addset hg log -r 1 ... -r 100 was never returning due to a regression in the way addset computes __nonzero__. It used 'bool(self._r1 or self._r2)' which required executing self._r1.__nonzero__ twice (once for the or, once for the bool). hg log with a lot of -r's happens to build a one sided addset tree of N length, which ends up being 2^N performance. This patch fixes it by converting to bool before or'ing. This problem can be repro'd with something as simple as: hg log `for x in $(seq 1 50) ; do echo "-r $x "; done` Adding '1 + 2 + ... + 20' to the revsetbenchmark.txt didn't seem to repro the problem, so I wasn't able to add a revset benchmark for this issue.
Mon, 27 Oct 2014 23:47:41 -0500 tests: add missing glob for Windows stable
Matt Mackall <mpm@selenic.com> [Mon, 27 Oct 2014 23:47:41 -0500] rev 23099
tests: add missing glob for Windows
Mon, 27 Oct 2014 18:44:05 -0500 test-convert-svn-sink: properly isolate symlink section stable
Matt Mackall <mpm@selenic.com> [Mon, 27 Oct 2014 18:44:05 -0500] rev 23098
test-convert-svn-sink: properly isolate symlink section This was fixed earlier by moving all the symlink bits to a section to the end of the file, but then it was broken (by the same person) by adding more tests at the end.
Fri, 24 Oct 2014 11:39:39 -0700 util.fspath: use a dict rather than a linear scan for lookups stable
Siddharth Agarwal <sid0@fb.com> [Fri, 24 Oct 2014 11:39:39 -0700] rev 23097
util.fspath: use a dict rather than a linear scan for lookups Previously, we'd scan through the entire directory listing looking for a normalized match. This is O(N) in the number of files in the directory. If we decide to call util.fspath on each file in it, the overall complexity works out to O(N^2). This becomes a problem with directories a few thousand files or larger. Switch to using a dictionary instead. There is a slightly higher upfront cost to pay, but for cases like the above this is amortized O(1). Plus there is a lower constant factor because generator comprehensions are faster than for loops, so overall it works out to be a very small loss in performance for 1 file, and a huge gain when there's more. For a large repo with around 200k files in it on a case-insensitive file system, for a large directory with over 30,000 files in it, the following command was tested: ls | shuf -n $COUNT | xargs hg status This command leads to util.fspath being called on $COUNT files in the directory. COUNT before after 1 0.77s 0.78s 100 1.42s 0.80s 1000 6.3s 0.96s I also tested with COUNT=10000, but before took too long so I gave up.
Mon, 27 Oct 2014 16:53:01 -0500 test-clone.t: drop message about listing bookmarks with no hardlinks stable
Matt Mackall <mpm@selenic.com> [Mon, 27 Oct 2014 16:53:01 -0500] rev 23096
test-clone.t: drop message about listing bookmarks with no hardlinks
Mon, 27 Oct 2014 16:39:57 -0500 tests: don't try to test unix sockets on vfat stable
Matt Mackall <mpm@selenic.com> [Mon, 27 Oct 2014 16:39:57 -0500] rev 23095
tests: don't try to test unix sockets on vfat
Tue, 28 Oct 2014 00:19:18 +0900 tests: change obsolete timestamp to avoid "gmtime()" problem on Windows stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 00:19:18 +0900] rev 23094
tests: change obsolete timestamp to avoid "gmtime()" problem on Windows Before this patch, "test-obsolete.t" fails on Windows environment, because strings corresponded to "tm_wday" (day of the week) field are incorrect. On POSIX environment, "gmtime()" returns correct "tm_wday" value even for negative "time_t" value. On the other hand, it returns incorrect one on Windows environment. At least, "gmtime()" of the Windows runtime library bundled with Python 2.7.3 does. According to 9a7d0f7e0561 introducing original timestamp value '56 120', it shouldn't cause negative "time_t" value. test-obsolete: remove subminute timezone in test Obsmarker format "1" does not supports sub minute timezone. So we change the test to something slightly more sensible. It replaced "-d '56 12'" by "-d '56 120'".
Tue, 28 Oct 2014 00:19:18 +0900 tests: use "%HG_ARGS%" in shell alias on Windows instead of "$HG_ARGS" stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 00:19:18 +0900] rev 23093
tests: use "%HG_ARGS%" in shell alias on Windows instead of "$HG_ARGS" Before this patch, a part of "test-alias.t" fails unexpectedly on Windows environment, because "cmd.exe" can't evaluate "$HG_ARGS" expression in shell alias correctly. This patch uses "%HG_ARGS%" in shell alias on Windows instead of "$HG_ARGS" to expand it correctly.
Tue, 28 Oct 2014 00:19:18 +0900 tests: introduce "checkeditform-n-cat.sh" script to invoke "cat" in it safely stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 00:19:18 +0900] rev 23092
tests: introduce "checkeditform-n-cat.sh" script to invoke "cat" in it safely Before this patch, a part of "test-transplant.t" fails unexpectedly on Windows environment, because semicolon (";") in HGEDITOR isn't recognized as the command separator by "cmd.exe". This patch newly introduces "checkeditform-n-cat.sh" script to invoke "cat" in it safely anywhere.
Fri, 24 Oct 2014 13:50:00 -0400 doc: change 'revision or range' to 'revision or revset' stable
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 24 Oct 2014 13:50:00 -0400] rev 23091
doc: change 'revision or range' to 'revision or revset' The phrase "revision or range" comes from a pre-revset era. Since the documentation for ranges now is under the revset docs, and as a helpful hint nudging users towards revsets, I think it's better to say "revision or revset"
Tue, 28 Oct 2014 01:14:12 +0900 largefiles: add examination of exec bit in "hg status --rev REV" case stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 01:14:12 +0900] rev 23090
largefiles: add examination of exec bit in "hg status --rev REV" case Before this patch, "hg status --rev REV" doesn't list largefiles up with "M" mark, even if exec bit of them is changed, because "lfilesrepo.status" doesn't examine exec bit in such case.
Tue, 28 Oct 2014 01:14:11 +0900 largefiles: ignore removal status of files not managed in the target context stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 01:14:11 +0900] rev 23089
largefiles: ignore removal status of files not managed in the target context Before this patch, "hg status --rev REV" listed largefiles removed in the working directory up with "R" mark, even if they aren't managed in the REV. Normal files aren't listed up in such case. When "lfilesrepo.status" is invoked for "hg status --rev REV", it treats files on conditions below as "removed" (to avoid manifest full scan in "ctx.status" ?): - marked as "R" in lfdirstate, or - files managed in the target revision but unknown in the manifest of the working context (= not including "R" files) But the former can include files not managed in the target context. To ignore removal status of files not managed in the target context, this patch drops files unknown in the target revision from "removed" list.
Sun, 26 Oct 2014 12:14:12 +0100 changelog: use headrevsfiltered stable
Mads Kiilerich <madski@unity3d.com> [Sun, 26 Oct 2014 12:14:12 +0100] rev 23088
changelog: use headrevsfiltered 2b5940f64750 introduced use of the new filtering headrevs C implementation. It caught TypeError to detect when to fall back to the implementation that was compatible with old extensions. That method was however not reliable. Instead, use the new headrevsfiltered function when passing a filter. It will reliably fail with AttributeError when an old extension that predates headrevsfiltered is used.
Sun, 26 Oct 2014 12:14:10 +0100 parsers: introduce headrevsfiltered in C extension stable
Mads Kiilerich <madski@unity3d.com> [Sun, 26 Oct 2014 12:14:10 +0100] rev 23087
parsers: introduce headrevsfiltered in C extension All extensions that have this function do support filtering. The existing headrevs function may support filtering but we cannot reliably detect whether it does.
Sat, 25 Oct 2014 21:34:49 -0400 httppeer: close the temporary bundle file after two-way streaming it stable
Matt Harbison <matt_harbison@yahoo.com> [Sat, 25 Oct 2014 21:34:49 -0400] rev 23086
httppeer: close the temporary bundle file after two-way streaming it This fixes several push tests in test-bundle2-exchange.t that were failing on Windows with messages like the following: $ hg -R main push http://localhost:$HGPORT2/ -r 32af7686d403 \ --bookmark book_32af pushing to http://localhost:$HGPORT2/ searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files remote: 1 new obsolescence markers updating bookmark book_32af abort: The process cannot access the file because it is being used by another process: 'C:\path\to\tmp\bundle.hg' [255]
Fri, 24 Oct 2014 14:24:28 -0700 status: make 'hg status --rev' faster when there are deleted files stable
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Oct 2014 14:24:28 -0700] rev 23085
status: make 'hg status --rev' faster when there are deleted files In order not to avoid listing files as both added and deleted, for example, we check for every file in the manifest if it is in the _list_ of deleted files. This can get quite slow when there are many deleted files. Change it to a set to make the containment check faster. On a somewhat contrived example of the Mozilla repo with the entire testing/ directory deleted (~14k files), this makes 'hg status --rev .^' go from 26s to 2s.
Mon, 27 Oct 2014 17:52:33 +0100 setdiscovery: limit the size of the initial sample (issue4411) stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 27 Oct 2014 17:52:33 +0100] rev 23084
setdiscovery: limit the size of the initial sample (issue4411) The set discovery start by sending a "known" command with all local heads. When the number of local heads is massive (eg: using hidden changesets) such request becomes too large. This lead to 414 error over http, aborting the whole process. We limit the size of the sample used by the first query to fix this. The test are impacted because they do test massive number of heads. But they do not test it over real world http setup.
Mon, 27 Oct 2014 17:40:32 +0100 setdiscovery: extract sample limitation in a `_limitsample` function stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 27 Oct 2014 17:40:32 +0100] rev 23083
setdiscovery: extract sample limitation in a `_limitsample` function We need to reuse this logic for the initial query. We extract it in a function to unsure sample limiting is applied consistently in all cases.
Fri, 24 Oct 2014 17:24:46 -0500 exchange: don't report failure from identical bookmarks stable
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 24 Oct 2014 17:24:46 -0500] rev 23082
exchange: don't report failure from identical bookmarks b901645a8784 regressed the behavior of pushing an unchanged bookmark to a remote. Before that commit, pushing a unchanged bookmark would result in "exporting bookmark @" being printed. After that commit, we now see an incorrect message "bookmark %s does not exist on the local or remote repository!" This patch fixes the regression introduced by b901645a8784 by having the bookmark error reporting code filter identical bookmarks and adds a test for the behavior.
Fri, 24 Oct 2014 10:40:37 -0700 bookmarks: explicitly track identical bookmarks stable
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 24 Oct 2014 10:40:37 -0700] rev 23081
bookmarks: explicitly track identical bookmarks bookmarks.compare() previously lumped identical bookmarks in the "invalid" bucket. This patch adds a "same" bucket. An 8-tuple for holding this state is pretty gnarly. The return value should probably be converted into a class to increase readability. But that is beyond the scope of a patch intended to be a late arrival to stable.
Fri, 24 Oct 2014 15:52:20 -0500 context.status: remove incorrect swapping of added/removed in workingctx stable
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Oct 2014 15:52:20 -0500] rev 23080
context.status: remove incorrect swapping of added/removed in workingctx The comment in workingctx.status() says that "calling 'super' subtly reveresed the contexts", but that is simply not true, so we should not be swapping added and removed fields.
Thu, 23 Oct 2014 13:17:37 -0700 keyword: use parent of working copy as base for status stable
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Oct 2014 13:17:37 -0700] rev 23079
keyword: use parent of working copy as base for status Instead of calling repo[None].status(), use the more common form that uses the parent of the working copy as the base: repo['.'].status(). Note that the former defaults to comparing to revision '.', while the latter defaults to revision None, so the contexts being compared are the same. It might seem like this would result in a reverse diff, but it turns out that workingctx.status() incorrectly reverses the result. That bug will be fixed in a later commit.
Thu, 23 Oct 2014 21:53:37 +0900 revset: avoid O(n) lookup of invalid revision in rev() stable
Yuya Nishihara <yuya@tcha.org> [Thu, 23 Oct 2014 21:53:37 +0900] rev 23078
revset: avoid O(n) lookup of invalid revision in rev() ba89f7b542c9 was not the final version of that patch. It was really slow because `l not in repo.changelog` iterates revisions up to `l`. Instead, rev() should utilize spanset.__contains__(). revset #0: rev(210000) 0) wall 0.000039 comb 0.000000 user 0.000000 sys 0.000000 (best of 67978) 1) wall 0.002721 comb 0.000000 user 0.000000 sys 0.000000 (best of 1055) 2) wall 0.000059 comb 0.000000 user 0.000000 sys 0.000000 (best of 45599) (0: 3.2-rc, 1: ba89f7b542c9, 2: this patch) Note that the benchmark result described in ba89f7b542c9 is wrong because it is the one of the initial version.
Thu, 23 Oct 2014 13:44:34 -0500 run-tests: output diffs with only forward slashes stable
Matt Mackall <mpm@selenic.com> [Thu, 23 Oct 2014 13:44:34 -0500] rev 23077
run-tests: output diffs with only forward slashes This removes some gratuitous variance when testing on Windows with test-run-tests.t.
Thu, 23 Oct 2014 12:35:10 -0200 i18n: add hint to digest mismatch message stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Thu, 23 Oct 2014 12:35:10 -0200] rev 23076
i18n: add hint to digest mismatch message
Thu, 23 Oct 2014 12:28:00 -0200 help/config: fix typo stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Thu, 23 Oct 2014 12:28:00 -0200] rev 23075
help/config: fix typo
Thu, 23 Oct 2014 12:27:57 -0200 files: fix example list syntax stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Thu, 23 Oct 2014 12:27:57 -0200] rev 23074
files: fix example list syntax
Thu, 23 Oct 2014 02:42:57 +0200 parsers: use 'k' format for Py_BuildValue instead of 'n' because Python 2.4 stable
Mads Kiilerich <madski@unity3d.com> [Thu, 23 Oct 2014 02:42:57 +0200] rev 23073
parsers: use 'k' format for Py_BuildValue instead of 'n' because Python 2.4 'n' was introduced in Mercurial in 2b5940f64750 and broke Python 2.4 support in mysterious ways that only showed failure in test-glog.t. Py_BuildValue failed because of the unknown format and a TypeError was thrown ... but it never showed up on the Python side and it happily continued processing with wrong data. Quoting https://docs.python.org/2/c-api/arg.html : n (integer) [Py_ssize_t] Convert a Python integer or long integer to a C Py_ssize_t. New in version 2.5. k (integer) [unsigned long] Convert a Python integer or long integer to a C unsigned long without overflow checking. This will use unsigned long instead of Py_ssize_t. That is not a good solution, but good is not an option when we have to support Python 2.4.
Mon, 20 Oct 2014 18:50:09 -0700 rebase: improve base revset performance stable
Durham Goode <durham@fb.com> [Mon, 20 Oct 2014 18:50:09 -0700] rev 23072
rebase: improve base revset performance The old revset had pretty terrible performance on large repositories (12+ seconds). This new revset achieves the same result in only 0.7s. As we improve the underlying revset APIs we can probably get this revset down to 'only(base, dest)::', but at the moment that version still takes 2s.
Thu, 16 Oct 2014 06:35:06 -0700 amend: fix amending rename commit with diverged topologies (issue4405) stable
Ryan McElroy <rmcelroy@fb.com> [Thu, 16 Oct 2014 06:35:06 -0700] rev 23071
amend: fix amending rename commit with diverged topologies (issue4405) This addresses the bug described in issue4405: when obsolescence markers are enabled, amending a commit with a file move can lead to the copy information being lost. However, the bug is more general and can be reproduced without obsmarkers as well, as demonstracted by Pierre-Yves and put into the updated test. Specifically, graph topology divergences between the filelogs and the changelog can cause copy information to be lost during amends.
Tue, 21 Oct 2014 17:09:37 -0400 hgweb: disable SSLv3 serving (BC) stable
Augie Fackler <raf@durin42.com> [Tue, 21 Oct 2014 17:09:37 -0400] rev 23070
hgweb: disable SSLv3 serving (BC) Because of recent attacks[0] on SSLv3, let's just drop support entirely. 0: http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html
Tue, 21 Oct 2014 17:01:23 -0400 sslutil: only support TLS (BC) stable
Augie Fackler <raf@durin42.com> [Tue, 21 Oct 2014 17:01:23 -0400] rev 23069
sslutil: only support TLS (BC) In light of the POODLE[0] attack on SSLv3, let's just drop the ability to use anything older than TLSv1 entirely. This only fixes the client side. Another commit will fix the server side. There are still a few SSLv[23] constants hiding in httpclient, but I'll fix those separately upstream and import them when we're not in a code freeze. 0: http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html
Wed, 22 Oct 2014 16:10:23 +0200 eol: fix crash when handling removed files stable
Mads Kiilerich <madski@unity3d.com> [Wed, 22 Oct 2014 16:10:23 +0200] rev 23068
eol: fix crash when handling removed files ci --amend would in some cases fail after 650b5b6e75ed failed to refactor the eol extension too.
Wed, 15 Oct 2014 03:52:20 -0700 bundle2: transmit exception during part generation stable
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 15 Oct 2014 03:52:20 -0700] rev 23067
bundle2: transmit exception during part generation If an exception is raised during a bundle2 part payload generation it is now recorded in the bundle. If such exception occurs, we capture it, transmit an abort exception through the bundle, cleanly close the current part payload and raise it again. This allow to generate valid bundle even in case of exception so that the consumer does not wait forever for a dead producer. This also allow to raise the exception during unbundling at the exact point it happened during bundling make debugging easier.
Tue, 14 Oct 2014 10:47:47 -0700 bundle2: add a interrupt mechanism stable
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 14 Oct 2014 10:47:47 -0700] rev 23066
bundle2: add a interrupt mechanism It is now possible to emit a single part in the middle of a payload production. This part will be processed with limitation (only access to a `ui` object). The goal is to let the server raise exception and output while a part is being processed. The source motivation is to transmit exception that occurs while generating a part. This change is was the motivation to bump the bundle2 format from HG2X to HG2Y. Somehow, the format bump made it into 3.2 without it. So this change go on stable. It is low risk as bundle2 is still disabled by default.
Tue, 21 Oct 2014 12:38:28 -0700 transactions: change backupfiles format to use newlines stable
Durham Goode <durham@fb.com> [Tue, 21 Oct 2014 12:38:28 -0700] rev 23065
transactions: change backupfiles format to use newlines Previously the journal.backupfiles file was delimited by \0. Now we delimit it using \n (same as the journal file). This allows us to change the number of values in each line more easily, rather than relying on the count of \0's.
Tue, 21 Oct 2014 11:37:29 -0700 transactions: add version number to journal.backupfiles stable
Durham Goode <durham@fb.com> [Tue, 21 Oct 2014 11:37:29 -0700] rev 23064
transactions: add version number to journal.backupfiles The transaction format will be changing a bit over the next releases, so let's go ahead and add a version number to make backwards compatibility easier. This whole file format was broken prior to 3.2 (see previous patch), so changing it now is pretty low risk.
Mon, 20 Oct 2014 16:53:56 -0700 transactions: fix hg recover with fncache backups stable
Durham Goode <durham@fb.com> [Mon, 20 Oct 2014 16:53:56 -0700] rev 23063
transactions: fix hg recover with fncache backups The transaction backupfiles logic was broken for 'hg recover'. The file format is XXX\0XXX\0YYY\0YYY\0 but the parser did a couple things wrong. 1) It went one step beyond the final \0 and tried to read past the end of the array. 2) array[i:i+1] returns a single item, instead of two items as intended. Added a test to catch it, which turns out to be the first actual 'hg recover' test.
Sun, 19 Oct 2014 16:48:33 +0900 revset: have rev() drop out-of-range or filtered rev explicitly (issue4396) stable
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Oct 2014 16:48:33 +0900] rev 23062
revset: have rev() drop out-of-range or filtered rev explicitly (issue4396) The recent optimization of "and" operation relies on the assumption that the rhs set does not contain invalid revisions. So rev() has to remove invalid revisions. This is still faster than using `.filter(lambda r: r == l)`. revset #0: rev(25) 0) wall 0.026341 comb 0.020000 user 0.020000 sys 0.000000 (best of 113) 1) wall 0.000038 comb 0.000000 user 0.000000 sys 0.000000 (best of 66567) 2) wall 0.000062 comb 0.000000 user 0.000000 sys 0.000000 (best of 43699) (0: bbf4f3dfd700^, 1: 3.2-rc, 2: this patch)
Wed, 22 Oct 2014 15:47:27 -0500 revset: avoid recalculating filesets stable
Matt Mackall <mpm@selenic.com> [Wed, 22 Oct 2014 15:47:27 -0500] rev 23061
revset: avoid recalculating filesets This fixes a regression in 8dabcc889e33 that moved matcher building into a callback, thus causing it be rebuilt for each revision matched against.
Mon, 20 Oct 2014 22:08:08 +0900 tests: open file in binary mode to use POSIX end-of-line style anywhere stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 20 Oct 2014 22:08:08 +0900] rev 23060
tests: open file in binary mode to use POSIX end-of-line style anywhere Before this patch, "test-context.py" fails on Windows environment, because "diff" output contains unexpected "\r" character. Opening the target file in text mode causes this automatic end-of-line conversion.
(0) -10000 -3000 -1000 -120 +120 +1000 +3000 +10000 tip