Wed, 26 Apr 2017 21:56:47 +0900 base85: proxy through util module
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 21:56:47 +0900] rev 32201
base85: proxy through util module I'm going to replace hgimporter with a simpler import function, so we can access to pure/cext modules by name: # util.py base85 = policy.importmod('base85') # select pure.base85 or cext.base85 # cffi/base85.py from ..pure.base85 import * # may re-export pure.base85 functions This means we'll have to use policy.importmod() function in place of the standard import statement, but we wouldn't want to write it every place where C extension modules are used. So this patch makes util host base85 functions.
Tue, 02 May 2017 17:05:22 +0900 mdiff: move re-exports to top
Yuya Nishihara <yuya@tcha.org> [Tue, 02 May 2017 17:05:22 +0900] rev 32200
mdiff: move re-exports to top This style seems more common in our codebase.
Tue, 02 May 2017 19:10:55 +0900 test-commit-interactive-curses: remove unused import of parsers
Yuya Nishihara <yuya@tcha.org> [Tue, 02 May 2017 19:10:55 +0900] rev 32199
test-commit-interactive-curses: remove unused import of parsers
Mon, 08 May 2017 23:05:01 -0400 churn: use the non-deprecated template option in the examples stable
Matt Harbison <matt_harbison@yahoo.com> [Mon, 08 May 2017 23:05:01 -0400] rev 32198
churn: use the non-deprecated template option in the examples
Mon, 08 May 2017 11:35:23 -0700 strip: make tree stripping O(changes) instead of O(repo)
Durham Goode <durham@fb.com> [Mon, 08 May 2017 11:35:23 -0700] rev 32197
strip: make tree stripping O(changes) instead of O(repo) The old tree stripping logic iterated over every tree revlog in the repo looking for commits that had revs to be stripped. That's very inefficient in large repos. Instead, let's look at what files are touched by the strip and only inspect those revlogs. I don't have actual perf numbers, since internally we don't use a true treemanifest, but simply iterating over hundreds of thousands of revlogs takes many, many seconds, so this should help tremendously when stripping only a few commits.
Mon, 08 May 2017 11:35:23 -0700 strip: move tree strip logic to it's own function
Durham Goode <durham@fb.com> [Mon, 08 May 2017 11:35:23 -0700] rev 32196
strip: move tree strip logic to it's own function This will allow external extensions to modify tree strip behavior more precisely.
Mon, 08 May 2017 09:39:21 -0700 manifest: remove unused property _oldmanifest
Martin von Zweigbergk <martinvonz@google.com> [Mon, 08 May 2017 09:39:21 -0700] rev 32195
manifest: remove unused property _oldmanifest The last use seems to have gone away in 7c7d845f8b64 (manifest: make manifestlog use it's own cache, 2016-11-10).
Mon, 08 May 2017 09:30:26 -0700 sslutil: reference fingerprints config option properly (issue5559) stable
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 08 May 2017 09:30:26 -0700] rev 32194
sslutil: reference fingerprints config option properly (issue5559) The config option is "host:fingerprints" not "host.fingerprints". This warning message is bad and misleads users.
Fri, 05 May 2017 04:48:42 +0530 py3: convert key to str to make kwargs.pop work in mq
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 04:48:42 +0530] rev 32193
py3: convert key to str to make kwargs.pop work in mq The keys are passed here and there as unicodes and our transformer make things bytes. Due to that, mq was not poped and this results in error on Py3. Here we abuse r'' to make that str on Python 3.
Fri, 05 May 2017 04:41:45 +0530 py3: convert kwargs' keys to str before passing in cmdutil.getcommiteditor
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 04:41:45 +0530] rev 32192
py3: convert kwargs' keys to str before passing in cmdutil.getcommiteditor
Wed, 03 May 2017 23:50:41 -0700 diff: add a fast path to avoid loading binary contents
Jun Wu <quark@fb.com> [Wed, 03 May 2017 23:50:41 -0700] rev 32191
diff: add a fast path to avoid loading binary contents When diffing binary contents, with certain configs, we can show "Binary file <name> has changed" without actual content. That allows a fast path where we could avoid providing actual binary contents. Note: in that case we still need to test if two contents are the same, that's done by using "filectx.cmp", which could have its own fast path.
Fri, 05 May 2017 17:20:32 -0700 diff: correct binary testing logic
Jun Wu <quark@fb.com> [Fri, 05 May 2017 17:20:32 -0700] rev 32190
diff: correct binary testing logic This seems to be more correct given the table drawn in the previous patch. Namely, "losedatafn" and "opts.git" are removed, "not opts.text" is added. - losedatafn: diff output (binary) should not be affected by "losedatafn" - opts.git: binary testing is helpful for detecting a fast path in the next path. the fast path can also be used if opts.git is False - opts.text: if it's set, we should treat the content as non-binary
Fri, 05 May 2017 16:48:58 -0700 diff: draw a table about binary diff behaviors
Jun Wu <quark@fb.com> [Fri, 05 May 2017 16:48:58 -0700] rev 32189
diff: draw a table about binary diff behaviors The table should make it easier to reason about future changes.
Wed, 03 May 2017 22:20:44 -0700 diff: use fctx.size() to test empty
Jun Wu <quark@fb.com> [Wed, 03 May 2017 22:20:44 -0700] rev 32188
diff: use fctx.size() to test empty fctx.size() could have a fast path that does not require loading content.
Wed, 03 May 2017 22:16:54 -0700 diff: use fctx.isbinary() to test binary
Jun Wu <quark@fb.com> [Wed, 03 May 2017 22:16:54 -0700] rev 32187
diff: use fctx.isbinary() to test binary The end goal is to avoid calling fctx.data() when unnecessary. For example, if diff.nobinary=1 and files are binary, the expected behavior is to print "Binary file has changed". That could avoid reading fctx.data() sometimes. This is mainly to enable an external LFS extension to skip expensive binary file loading sometimes (read: most of the time with diff.nobinary=1 and diff.text=0), without any behavior changes to mercurial (i.e. whether a file is LFS or not does not change any behavior, LFS could be 100% transparent to users).
Thu, 20 Apr 2017 22:16:12 +0900 pycompat: extract helper to raise exception with traceback
Yuya Nishihara <yuya@tcha.org> [Thu, 20 Apr 2017 22:16:12 +0900] rev 32186
pycompat: extract helper to raise exception with traceback It uses "raise excobj, None, tb" form which I think is simpler and more useful than "raise exctype, args, tb".
Thu, 04 May 2017 15:23:51 +0900 largefiles: make sure debugstate command is populated before wrapping stable
Yuya Nishihara <yuya@tcha.org> [Thu, 04 May 2017 15:23:51 +0900] rev 32185
largefiles: make sure debugstate command is populated before wrapping Copied the hack from 869d660b8669, which seemed the simplest workaround. Perhaps debugcommands.py should have its own commands table.
Mon, 01 May 2017 17:23:48 +0900 check-code: ignore re-exports of os.environ in encoding.py
Yuya Nishihara <yuya@tcha.org> [Mon, 01 May 2017 17:23:48 +0900] rev 32184
check-code: ignore re-exports of os.environ in encoding.py These are valid uses of os.environ.
Wed, 26 Apr 2017 21:51:19 +0900 check-code: exclude demandimport.py and policy.py from Python 3 checks
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 21:51:19 +0900] rev 32183
check-code: exclude demandimport.py and policy.py from Python 3 checks These modules can't depend on pycompat.py, which means we have to write Py3 hacks in them.
Mon, 01 May 2017 17:10:22 +0900 check-code: rewrite py3 exclusion pattern with negative lookahead
Yuya Nishihara <yuya@tcha.org> [Mon, 01 May 2017 17:10:22 +0900] rev 32182
check-code: rewrite py3 exclusion pattern with negative lookahead I want to add more patterns, but negative lookbehind requires patterns of the same length so not useful.
Wed, 03 May 2017 11:16:55 +0900 cleanup: remove useless re-raises of KeyboardInterrupt
Yuya Nishihara <yuya@tcha.org> [Wed, 03 May 2017 11:16:55 +0900] rev 32181
cleanup: remove useless re-raises of KeyboardInterrupt KeyboardInterrupt is no longer a subclass of Exception since Python 2.5. https://docs.python.org/2/whatsnew/2.5.html#pep-352-exceptions-as-new-style-classes
Fri, 12 Aug 2016 11:36:42 +0900 make: drop deprecated rule to process temporary copy of pure modules
Yuya Nishihara <yuya@tcha.org> [Fri, 12 Aug 2016 11:36:42 +0900] rev 32180
make: drop deprecated rule to process temporary copy of pure modules Pure modules never be copied to mercurial/ since 511a4384b033.
Sat, 06 May 2017 02:33:00 +0900 help: describe about choice of :prompt as a fallback merge tool explicitly stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 06 May 2017 02:33:00 +0900] rev 32179
help: describe about choice of :prompt as a fallback merge tool explicitly "merge-tools" help topic has described that the merge of the file fails if no tool is found to merge binary or symlink, since c77f6276c9e7 (or Mercurial 1.7), which based on (already removed) MergeProgram wiki page. But even at that revision, and of course now, merge of the file doesn't fail automatically for binary/symlink. ":prompt" (or equivalent logic) is used, if there is no appropriate tool configuration for binary/symlink.
Sat, 06 May 2017 10:18:34 -0500 wix: only one KeyPath is allowed per Component stable
Steve Borho <steve@borho.org> [Sat, 06 May 2017 10:18:34 -0500] rev 32178
wix: only one KeyPath is allowed per Component
Fri, 05 May 2017 08:49:46 -0700 dirstate: optimize walk() by using match.visitdir()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 08:49:46 -0700] rev 32177
dirstate: optimize walk() by using match.visitdir() We already have the logic for restricting directory walks in match.visitdir() that we use for treemanifests. We should take advantage of it when walking the working copy as well. This speeds up "hg st -I rootfilesin:." on the Firefox repo from 0.587s to 0.305s on warm disk (and much more on cold disk). More time is spent reading the dirstate than walking the working copy after. I tried to find scenarios where calling match.visitdir() would be a noticeable overhead, but I couldn't find any. I encourage the reader to try for themselves, since this is performance-critical code.
Fri, 05 May 2017 08:49:07 -0700 match: optimize visitdir() for patterns matching only root directory
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 08:49:07 -0700] rev 32176
match: optimize visitdir() for patterns matching only root directory Because _rootsanddirs() returns a list of directories to visit recursively and a list of directories to visit non-recursively. For patterns such as 'rootfilesin:foo/bar', we clearly need to visit the directory foo/bar, but we also need to visit its parents. The method therefore uses util.dirs() to find the parent directories of 'foo/bar'. That method does not include the root directory, but since we obviously need to visit the root directory, we always added '.' to the set of directories to visit non-recursively. The visitdir() method had special handling to consider set(['.']) to mean that no includes had been specified and would thus visit all directories. However, when the pattern is 'rootfilesin:.', set(['.']) is actually the real set of directories to visit and the special handling of that set meant that all directories got visited instead of just the root directory. The fix is simple: add '.' to the set of parent directories in _rootsanddirs() and stop treating set(['.']) specially. This makes hg files -r . -I rootfilesin:. in a treemanifest version of the Firefox repo go from 1.5s to 0.26s on warm disk (and a *much* bigger improvement on cold disk). Note that the -I is necessary for no good reason. We just haven't optimized visitdir() for regular (non-include, non-exclude) patterns yet.
Sat, 11 Mar 2017 12:25:56 -0800 rebase: don't update state dict same way for each root
Martin von Zweigbergk <martinvonz@google.com> [Sat, 11 Mar 2017 12:25:56 -0800] rev 32175
rebase: don't update state dict same way for each root The update statement does not depend on anything in the loop, so just move it before the loop and do it once. There are no cases where update would happen 0 times before (and 1 now); the function returns early in all such cases.
Thu, 04 May 2017 21:11:40 -0700 forget: access status fields by name, not index
Martin von Zweigbergk <martinvonz@google.com> [Thu, 04 May 2017 21:11:40 -0700] rev 32174
forget: access status fields by name, not index
Wed, 03 May 2017 18:26:57 -0700 demandimport: add urwid.command_map to ignore list
Phil Cohen <phillco@fb.com> [Wed, 03 May 2017 18:26:57 -0700] rev 32173
demandimport: add urwid.command_map to ignore list The useful pudb debugger can be used with Mercurial, but its import of urwid fails when demandimport is enabled. Add urwid.command_map to the ignore list so pudb can be used with hg without disabling all of demandimport.
Fri, 05 May 2017 10:08:36 -0700 outgoing: run on filtered repo
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 10:08:36 -0700] rev 32172
outgoing: run on filtered repo outgoing has been using an unfiltered repo since fe67107094fd (discovery: outgoing pass unfiltered repo to findcommonincoming (issue3776), 2013-01-28). If I'm reading code and history correctly, it should be safe to run _outgoing() on a filtered repo since c5456b64eb07 (discovery: run discovery on filtered repository, 2015-01-07). By running _outgoing() on a filtered repo, we can also remove the workaround there for ignoring filtered revisions.
Fri, 05 May 2017 14:10:58 -0700 manifest: remove check for non-contexts in _dirmancache
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 May 2017 14:10:58 -0700] rev 32171
manifest: remove check for non-contexts in _dirmancache It looks like the _dirmancache has contained only manifest contexts since d79c141fdf41 (manifest: remove usages of manifest.read, 2016-11-10).
Thu, 04 May 2017 12:48:45 +0200 bundle: factor the 'getchangegroup' out
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:48:45 +0200] rev 32170
bundle: factor the 'getchangegroup' out The call in the two branches is identical, so we can just issue it outside of the conditional.
Thu, 04 May 2017 12:47:27 +0200 bundle: avoid reset of the 'outgoing' variable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:47:27 +0200] rev 32169
bundle: avoid reset of the 'outgoing' variable We have a cleaner way to achieve the same effect. Not resetting the variable will help us to simplify the code.
Thu, 04 May 2017 12:43:41 +0200 changegroup: deprecate 'getlocalchangroup' (API)
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:43:41 +0200] rev 32168
changegroup: deprecate 'getlocalchangroup' (API) We have 'getchangegroup' with a shorter name for the exactly same feature. Now that all users are gone we can formally deprecate it.
Thu, 04 May 2017 12:41:50 +0200 tests: directly 'getchangegroup'
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:41:50 +0200] rev 32167
tests: directly 'getchangegroup' It is identical to 'getlocalchangegroup' with a shorter name.
Thu, 04 May 2017 12:41:36 +0200 exchange: directly 'getchangegroup'
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:41:36 +0200] rev 32166
exchange: directly 'getchangegroup' It is identical to 'getlocalchangegroup' with a shorter name.
Thu, 04 May 2017 12:41:17 +0200 commands: directly 'getchangegroup'
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:41:17 +0200] rev 32165
commands: directly 'getchangegroup' It is identical to 'getlocalchangegroup' with a shorter name.
Thu, 04 May 2017 12:36:45 +0200 changegroup: deduplicate 'getlocalchangegroup'
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 04 May 2017 12:36:45 +0200] rev 32164
changegroup: deduplicate 'getlocalchangegroup' The two functions 'getlocalchangegroup' and 'getchangegroup' have been strictly identical for multiple years ('getchangegroup' had a deprecated docstring) We'll drop one of them (getlocalchangegroup, since it has the longest name). However, we needs to migrate all users of the dropped one to the new one before we can deprecate it. In the mean time we drop one of the duplicated definition and the outdated docstring.
Thu, 04 May 2017 04:57:30 +0530 py3: add test to show 'hg log -Tjson' works
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 04:57:30 +0530] rev 32163
py3: add test to show 'hg log -Tjson' works
Thu, 04 May 2017 04:52:03 +0530 py3: add test to show 'hg log -G' works
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 04:52:03 +0530] rev 32162
py3: add test to show 'hg log -G' works
Thu, 04 May 2017 04:42:05 +0530 py3: rename test-check-py3-commands.t to test-py3-commands.t
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 04:42:05 +0530] rev 32161
py3: rename test-check-py3-commands.t to test-py3-commands.t test-check-*.t is a set of tests which tests certain coding style checks. So this test was wrongly named, thanks to marmoute for pointing this out.
Thu, 04 May 2017 04:38:20 +0530 py3: use list of bytes rather than bytestring while extending bytes into lists
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 04:38:20 +0530] rev 32160
py3: use list of bytes rather than bytestring while extending bytes into lists Python 2: >>> ls = [] >>> ls.extend(b'abc') >>> ls ['a', 'b', 'c'] Python 3: >>> ls = [] >>> ls.extend(b'abc') >>> ls [97, 98, 99] So to make sure things work fine in Py3, this patch does: >>> ls = [] >>> ls.extend([b'a', b'b', b'c']) >>> ls [b'a', b'b', b'c'] After this `hg log -G` works!
Thu, 04 May 2017 01:12:14 +0530 py3: use pycompat.byteskwargs to converts kwargs to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 01:12:14 +0530] rev 32159
py3: use pycompat.byteskwargs to converts kwargs to bytes baseformatter._item must contain both keys and values in bytes. So to make sure that, we convert the opts back to bytes.
Thu, 04 May 2017 00:44:53 +0530 py3: make adefaults keys str to be compatible with getattr
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 00:44:53 +0530] rev 32158
py3: make adefaults keys str to be compatible with getattr getattr passes a str value of the attribute to be looked and keys in adefaults dict are bytes which resulted in AttributeError. This patch abuses r'' to make the keys str.
Wed, 03 May 2017 15:41:28 +0530 py3: abuse r'' to access keys in keyword arguments
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 03 May 2017 15:41:28 +0530] rev 32157
py3: abuse r'' to access keys in keyword arguments
Wed, 03 May 2017 15:37:51 +0530 py3: use pycompat.bytechr instead of chr
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 03 May 2017 15:37:51 +0530] rev 32156
py3: use pycompat.bytechr instead of chr
Fri, 05 May 2017 01:41:54 +0530 py3: use %d to format integers into bytestrings
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 01:41:54 +0530] rev 32155
py3: use %d to format integers into bytestrings
Fri, 05 May 2017 01:26:49 +0530 py3: use pycompat.bytestr instead of bytes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 01:26:49 +0530] rev 32154
py3: use pycompat.bytestr instead of bytes
Fri, 05 May 2017 01:26:13 +0530 py3: slice over bytes to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 May 2017 01:26:13 +0530] rev 32153
py3: slice over bytes to prevent getting ascii values
Sat, 08 Apr 2017 11:02:37 +0530 py3: use encoding.unitolocal instead of .encode(encoding.encoding)
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 08 Apr 2017 11:02:37 +0530] rev 32152
py3: use encoding.unitolocal instead of .encode(encoding.encoding)
Wed, 03 May 2017 10:43:59 -0700 rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com> [Wed, 03 May 2017 10:43:59 -0700] rev 32151
rebase: use matcher to optimize manifestmerge The old merge code would call manifestmerge and calculate the complete diff between the source to the destination. In many cases, like rebase, the vast majority of differences between the source and destination are irrelevant because they are differences between the destination and the common ancestor only, and therefore don't affect the merge. Since most actions are 'keep', all the effort to compute them is wasted. Instead, let's compute the difference between the source and the common ancestor and only perform the diff of those files against the merge destination. When using treemanifest, this lets us avoid loading almost the entire tree when rebasing from a very old ancestor. This speeds up rebase of an old stack of 27 commits by 20x. In mozilla-central, without treemanifest, when rebasing a commit from default~100000 to default, this speeds up the manifestmerge step from 2.6s to 1.2s. However, the additional diff adds an overhead to all manifestmerge calls, especially for flat manifests. When rebasing a commit from default~1 to default it appears to add 100ms in mozilla-central. While we could put this optimization behind a flag, I think the fact that it makes merge O(number of changes being applied) instead of O(number of changes between X and Y) justifies it.
Tue, 02 May 2017 23:47:10 -0700 changegroup: delete unused 'bundlecaps' argument (API)
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 May 2017 23:47:10 -0700] rev 32150
changegroup: delete unused 'bundlecaps' argument (API)
Wed, 03 May 2017 10:33:26 -0700 localrepo: reuse exchange.bundle2requested()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 03 May 2017 10:33:26 -0700] rev 32149
localrepo: reuse exchange.bundle2requested() It seems like localrepo.getbundle() is trying to do the same thing, so let's just call the method. That way we get the same condition as there (matching any "HG2" prefix, not only "HG20").
Fri, 28 Apr 2017 01:13:07 +0530 py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 28 Apr 2017 01:13:07 +0530] rev 32148
py3: use raw strings while accessing class.__dict__ The keys of class.__dict__ are unicodes on Python 3.
Tue, 25 Apr 2017 01:52:30 +0530 py3: handle opts correctly for `hg add`
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 25 Apr 2017 01:52:30 +0530] rev 32147
py3: handle opts correctly for `hg add` opts in add command were passed again to cmdutil.add() as kwargs so we need to convert them again to str. Intstead we convert them to bytes when passing scmutil.match(). Opts handling is also corrected for all the functions which are called from cmdutil.add().
Mon, 24 Apr 2017 04:32:04 +0530 py3: handle opts correctly for rollback
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 24 Apr 2017 04:32:04 +0530] rev 32146
py3: handle opts correctly for rollback dryrun and force are just check for None, the value is not used. So its better to leave opts as unicodes as that wont harm us.
Fri, 21 Apr 2017 15:04:32 +0530 py3: handle opts correctly for unbundle
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 21 Apr 2017 15:04:32 +0530] rev 32145
py3: handle opts correctly for unbundle There is just a check whether the value is None or not. So even having optupdate as unicodes won't harm us.
Fri, 21 Apr 2017 02:20:46 +0530 py3: convert opts to bytes in cmdutil.dorecord()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 21 Apr 2017 02:20:46 +0530] rev 32144
py3: convert opts to bytes in cmdutil.dorecord() commands.commit() calls cmdutil.dorecord() where opts are passed as unicodes being keyword arguments. This patch converts them back to bytes as they are required.
Fri, 28 Apr 2017 00:49:30 +0530 py3: make sure opts are passed and used correctly in help command
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 28 Apr 2017 00:49:30 +0530] rev 32143
py3: make sure opts are passed and used correctly in help command opts are converted back to bytes in help.help_() where they are used. Before that it's ensured that we have a bytes value for keep variable.
Wed, 03 May 2017 15:25:06 +0530 py3: handle opts uniformly in commands.py
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 03 May 2017 15:25:06 +0530] rev 32142
py3: handle opts uniformly in commands.py Since keyword arguments can't be bytes on Python 3, we converted then to unicodes before passing into different command functions. We need to adopt a certain pattern to convert opts back to bytes. Following are some of the functions which are called from inside these command functions and should always be feeded bytes to follow the right behaviour. ui.fomattter() scmutil.match() patch.diffallopts() hg.peer() cmdutil.{show_changeset|copy|graphrevs|checkunsupportedflag} server.{createservice|runservice} There are few commands which are left out where opts is again passed to a function as keyword arguments or converting opts back to bytes is kind of not necessary. Those are cat, revert, help, unbundle and rollback. Following patches will deal with them. This patch apart from these five commands, convert opts back to bytes for rest of the commands. This fixes a lot of things which are hidden like --git works now. Similarly more flags of commands which run on Python 3 currently get fixed.
Thu, 04 May 2017 00:26:55 -0400 merge with stable
Augie Fackler <augie@google.com> [Thu, 04 May 2017 00:26:55 -0400] rev 32141
merge with stable
Wed, 03 May 2017 22:56:53 -0400 help: call out specific replacement configuration settings stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 22:56:53 -0400] rev 32140
help: call out specific replacement configuration settings As an aside, I'm having trouble parsing the help text meaning for HG when it is unset or empty. How can it be the frozen name or searched if it is empty?
Wed, 03 May 2017 22:07:47 -0400 help: spelling fixes stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 22:07:47 -0400] rev 32139
help: spelling fixes
Wed, 03 May 2017 22:05:23 -0400 help: attempt to clarify that pager usage is not output length based stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 22:05:23 -0400] rev 32138
help: attempt to clarify that pager usage is not output length based This may be too subtle of a change to get the point across, but when I first read the original text, I thought maybe the pager would only be invoked if writing more than a screenful. The distinction between this and a pager that simply exits after printing less than a screenful is important on Windows, given the inability of `more` to color output.
Wed, 03 May 2017 21:58:11 -0400 help: document color/pager pitfalls on Windows stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 03 May 2017 21:58:11 -0400] rev 32137
help: document color/pager pitfalls on Windows Even though I figured this out a few weeks ago, I was initially puzzled where the color went when I upgraded to 4.2 on a different Windows machine. Let's point users reading the help into the right direction. I wonder if we should be even more explicit about cmd.exe/MSYS/pager/color interplay, but at least all of the breadcrumbs are here (I think).
Wed, 03 May 2017 18:04:43 -0700 webcommands: use fctx.isbinary
Jun Wu <quark@fb.com> [Wed, 03 May 2017 18:04:43 -0700] rev 32136
webcommands: use fctx.isbinary
Wed, 03 May 2017 18:03:38 -0700 annotate: use fctx.isbinary
Jun Wu <quark@fb.com> [Wed, 03 May 2017 18:03:38 -0700] rev 32135
annotate: use fctx.isbinary
Wed, 03 May 2017 18:02:00 -0700 fileset: use fctx.isbinary instead of util.binary(fctx.data())
Jun Wu <quark@fb.com> [Wed, 03 May 2017 18:02:00 -0700] rev 32134
fileset: use fctx.isbinary instead of util.binary(fctx.data()) filectx provides "isbinary" to test if the data is binary. Let's use it. This enables other filectx implementations (like LFS) to override the isbinary test.
Wed, 03 May 2017 14:07:14 -0700 internals: document that "branches" is a legacy wire command
Siddharth Agarwal <sid0@fb.com> [Wed, 03 May 2017 14:07:14 -0700] rev 32133
internals: document that "branches" is a legacy wire command Modern clients use a different discovery mechanism.
Wed, 03 May 2017 10:30:57 -0700 match: make subinclude construction lazy
Durham Goode <durham@fb.com> [Wed, 03 May 2017 10:30:57 -0700] rev 32132
match: make subinclude construction lazy The matcher subinclude functionality allows us to have .hgignore files that include subdirectory hgignore files. Today it parses the entire repo at once, even if we only need to test a file in one subdirectory. This patch makes the subinclude tree creation lazy, which speeds up matcher creation significantly in large repos with very large trees of ignore patterns.
Wed, 03 May 2017 09:09:44 -0700 bisect: allow resetting with unfinished graft/rebase/etc
Martin von Zweigbergk <martinvonz@google.com> [Wed, 03 May 2017 09:09:44 -0700] rev 32131
bisect: allow resetting with unfinished graft/rebase/etc "hg bisect --reset" just deletes the state file (it doesn't move back to the starting point like rebase does); it can not conflict with an ongoing rebase etc. checkunfinished() has this documentation: It's probably good to check this right before bailifchanged(). So that's where I moved it.
Fri, 21 Apr 2017 01:13:18 +0530 py3: use %d instead of %s for integers
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 21 Apr 2017 01:13:18 +0530] rev 32130
py3: use %d instead of %s for integers dispatch._runcatch() always returns an integer value.
Fri, 21 Apr 2017 00:53:38 +0530 py3: make posix.getuser return a bytes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 21 Apr 2017 00:53:38 +0530] rev 32129
py3: make posix.getuser return a bytes
Thu, 20 Apr 2017 19:57:16 +0530 py3: replace str with bytes in isinstance()
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 20 Apr 2017 19:57:16 +0530] rev 32128
py3: replace str with bytes in isinstance()
Thu, 27 Apr 2017 09:49:57 +0530 py3: use pycompat.bytestr() instead of str()
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 27 Apr 2017 09:49:57 +0530] rev 32127
py3: use pycompat.bytestr() instead of str() This is because str() on python 3 return unicodes
Thu, 20 Apr 2017 19:51:37 +0530 py3: alias long to int on Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 20 Apr 2017 19:51:37 +0530] rev 32126
py3: alias long to int on Python 3
Wed, 03 May 2017 09:41:55 -0400 setup: sys.version_info always exists
Alex Gaynor <agaynor@mozilla.com> [Wed, 03 May 2017 09:41:55 -0400] rev 32125
setup: sys.version_info always exists It is documented as existing since Python 2.0, and empirically from other OSS projects I maintain, there is no problem relying on its existance.
Tue, 02 May 2017 22:39:14 -0700 filelog: fix parsemeta docstring
Jun Wu <quark@fb.com> [Tue, 02 May 2017 22:39:14 -0700] rev 32124
filelog: fix parsemeta docstring 75bb7c702317 changed the return type of filelog.parsemeta but forgot to update its docstring.
Tue, 02 May 2017 10:20:44 -0700 util: remove doc of long gone 'targetsize' argument
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 May 2017 10:20:44 -0700] rev 32123
util: remove doc of long gone 'targetsize' argument Gone since fa836e050c50 (chunkbuffer: removed unused method and arg, 2007-10-11).
Tue, 02 May 2017 22:26:09 -0400 test-diff-color: disable pager for expected output on Windows (issue5555) stable
Matt Harbison <matt_harbison@yahoo.com> [Tue, 02 May 2017 22:26:09 -0400] rev 32122
test-diff-color: disable pager for expected output on Windows (issue5555) Windows uses `more.com`, which unhelpfully adds an extra trailing line consisting only of '\r'. It also converts tab characters to spaces, which throws off the last two tests. Setting the 'ui.formatted' option is what allowed the pager to be used by these tests in the first place.
Tue, 02 May 2017 02:05:39 +0200 cleanup: drop the deprecated 'localrepo._link' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:05:39 +0200] rev 32121
cleanup: drop the deprecated 'localrepo._link' method This was deprecated in favor of 'localrepo.wvfs.islink'. We can now drop it for the future 4.3.
Tue, 02 May 2017 02:04:55 +0200 cleanup: drop the deprecated 'localrepo.wfile' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:04:55 +0200] rev 32120
cleanup: drop the deprecated 'localrepo.wfile' method This was deprecated in favor of 'localrepo.wvfs.join'. We can now drop it for the future 4.3.
Tue, 02 May 2017 02:03:56 +0200 cleanup: drop the deprecated 'localrepo.join' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:03:56 +0200] rev 32119
cleanup: drop the deprecated 'localrepo.join' method This was deprecated in favor of 'localrepo.vfs.join'. We can now drop it for the future 4.3.
Tue, 02 May 2017 02:03:04 +0200 cleanup: drop the deprecated 'localrepo.tag' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:03:04 +0200] rev 32118
cleanup: drop the deprecated 'localrepo.tag' method This was deprecated in favor of 'mercurial.tags.tag'. We can now drop it for the future 4.3.
Tue, 02 May 2017 02:01:47 +0200 cleanup: drop the deprecated 'localrepo.opener' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:01:47 +0200] rev 32117
cleanup: drop the deprecated 'localrepo.opener' method This was deprecated in favor of 'localrepo.vfs'. We can now drop it for the future 4.3.
Tue, 02 May 2017 02:01:15 +0200 cleanup: drop the deprecated 'localrepo.wopener' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 02:01:15 +0200] rev 32116
cleanup: drop the deprecated 'localrepo.wopener' method This was deprecated in favor of 'localrepo.wvfs'. We can now drop it for the future 4.3.
Tue, 02 May 2017 01:59:33 +0200 cleanup: drop vfs compatibility layer in scmutil
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 01:59:33 +0200] rev 32115
cleanup: drop vfs compatibility layer in scmutil All these constructors are deprecated in 4.2. We can now drop them on the default branch (future 4.3).
Sat, 22 Apr 2017 17:13:05 -0700 test-worker: exercise more about "killworkers" situation
Jun Wu <quark@fb.com> [Sat, 22 Apr 2017 17:13:05 -0700] rev 32114
test-worker: exercise more about "killworkers" situation This patch adds some sleep and increases numcpus to exercise the "killworkers" situation. So race conditions could be discovered more easily, if someone changes worker.py incorrectly. Currently worker.py should be free of such issues.
Sat, 22 Apr 2017 17:00:50 -0700 test-worker: capture tracebacks more reliably
Jun Wu <quark@fb.com> [Sat, 22 Apr 2017 17:00:50 -0700] rev 32113
test-worker: capture tracebacks more reliably The traceback test may have traceback caused by SIGTERM. Instead of grepping "Traceback", explicitly grep the exception we care about. This makes the test less flaky.
Sat, 22 Apr 2017 16:50:08 -0700 worker: rewrite error handling so os._exit covers all cases
Jun Wu <quark@fb.com> [Sat, 22 Apr 2017 16:50:08 -0700] rev 32112
worker: rewrite error handling so os._exit covers all cases Previously the worker error handling is like: pid = os.fork() --+ if pid == 0: | .... | problematic .... --+ try: --+ .... | worker error handling --+ If a signal arrives when Python is executing the "problematic" lines, an external error handling (dispatch.py) will take over the control flow and it's no longer guaranteed "os._exit" is called (see 86cd09bc13ba for why it is necessary). This patch rewrites the error handling so it covers all possible code paths for a worker even during fork. Note: "os.getpid() == parentpid" is used to test if the process is parent or not intentionally, instead of checking "pid", because "pid = os.fork()" may be not atomic - it's possible that that a signal hits the worker before the assignment completes [1]. The newly added test replaces "os.fork" to exercise that extreme case. [1]: CPython compiles "pid = os.fork()" to 2 byte codes: "CALL_FUNCTION" and "STORE_FAST", so it's probably not atomic: def f(): pid = os.fork() dis.dis(f) 2 0 LOAD_GLOBAL 0 (os) 3 LOAD_ATTR 1 (fork) 6 CALL_FUNCTION 0 9 STORE_FAST 0 (pid) 12 LOAD_CONST 0 (None) 15 RETURN_VALUE
Sat, 22 Apr 2017 15:00:17 -0700 dispatch: take over SignalInterrupt handling from scmutil
Jun Wu <quark@fb.com> [Sat, 22 Apr 2017 15:00:17 -0700] rev 32111
dispatch: take over SignalInterrupt handling from scmutil dispatch handles KeyboardInterrupt already. This makes the code more consistent, and makes worker not print "killed!" if it receives SIGTERM in most cases (in rare cases there is still "killed!" printed, which will be fixed by the next patch).
Tue, 02 May 2017 17:29:01 -0500 merge stable into default
Kevin Bullock <kbullock+mercurial@ringworld.org> [Tue, 02 May 2017 17:29:01 -0500] rev 32110
merge stable into default
Tue, 02 May 2017 17:09:00 -0500 Added signature for changeset bb96d4a49743 stable
Kevin Bullock <kbullock@ringworld.org> [Tue, 02 May 2017 17:09:00 -0500] rev 32109
Added signature for changeset bb96d4a49743
Tue, 02 May 2017 17:08:54 -0500 Added tag 4.2 for changeset bb96d4a49743 stable
Kevin Bullock <kbullock@ringworld.org> [Tue, 02 May 2017 17:08:54 -0500] rev 32108
Added tag 4.2 for changeset bb96d4a49743
Tue, 02 May 2017 16:35:12 -0500 merge with i18n stable 4.2
Kevin Bullock <kbullock+mercurial@ringworld.org> [Tue, 02 May 2017 16:35:12 -0500] rev 32107
merge with i18n
Mon, 01 May 2017 07:23:29 +0900 i18n-ja: synchronized with 6e0368b6e0bb stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 07:23:29 +0900] rev 32106
i18n-ja: synchronized with 6e0368b6e0bb
Tue, 02 May 2017 17:18:13 +0200 pager: drop the support for 'pager.enable=<bool>' stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 17:18:13 +0200] rev 32105
pager: drop the support for 'pager.enable=<bool>' This option was never released except for a release candidate. Dropping compatibility with this option will free the 'pager.enable' config option for other usage in the future.
Mon, 01 May 2017 16:36:50 +0200 pager: rename 'pager.enable' to 'ui.paginate' stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:36:50 +0200] rev 32104
pager: rename 'pager.enable' to 'ui.paginate' This aligns with what we do for color (see 7fec37746417). Pager is a central enough notion that having the master config in the [ui] section makes senses. It will helps with consistency, discoverability. It will also help having a simple and clear example hgrc mentioning pager. The previous form of the option had never been released in a non-rc version but we keep it around for convenience. If both are set, 'ui.pager' take priority.
Tue, 02 May 2017 20:19:09 +0200 color: special case 'always' in 'ui.color' stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 20:19:09 +0200] rev 32103
color: special case 'always' in 'ui.color' This lift the confusing case, where 'ui.color=always' would actually not always use color.
Tue, 02 May 2017 20:01:54 +0200 color: turn 'ui.color' into a boolean (auto or off) stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 20:01:54 +0200] rev 32102
color: turn 'ui.color' into a boolean (auto or off) Previously, 'ui.color=yes' meant "always show color", While "ui.color=auto" meant "use color automatically when it appears sensible". This feels problematic to some people because if an administrator has disabled color with "ui.color=off", and a user turn it back on using "color=on", it will get surprised (because it breaks their output when redirected to a file.) This patch changes ui.color=true to only move the default value of --color from "never" to "auto". I'm not really in favor of this changes as I suspect the above case will be pretty rare and I would rather keep the logic simpler. However, I'm providing this patch to help the 4.2 release in the case were others decide to make this changes. Users that want to force colors without specifying --color on the command line can use the 'ui.formatted' config knob, which had to be enabled in a handful of tests for this patch. Nice summary table (credit: Augie Fackler) That is, before this patch: +--------------------+--------------------+--------------------+ | | not a tty | a tty | | | --color not set | --color not set | | | | | +--------------------+--------------------+--------------------+ | [ui] | | | | color (not set) | no color | no color | | | | | +--------------------+--------------------+--------------------+ | [ui] | | | | color = auto | no color | color | | | | | +--------------------+--------------------+--------------------+ | [ui] | | | | color = yes | *color* | color | | | | | +--------------------+--------------------+--------------------+ | [ui] | | | | color = no | no color | no color | | | | | +--------------------+--------------------+--------------------+ (if --color is specified, it always clobbers the setting in [ui]) and after this patch: +--------------------+--------------------+--------------------+ | | not a tty | a tty | | | --color not set | --color not set | | | | | +--------------------+--------------------+--------------------+ | [ui] | | | | color (not set) | no color | no color | | | | | +--------------------+--------------------+--------------------+ | [ui] | | | | color = auto | no color | color | | | | | +--------------------+--------------------+--------------------+ | [ui] | | | | color = yes | *no color* | color | | | | | +--------------------+--------------------+--------------------+ | [ui] | | | | color = no | no color | no color | | | | | +--------------------+--------------------+--------------------+ (if --color is specified, it always clobbers the setting in [ui])
Mon, 01 May 2017 16:43:43 +0200 pager: document the 'pager.enable' option stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:43:43 +0200] rev 32101
pager: document the 'pager.enable' option The 'config' helps was missing help about pager enabling/disabling.
Mon, 01 May 2017 18:07:23 +0200 pager: advertise the config option in the default hgrc stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 18:07:23 +0200] rev 32100
pager: advertise the config option in the default hgrc Same as for 'ui.color', this is a critical part of the UI and we want user to find this config knob easily.
Mon, 01 May 2017 16:52:11 +0200 pager: document the 'pager' config section stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:52:11 +0200] rev 32099
pager: document the 'pager' config section There as a 'hg help pager' section but the 'hg help config.pager' was missing.
Mon, 01 May 2017 16:36:30 +0200 pager: test the 'enable' config option stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:36:30 +0200] rev 32098
pager: test the 'enable' config option While poking at this option I realised it was not tested.
Mon, 01 May 2017 15:51:57 +0200 config: drop pager from the recommended extension stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:51:57 +0200] rev 32097
config: drop pager from the recommended extension The extension is deprecated, we should having exposing it to users.
Mon, 01 May 2017 15:51:47 +0200 config: use "churn" as an example extension stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:51:47 +0200] rev 32096
config: use "churn" as an example extension "Churn" is not the useful example we have, but this is the one used in 'hg help config.extensions'. As we need something to replace the deprecated 'pager' extension in the example config, we are adding 'churn'.
Wed, 19 Apr 2017 23:10:05 +0900 discovery: prevent crash caused by prune marker having no parent data stable
Yuya Nishihara <yuya@tcha.org> [Wed, 19 Apr 2017 23:10:05 +0900] rev 32095
discovery: prevent crash caused by prune marker having no parent data If a marker has no parent information, parents field is set to None, which caused TypeError. I think this shouldn't normally happen, but somehow I have such marker in my repo.
Mon, 01 May 2017 15:40:41 +0200 color: point to the global help in the example hgrc stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:40:41 +0200] rev 32094
color: point to the global help in the example hgrc This is probably the best way to have users learn more is they need too.
Mon, 01 May 2017 15:39:50 +0200 color: reflect the new default in the example hgrc stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:39:50 +0200] rev 32093
color: reflect the new default in the example hgrc Color is enabled by default so un-commenting the line would not have any effect. We'll point to the help in the next changeset.
Mon, 01 May 2017 15:38:57 +0200 color: point to the config help in global help topic stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:38:57 +0200] rev 32092
color: point to the config help in global help topic We point out at the help of the config option for user who wants to learn more about the possible config value. The suggested command returns some other extra (color related) results, but this is bug to fix outside of the freeze.
Mon, 01 May 2017 15:38:07 +0200 color: reflect the new default in global help topic stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 15:38:07 +0200] rev 32091
color: reflect the new default in global help topic We point out that color is enabled by default.
Mon, 01 May 2017 11:04:10 -0700 docs: describe ui.color consistently with --color stable
Martin von Zweigbergk <martinvonz@google.com> [Mon, 01 May 2017 11:04:10 -0700] rev 32090
docs: describe ui.color consistently with --color The --color option is described to accept "boolean, always, auto, never, or debug". Let's use a similar description for ui.color. Also fix the formatting to use double quotes as we seem to use for about half the values in config.txt (the other half uses double backticks). Also use uppercase Boolean for consistency within the file.
Mon, 01 May 2017 16:09:35 +0200 test: glob out variation from 'HGPORT' length stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 16:09:35 +0200] rev 32089
test: glob out variation from 'HGPORT' length On system where HGTEST_PORT is configured to a value an order a magnitude lower or higher than the default. The number of digit in the HGPORT changes and this test breaks.
Mon, 01 May 2017 19:59:13 +0900 lock: avoid unintentional lock acquisition at failure of readlock stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 19:59:13 +0900] rev 32088
lock: avoid unintentional lock acquisition at failure of readlock Acquiring lock by vfs.makelock() and getting lock holder (aka "locker") information by vfs.readlock() aren't atomic action. Therefore, failure of the former doesn't ensure success of the latter. Before this patch, lock is unintentionally acquired, if ENOENT causes failure of vfs.readlock() while 5 times retrying, because lock._trylock() returns to caller silently after retrying, and lock.lock() assumes that lock._trylock() returns successfully only if lock is acquired. In this case, lock symlink (or file) isn't created, even though lock is treated as acquired in memory. To avoid this issue, this patch makes lock._trylock() raise LockHeld(EAGAIN) at the end of it, if lock isn't acquired while retrying. An empty "locker" meaning "busy for frequent lock/unlock by many processes" might appear in an abortion message, if lock acquisition fails. Therefore, this patch also does: - use '%r' to increase visibility of "locker", even if it is empty - show hint message to explain what empty "locker" means
Mon, 01 May 2017 19:58:52 +0900 lock: avoid unintentional lock acquisition at failure of readlock stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 19:58:52 +0900] rev 32087
lock: avoid unintentional lock acquisition at failure of readlock Acquiring lock by vfs.makelock() and getting lock holder (aka "locker") information by vfs.readlock() aren't atomic action. Therefore, failure of the former doesn't ensure success of the latter. Before this patch, lock is unintentionally acquired, if self.parentlock is None (this is default value), and lock._readlock() returns None for ENOENT at vfs.readlock(), because these None are recognized as equal to each other. In this case, lock symlink (or file) isn't created, even though lock is treated as acquired in memory. To avoid this issue, this patch retries lock acquisition immediately, if lock._readlock() returns None "locker". This issue will be covered by a test added in subsequent patch, because simple emulation of ENOENT at vfs.readlock() easily causes another issue. "raising ENOENT only at the first vfs.readlock() invocation" is too complicated for unit test, IMHO.
Mon, 01 May 2017 05:52:36 +0900 httppeer: unify hint message for PeerTransportError stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:52:36 +0900] rev 32086
httppeer: unify hint message for PeerTransportError Another raising PeerTransportError for "incomplete response" in httppeer.py uses this (changed) hint message. This unification reduces cost of translation.
Mon, 01 May 2017 05:52:36 +0900 revset: add i18n comments to error messages for followlines predicate stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:52:36 +0900] rev 32085
revset: add i18n comments to error messages for followlines predicate This patch also includes un-quoting "descend" keyword for similarity to other error messages (this seems too trivial as a separated patch).
Mon, 01 May 2017 05:52:32 +0900 help: apply bulk fixes for indentation and literal blocking issues stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:52:32 +0900] rev 32084
help: apply bulk fixes for indentation and literal blocking issues There are some paragraphs, which aren't rendered in online help as expected because of indentation and literal blocking issues. - hgext/rebase.py - paragraph before example code ends with ":", which treats subsequent indented paragraphs as normal block => replace ":" with "::" to treat subsequent paragraphs as literal block - help/pager.txt - paragraph before a list of --pager option values ends with "::", which treats subsequent indented paragraphs as literal block => replace "::" with ":" to treat subsequent paragraphs as normal block - the second line of explanation for no/off --pager option value is indented incorrectly (this also causes failure of "make" in doc) => indent correctly - help/revisions.txt - explanation following example code of "[revsetalias]" section isn't suitable for literal block => un-indent explanation paragraph to treat it as normal block - indentation of "For example" before example of tag() revset predicate matching is meaningless - descriptive text for tag() revset predicate matching isn't suitable for literal block => un-indent concatenated two paragraphs to treat them as normal block
Mon, 01 May 2017 05:38:52 +0900 rebase: fix incorrect configuration example stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:38:52 +0900] rev 32083
rebase: fix incorrect configuration example This configuration example doesn't make rebase require a destination, even though help document wants to show such example.
Mon, 01 May 2017 05:38:52 +0900 help: use hg role of mini reST to make hyper link in HTML page stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 May 2017 05:38:52 +0900] rev 32082
help: use hg role of mini reST to make hyper link in HTML page
(0) -30000 -10000 -3000 -1000 -120 +120 +1000 +3000 +10000 tip