Mon, 10 Jul 2017 17:48:33 +0200 bookmark: remove a useless 'recordchange' in the amend code
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:48:33 +0200] rev 33509
bookmark: remove a useless 'recordchange' in the amend code We do not touch the bookmarks store in this code, just the active bookmark, not covered by the transaction. So it seems we can safely drop this call and the tests agree with us.
Sat, 15 Jul 2017 23:46:33 -0400 test-phase-exchange: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com> [Sat, 15 Jul 2017 23:46:33 -0400] rev 33508
test-phase-exchange: stabilize for Windows
Sat, 15 Jul 2017 15:23:29 -0400 debugignore: eliminate inconsistencies with `hg status` (issue5222)
Matt Harbison <matt_harbison@yahoo.com> [Sat, 15 Jul 2017 15:23:29 -0400] rev 33507
debugignore: eliminate inconsistencies with `hg status` (issue5222) Using a matcher for this command allows processing the named file(s) as relative to cwd. It also leverages the icasefs normalization logic the same way the status command does. (However, a false indicator is given for a nonexistent file in some cases, e.g. passing 'foo.REJ' when that file doesn't exist, and the rule is '*.rej'. Maybe the regex itself needs to be case insensitive on these platforms, at least for the debug command.) Finally, the file printed is relative to cwd and uses platform specific slashes, so a few (glob)s were needed in seemingly unrelated tests.
Sun, 16 Jul 2017 04:39:32 -0700 commandserver: close selector explicitly
Jun Wu <quark@fb.com> [Sun, 16 Jul 2017 04:39:32 -0700] rev 33506
commandserver: close selector explicitly The selector does not have a __del__ method and needs a manual close. We can also use "with selector" but that makes the code too indented. Therefore append a "selector.close()" after the end of the main loop for now.
Sat, 15 Jul 2017 15:01:29 +0900 scmutil: remove duplicated import of i18n._()
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Jul 2017 15:01:29 +0900] rev 33505
scmutil: remove duplicated import of i18n._()
Sun, 04 Jun 2017 10:02:09 -0700 obsstore: let read marker API take a range of offsets
Jun Wu <quark@fb.com> [Sun, 04 Jun 2017 10:02:09 -0700] rev 33504
obsstore: let read marker API take a range of offsets This allows us to read a customized range of markers, instead of loading all of them. The condition of stop is made consistent across C and Python implementation so we will still read marker when offset=a, stop=a+1.
Fri, 14 Jul 2017 20:26:21 -0700 commandserver: use selectors2
Jun Wu <quark@fb.com> [Fri, 14 Jul 2017 20:26:21 -0700] rev 33503
commandserver: use selectors2 Previously, commandserver was using select.select. That could have issue if _sock.fileno() >= FD_SETSIZE (usually 1024), which raises: ValueError: filedescriptor out of range in select() We got that in production today, although it's the code opening that many files to blame, it seems better for commandserver to work in this case. There are multiple way to "solve" it, like preserving a fd with a small number and swap it with sock using dup2(). But upgrading to a modern selector supported by the system seems to be the most correct way.
Fri, 14 Jul 2017 20:19:46 -0700 selector2: vendor selector2 library
Jun Wu <quark@fb.com> [Fri, 14 Jul 2017 20:19:46 -0700] rev 33502
selector2: vendor selector2 library This library was a backport of the Python 3 "selectors" library. It is useful to provide a better selector interface for Python2, to address some issues of the plain old select.select, mentioned in the next patch. The code [1] was ported using the MIT license, with some minor modifications to make our test happy: 1. "# no-check-code" was added since it's foreign code. 2. "from __future__ import absolute_import" was added. 3. "from collections import namedtuple, Mapping" changed to avoid direct symbol import. [1]: https://github.com/SethMichaelLarson/selectors2/blob/d27dbd2fdc48331fb76ed431f44b6e6956de7f82/selectors2.py # no-check-commit
Tue, 11 Jul 2017 00:40:29 -0400 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com> [Tue, 11 Jul 2017 00:40:29 -0400] rev 33501
context: name files relative to cwd in warning messages I was several directories deep in the kernel tree, ran `hg add`, and got the warning about the size of one of the files. I noticed that it suggested undoing the add with a specific revert command. The problem is, it would have failed since the path printed was relative to the repo root instead of cwd. While here, I just fixed the other messages too. As an added benefit, these messages now look the same as the verbose/inexact messages for the corresponding command. I don't think most of these messages are reachable (typically the corresponding cmdutil function does the check). I wasn't able to figure out why the keyword tests were failing when using pathto()- I couldn't cause an absolute path to be used by manipulating the --cwd flag on a regular add. (I did notice that keyword is adding the file without holding wlock.)
Sat, 15 Jul 2017 00:52:36 -0400 run-tests: disable color on Windows
Matt Harbison <matt_harbison@yahoo.com> [Sat, 15 Jul 2017 00:52:36 -0400] rev 33500
run-tests: disable color on Windows More Windows sadness. Maybe someone can figure out how to make win32 color work, but I think we avoid importing stuff from the mercurial package in this module. On the plus side, this conditionalizes away a test failure.
Fri, 14 Jul 2017 14:22:40 -0700 codemod: register core configitems using a script
Jun Wu <quark@fb.com> [Fri, 14 Jul 2017 14:22:40 -0700] rev 33499
codemod: register core configitems using a script This is done by a script [2] using RedBaron [1], a tool designed for doing code refactoring. All "default" values are decided by the script and are strongly consistent with the existing code. There are 2 changes done manually to fix tests: [warn] mercurial/exchange.py: experimental.bundle2-output-capture: default needs manual removal [warn] mercurial/localrepo.py: experimental.hook-track-tags: default needs manual removal Since RedBaron is not confident about how to indent things [2]. [1]: https://github.com/PyCQA/redbaron [2]: https://github.com/PyCQA/redbaron/issues/100 [3]: #!/usr/bin/env python # codemod_configitems.py - codemod tool to fill configitems # # Copyright 2017 Facebook, Inc. # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from __future__ import absolute_import, print_function import os import sys import redbaron def readpath(path): with open(path) as f: return f.read() def writepath(path, content): with open(path, 'w') as f: f.write(content) _configmethods = {'config', 'configbool', 'configint', 'configbytes', 'configlist', 'configdate'} def extractstring(rnode): """get the string from a RedBaron string or call_argument node""" while rnode.type != 'string': rnode = rnode.value return rnode.value[1:-1] # unquote, "'str'" -> "str" def uiconfigitems(red): """match *.ui.config* pattern, yield (node, method, args, section, name)""" for node in red.find_all('atomtrailers'): entry = None try: obj = node[-3].value method = node[-2].value args = node[-1] section = args[0].value name = args[1].value if (obj in ('ui', 'self') and method in _configmethods and section.type == 'string' and name.type == 'string'): entry = (node, method, args, extractstring(section), extractstring(name)) except Exception: pass else: if entry: yield entry def coreconfigitems(red): """match coreconfigitem(...) pattern, yield (node, args, section, name)""" for node in red.find_all('atomtrailers'): entry = None try: args = node[1] section = args[0].value name = args[1].value if (node[0].value == 'coreconfigitem' and section.type == 'string' and name.type == 'string'): entry = (node, args, extractstring(section), extractstring(name)) except Exception: pass else: if entry: yield entry def registercoreconfig(cfgred, section, name, defaultrepr): """insert coreconfigitem to cfgred AST section and name are plain string, defaultrepr is a string """ # find a place to insert the "coreconfigitem" item entries = list(coreconfigitems(cfgred)) for node, args, nodesection, nodename in reversed(entries): if (nodesection, nodename) < (section, name): # insert after this entry node.insert_after( 'coreconfigitem(%r, %r,\n' ' default=%s,\n' ')' % (section, name, defaultrepr)) return def main(argv): if not argv: print('Usage: codemod_configitems.py FILES\n' 'For example, FILES could be "{hgext,mercurial}/*/**.py"') dirname = os.path.dirname reporoot = dirname(dirname(dirname(os.path.abspath(__file__)))) # register configitems to this destination cfgpath = os.path.join(reporoot, 'mercurial', 'configitems.py') cfgred = redbaron.RedBaron(readpath(cfgpath)) # state about what to do registered = set((s, n) for n, a, s, n in coreconfigitems(cfgred)) toregister = {} # {(section, name): defaultrepr} coreconfigs = set() # {(section, name)}, whether it's used in core # first loop: scan all files before taking any action for i, path in enumerate(argv): print('(%d/%d) scanning %s' % (i + 1, len(argv), path)) iscore = ('mercurial' in path) and ('hgext' not in path) red = redbaron.RedBaron(readpath(path)) # find all repo.ui.config* and ui.config* calls, and collect their # section, name and default value information. for node, method, args, section, name in uiconfigitems(red): if section == 'web': # [web] section has some weirdness, ignore them for now continue defaultrepr = None key = (section, name) if len(args) == 2: if key in registered: continue if method == 'configlist': defaultrepr = 'list' elif method == 'configbool': defaultrepr = 'False' else: defaultrepr = 'None' elif len(args) >= 3 and (args[2].target is None or args[2].target.value == 'default'): # try to understand the "default" value dnode = args[2].value if dnode.type == 'name': if dnode.value in {'None', 'True', 'False'}: defaultrepr = dnode.value elif dnode.type == 'string': defaultrepr = repr(dnode.value[1:-1]) elif dnode.type in ('int', 'float'): defaultrepr = dnode.value # inconsistent default if key in toregister and toregister[key] != defaultrepr: defaultrepr = None # interesting to rewrite if key not in registered: if defaultrepr is None: print('[note] %s: %s.%s: unsupported default' % (path, section, name)) registered.add(key) # skip checking it again else: toregister[key] = defaultrepr if iscore: coreconfigs.add(key) # second loop: rewrite files given "toregister" result for path in argv: # reconstruct redbaron - trade CPU for memory red = redbaron.RedBaron(readpath(path)) changed = False for node, method, args, section, name in uiconfigitems(red): key = (section, name) defaultrepr = toregister.get(key) if defaultrepr is None or key not in coreconfigs: continue if len(args) >= 3 and (args[2].target is None or args[2].target.value == 'default'): try: del args[2] changed = True except Exception: # redbaron fails to do the rewrite due to indentation # see https://github.com/PyCQA/redbaron/issues/100 print('[warn] %s: %s.%s: default needs manual removal' % (path, section, name)) if key not in registered: print('registering %s.%s' % (section, name)) registercoreconfig(cfgred, section, name, defaultrepr) registered.add(key) if changed: print('updating %s' % path) writepath(path, red.dumps()) if toregister: print('updating configitems.py') writepath(cfgpath, cfgred.dumps()) if __name__ == "__main__": sys.exit(main(sys.argv[1:]))
Tue, 11 Jul 2017 08:52:55 -0700 phabricator: allow specifying reviewers on phabsend
Jun Wu <quark@fb.com> [Tue, 11 Jul 2017 08:52:55 -0700] rev 33498
phabricator: allow specifying reviewers on phabsend Sometimes people want to specify reviewer explicitly for a stack. The webpage only allows changing reviewer for one revision at a time. This patch adds a `--reviewer` flag to make it easier to specify reviewers. Test Plan: On a test Phabricator instance, enable `differential.allow-self-accept`, assign myself as a reviewer and make sure it works. Also try an invalid username and make sure it raises. Differential Revision: https://phab.mercurial-scm.org/D38
Tue, 11 Jul 2017 10:46:55 -0700 match: remove unused negatematcher
Martin von Zweigbergk <martinvonz@google.com> [Tue, 11 Jul 2017 10:46:55 -0700] rev 33497
match: remove unused negatematcher This was only used by the sparse extension's dirstate._ignore override, which no longer exists. Differential Revision: https://phab.mercurial-scm.org/D60
Tue, 11 Jul 2017 10:46:35 -0700 sparse: override dirstate.walk() instead of dirstate._ignore
Martin von Zweigbergk <martinvonz@google.com> [Tue, 11 Jul 2017 10:46:35 -0700] rev 33496
sparse: override dirstate.walk() instead of dirstate._ignore Instead of treating files that are outside the sparse config as ignored, this makes it so we list only those that are within the sparse config by passing the sparse matcher to dirstate.walk(). Once we add support for narrow (sparseness applied to history, not just working copy), we will need to do a similar restriction of the walk over manifests, so this will be more consistent then. It also simplifies the code a bit. Note that a side-effect of this change is that files outside the sparse config used to be listed as ignored, but they will now not be listed at all. This can be seen in the test case where "hg purge" no longer has any effect because it doesn't see that the files outside the space config exist. To fix that, I think we should add an option to dirstate.walk() to walk outside the sparse config. We might expose that to the user as --no-sparse flag to e.g. "hg status" and "hg purge", but that's work for another day. Differential Revision: https://phab.mercurial-scm.org/D59
Wed, 12 Jul 2017 15:24:47 -0700 patch: use devel.all-warnings to replace devel.all
Jun Wu <quark@fb.com> [Wed, 12 Jul 2017 15:24:47 -0700] rev 33495
patch: use devel.all-warnings to replace devel.all It appears to be a misspell in patch.py.
Wed, 12 Jul 2017 18:37:13 -0400 sslutil: inform the user about how to fix an incomplete certificate chain
Matt Harbison <matt_harbison@yahoo.com> [Wed, 12 Jul 2017 18:37:13 -0400] rev 33494
sslutil: inform the user about how to fix an incomplete certificate chain This is a Windows only thing. Unfortunately, the socket is closed at this point (so the certificate is unavailable to check the chain). That means it's printed out when verification fails as a guess, on the assumption that 1) most of the time verification won't fail, and 2) sites using expired or certs that are too new will be rare. Maybe this is an argument for adding more functionality to debugssl, to test for problems and print certificate info. Or maybe it's an argument for bundling certificates with the Windows builds. That idea was set aside when the enhanced SSL code went in last summer, and it looks like there were issues with using certifi on Windows anyway[1]. This was tested by deleting the certificate out of certmgr.msc > "Third-Party Root Certification Authorities" > "Certificates", seeing `hg pull` fail (with the new message), trying this command, and then successfully performing the pull command. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-October/089573.html
Thu, 30 Mar 2017 00:27:46 -0400 debug: add a method to check the state of, and built an SSL cert chain
Matt Harbison <matt_harbison@yahoo.com> [Thu, 30 Mar 2017 00:27:46 -0400] rev 33493
debug: add a method to check the state of, and built an SSL cert chain This is only useful on Windows, and avoids the need to use Internet Explorer to build the certificate chain. I can see this being extended in the future to print information about the certificate(s) to help debug issues on any platform. Maybe even perform some of the python checks listed on the secure connections wiki page. But for now, all I need is 1) a command that can be invoked in a setup script to ensure the certificate is installed, and 2) a command that the user can run if/when a certificate changes in the future. It would have been nice to leverage the sslutil library to pick up host specific settings, but attempting to use sslutil.wrapsocket() failed the 'not sslsocket.cipher()' check in it and aborted. The output is a little more chatty than some commands, but I've seen the update take 10+ seconds, and this is only a debug command.
Wed, 29 Mar 2017 23:45:23 -0400 win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com> [Wed, 29 Mar 2017 23:45:23 -0400] rev 33492
win32: add a method to trigger the Crypto API to complete a certificate chain I started a thread[1] on the mailing list awhile ago, but the short version is that Windows doesn't ship with a full list of certificates[2]. Even if the server sends the whole chain, if Windows doesn't have the appropriate certificate pre-installed in its "Third-Party Root Certification Authorities" store, connections mysteriously fail with: abort: error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) Windows expects the application to call the methods invoked here as part of the certificate verification, triggering a call out to Windows update if necessary, to complete the trust chain. The python bug to add this support[3] hasn't had any recent activity, and isn't targeting py27 anyway. The only work around that I could find (besides figuring out the certificate and walking through the import wizard) is to browse to the site in Internet Explorer. Opening the page with FireFox or Chrome didn't work. That's a pretty obscure way to fix a pretty obscure problem. We go to great lengths to demystify various SSL errors, but this case is clearly lacking. Let's try to make things easier to diagnose and fix. When I had trouble figuring out how to get ctypes to work with all of the API pointers, I found that there are other python projects[4] using this API to achieve the same thing. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-April/096501.html [2] https://support.microsoft.com/en-us/help/931125/how-to-get-a-root-certificate-update-for-windows [3] https://bugs.python.org/issue20916 [4] https://github.com/nvaccess/nvda/blob/3b86bce2066b1934df14b96f2e83369900860ecf/source/updateCheck.py#L511
Mon, 10 Jul 2017 19:40:23 +0200 bookmarks: use 'applychanges' for bookmark update
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 19:40:23 +0200] rev 33491
bookmarks: use 'applychanges' for bookmark update There is still some use of 'deletedivergent' bookmark here. They will be taken care of later. The 'deletedivergent' code needs some rework before fitting in the new world.
Mon, 10 Jul 2017 17:46:47 +0200 bookmark: use 'applychanges' in 'repair.strip'
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:46:47 +0200] rev 33490
bookmark: use 'applychanges' in 'repair.strip'
Mon, 10 Jul 2017 17:44:25 +0200 bookmark: use 'applychanges' in the mq extension
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:44:25 +0200] rev 33489
bookmark: use 'applychanges' in the mq extension
Mon, 10 Jul 2017 17:37:48 +0200 bookmark: use 'applychanges' when stripping
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:37:48 +0200] rev 33488
bookmark: use 'applychanges' when stripping
Mon, 10 Jul 2017 17:30:20 +0200 bookmark: use 'applychanges' in the convert extension
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:30:20 +0200] rev 33487
bookmark: use 'applychanges' in the convert extension
Mon, 10 Jul 2017 17:28:53 +0200 bookmark: use 'applychanges' when updating bookmark in histedit
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:28:53 +0200] rev 33486
bookmark: use 'applychanges' when updating bookmark in histedit
Mon, 10 Jul 2017 17:24:28 +0200 bookmark: use 'applychanges' when updating a bookmark through pushkey
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:24:28 +0200] rev 33485
bookmark: use 'applychanges' when updating a bookmark through pushkey
Mon, 10 Jul 2017 17:22:17 +0200 bookmark: use 'applychanges' when updating from a remote
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:22:17 +0200] rev 33484
bookmark: use 'applychanges' when updating from a remote
Mon, 10 Jul 2017 17:10:56 +0200 bookmark: use 'applychanges' for adding new bookmark
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:10:56 +0200] rev 33483
bookmark: use 'applychanges' for adding new bookmark
Mon, 10 Jul 2017 17:08:20 +0200 bookmark: use 'applychanges' for bookmark renaming
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:08:20 +0200] rev 33482
bookmark: use 'applychanges' for bookmark renaming
Mon, 10 Jul 2017 17:04:16 +0200 bookmark: use 'applychanges' for bookmark deletion
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:04:16 +0200] rev 33481
bookmark: use 'applychanges' for bookmark deletion
Mon, 10 Jul 2017 17:01:34 +0200 bookmark: introduce a 'applychanges' function to gather bookmark movement
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 17:01:34 +0200] rev 33480
bookmark: introduce a 'applychanges' function to gather bookmark movement We want to track bookmark movement within a transaction. For this we need a more centralized way to update bookmarks. For this purpose we introduce a new 'applychanges' method that apply a list of changes encoded as '(name, node)'. We'll cover all bookmark updating code to this new method in later changesets and add bookmark move in the transaction when all will be migrated.
Sat, 03 Jun 2017 21:56:23 -0700 obsstore: keep self._data updated with _addmarkers
Jun Wu <quark@fb.com> [Sat, 03 Jun 2017 21:56:23 -0700] rev 33479
obsstore: keep self._data updated with _addmarkers This makes sure obsstore._data is still correct with added markers. The '_data' propertycache was added in 17ce57b7873f.
Fri, 14 Jul 2017 10:57:36 -0700 match: make base matcher return True for visitdir
Durham Goode <durham@fb.com> [Fri, 14 Jul 2017 10:57:36 -0700] rev 33478
match: make base matcher return True for visitdir If a matcher doesn't implement visitdir, we should be returning True so that tree traversals are not prematurely pruned. The old value of False would prevent tree traversals when using any matcher that didn't implement visitdir. Differential Revision: https://phab.mercurial-scm.org/D83
Fri, 14 Jul 2017 10:48:08 -0700 tests: fix an incorrect description in test-ignore.t
Martin von Zweigbergk <martinvonz@google.com> [Fri, 14 Jul 2017 10:48:08 -0700] rev 33477
tests: fix an incorrect description in test-ignore.t Differential Revision: https://phab.mercurial-scm.org/D82
Sat, 15 Jul 2017 00:38:57 +0900 templatekw: hide {peerpaths} keyword for 4.3
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Jul 2017 00:38:57 +0900] rev 33476
templatekw: hide {peerpaths} keyword for 4.3 Thinking a bit further about list/dict subscript operation (proposed by issue 5534), I noticed the current data structure, a dict of dicts, might not be ideal. For example, if there were "'[' index ']'" and "'.' key" operators, "{parents[0]}" would return "{p1rev}:{p1node}", and we would probably want to write "{parents[0].desc}" to get the first element of "{parents % "{desc}"}". This will basically execute parents[0].makemap()['desc'] in Python. Given the rule above, "{peerpaths.default.pushurl}" will be translated to peerpaths['default'].makemap()['pushurl'], which means {peerpaths} should be a single-level dict and sub-options should be makemap()-ed. "{peerpaths % "{name} = {url}, {pushurl}, ..."}" (Well, it could be peerpaths['default']['pushurl'], but in which case, peerpaths['default'] should be a plain dict, not a hybrid object.) So, let's mark the current implementation experimental and revisit it later.
Fri, 14 Jul 2017 13:48:17 +0200 parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org> [Fri, 14 Jul 2017 13:48:17 +0200] rev 33475
parsers: fix invariant bug in find_deepest (issue5623) find_deepest is used to find the "best" ancestors given a list. In the main loop it keeps an invariant called 'ninteresting' which is supposed to contain the number of non-zero entries in the 'interesting' array. This invariant is incorrectly maintained, however, which leads the the algorithm returning an empty result for certain graphs. This has been fixed. Also, the 'interesting' array is supposed to fit 2^ancestors values, but is incorrectly allocated to twice that size. This has been fixed as well. The tests in test-ancestor.py compare the Python and C versions of the code, and report the error correctly, since the Python version works correct. Even so, I have added an additional test against the expected result, in the event that both algorithms have an identical error in the future. This fixes issue5623.
Fri, 30 Jun 2017 03:45:57 +0200 configitems: register the 'worker.backgroundclose' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:45:57 +0200] rev 33474
configitems: register the 'worker.backgroundclose' config
Fri, 30 Jun 2017 03:44:05 +0200 configitems: register the 'progress.width' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:44:05 +0200] rev 33473
configitems: register the 'progress.width' config
Wed, 12 Jul 2017 23:36:28 +0200 configitems: register the 'color.pagermode' config
Boris Feld <boris.feld@octobus.net> [Wed, 12 Jul 2017 23:36:28 +0200] rev 33472
configitems: register the 'color.pagermode' config
Wed, 12 Jul 2017 23:36:10 +0200 configitems: handle case were the default value is not static
Boris Feld <boris.feld@octobus.net> [Wed, 12 Jul 2017 23:36:10 +0200] rev 33471
configitems: handle case were the default value is not static In some case, the default of one value is derived from other value. We add a way to register them anyway and an associated devel-warning. The registration is very naive for the moment. We might be able to have a better way for registering each of these cases but it could be done later.
Fri, 14 Jul 2017 16:17:37 +0200 bugzilla: move the default regexp for fix in the config declaration
Boris Feld <boris.feld@octobus.net> [Fri, 14 Jul 2017 16:17:37 +0200] rev 33470
bugzilla: move the default regexp for fix in the config declaration This mimic the change requested by Yuya for '_default_bug_re'.
Fri, 07 Jul 2017 10:04:21 +0200 configitems: register the 'bugzilla.version' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:21 +0200] rev 33469
configitems: register the 'bugzilla.version' config
Fri, 07 Jul 2017 10:04:19 +0200 configitems: register the 'bugzilla.usermap' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:19 +0200] rev 33468
configitems: register the 'bugzilla.usermap' config
Fri, 07 Jul 2017 10:04:17 +0200 configitems: register the 'bugzilla.user' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:17 +0200] rev 33467
configitems: register the 'bugzilla.user' config
Fri, 07 Jul 2017 10:04:15 +0200 configitems: register the 'bugzilla.timeout' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:15 +0200] rev 33466
configitems: register the 'bugzilla.timeout' config
Fri, 07 Jul 2017 10:04:13 +0200 configitems: register the 'bugzilla.template' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:13 +0200] rev 33465
configitems: register the 'bugzilla.template' config
Fri, 07 Jul 2017 10:04:11 +0200 configitems: register the 'bugzilla.style' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:11 +0200] rev 33464
configitems: register the 'bugzilla.style' config
Fri, 07 Jul 2017 10:04:09 +0200 configitems: register the 'bugzilla.strip' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:09 +0200] rev 33463
configitems: register the 'bugzilla.strip' config
Fri, 07 Jul 2017 10:04:07 +0200 configitems: register the 'bugzilla.regexp' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:07 +0200] rev 33462
configitems: register the 'bugzilla.regexp' config The default value is moved from the class to the config registration.
Thu, 13 Jul 2017 21:08:06 +0200 changegroup: stop returning and recording added nodes in 'cg.apply'
Boris Feld <boris.feld@octobus.net> [Thu, 13 Jul 2017 21:08:06 +0200] rev 33461
changegroup: stop returning and recording added nodes in 'cg.apply' cg.apply used to returns the added nodes. Callers doesn't have a use for it anymore, remove the added node and stops recording it in the current operation. This information was added in the current release cycle so no extensions breakage should happens.
Thu, 13 Jul 2017 21:10:55 +0200 phases: remove trace of addednodes in the 'phase-heads' handling
Boris Feld <boris.feld@octobus.net> [Thu, 13 Jul 2017 21:10:55 +0200] rev 33460
phases: remove trace of addednodes in the 'phase-heads' handling updatephases have no use of the 'addednodes' parameter since 50243c975fc2. However caller are still passing it for nothing, remove the parameter and remove computing of the added nodes in caller.
Wed, 12 Jul 2017 22:39:48 +0200 phases: test phases tracking at the transaction level
Boris Feld <boris.feld@octobus.net> [Wed, 12 Jul 2017 22:39:48 +0200] rev 33459
phases: test phases tracking at the transaction level Now that we have all tracking in place, the data in `tr.changes['phases']` dictionary should be correct and we should test it. It is a bit late in the cycle to discuss to add any public API (eg: hooks) that expose the data to the user, so we just add a small test extension displaying the data. It is enabled for the phases tests. New output have been manually checked for consistency.
Wed, 12 Jul 2017 20:11:00 +0200 phases: track phase changes from 'retractboundary'
Boris Feld <boris.feld@octobus.net> [Wed, 12 Jul 2017 20:11:00 +0200] rev 33458
phases: track phase changes from 'retractboundary' We adds new computation to find and record the revision affected by the boundary retraction. This add more complication to the function but this seems fine since it is only used in a couple of rare and explicit cases (`hg phase --force` and `hg qimport`). Having strong tracking of phase changes is worth the effort.
Wed, 12 Jul 2017 23:15:09 +0200 phases: detect when boundaries has been actually retracted
Boris Feld <boris.feld@octobus.net> [Wed, 12 Jul 2017 23:15:09 +0200] rev 33457
phases: detect when boundaries has been actually retracted It is useful to detect noop and avoid expensive operations in this case. We return the information to inform the caller of a possible update. Top level function might need to react to the phase update (eg: invalidating some caches, tracking phase change).
Tue, 11 Jul 2017 01:17:36 +0200 phases: rework phase movement code in 'cg.apply' to use 'registernew'
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 01:17:36 +0200] rev 33456
phases: rework phase movement code in 'cg.apply' to use 'registernew' We rework the code to call 'registernew' before any other phase advancement. This make 'changegroup.apply' register correct phase movement for the added and bundled nodes.
Tue, 11 Jul 2017 00:59:23 +0200 convert: use the new 'phase.registernew' function
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 00:59:23 +0200] rev 33455
convert: use the new 'phase.registernew' function
Tue, 11 Jul 2017 01:05:27 +0200 localrepo: use the 'registernew' function to set the phase of new commit
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 01:05:27 +0200] rev 33454
localrepo: use the 'registernew' function to set the phase of new commit
Tue, 11 Jul 2017 03:47:25 +0200 phases: add a 'registernew' method to set new phases
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 03:47:25 +0200] rev 33453
phases: add a 'registernew' method to set new phases This new function will be used by code that adds new changesets. It ajusts the phase boundary to make sure added changesets are at least in their target phase (they end up in an higher phase if their parents are in a higher phase). Having a dedicated function also simplify the phases tracking. All the new nodes are passed as argument, so we know that all of them needs to have their new phase registered. We also know that no other nodes will be affected, so no extra computation are needed. This function differ from 'retractboundary' where some nodes might change phase while some other might not. It can also affect nodes not passed as parameters. These simplification also apply to the computation itself. For now we use '_retractboundary' there by convenience, but we may introduces simpler code later. While registering new revisions, we still need to check the actual phases of the added node because it might be higher than the target phase (eg: target is draft but parent is secret). We will migrate users over the next changesets.
Mon, 10 Jul 2017 23:50:16 +0200 phases: extract the core of boundary retraction in '_retractboundary'
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 23:50:16 +0200] rev 33452
phases: extract the core of boundary retraction in '_retractboundary' At the moment the 'retractboundary' function is called for multiple reasons: First, actually retracting boundaries. There are only two cases for theses: 'hg phase --force' and 'hg qimport'. This will need extra graph computation to retrieve the phase changes. Second, setting the phases of newly added changesets. In this case we already know all the affected nodes and we just needs to register different information (old phase is None). Third, when reducing the set of roots when advancing phase. The phase are already properly tracked so we do not needs anything else in this case. To deal with this difference in phase tracking, we extract the core logic into a private method that all three cases can use.
Tue, 11 Jul 2017 02:39:52 +0200 phases: track phase movements in 'advanceboundary'
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 02:39:52 +0200] rev 33451
phases: track phase movements in 'advanceboundary' Makes advanceboundary record the phase movement of affected revisions in tr.changes['phases']. The tracking is not usable yet because the 'retractboundary' function can also affect phases. We'll improve that in the coming changesets.
Mon, 10 Jul 2017 22:18:41 +0200 phases: extract the intermediate set of affected revs
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 22:18:41 +0200] rev 33450
phases: extract the intermediate set of affected revs When advancing phases, we compute the new roots for the phases above. During this process, we need to compute all the revisions that change phases (to the new target phases). Extract these revisions into a separate variable. This will be useful to record the phase changes in the transaction.
Mon, 10 Jul 2017 22:22:42 +0200 phase: put retractboundary out of the loop in advanceboundary
Boris Feld <boris.feld@octobus.net> [Mon, 10 Jul 2017 22:22:42 +0200] rev 33449
phase: put retractboundary out of the loop in advanceboundary It seems that we were calling retractboundary for each phases to process. Putting the retractboundary out of the loop reduce the number of calls, helping tracking the phases changes.
Tue, 11 Jul 2017 10:46:10 -0700 match: make unionmatcher a proper matcher
Martin von Zweigbergk <martinvonz@google.com> [Tue, 11 Jul 2017 10:46:10 -0700] rev 33448
match: make unionmatcher a proper matcher unionmatcher is currently used where only a limited subset of its functions will be called. Specifically, visitdir() is never called. The next patch will pass it to dirstate.walk() where it will matter that visitdir() is correctly implemented, so let's fix that. Also add the explicitdir etc that will also be assumed by dirstate.walk() to exist on a matcher. Differential Revision: https://phab.mercurial-scm.org/D58
Fri, 07 Jul 2017 14:39:59 -0700 match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com> [Fri, 07 Jul 2017 14:39:59 -0700] rev 33447
match: write forceincludematcher using unionmatcher The forceincludematcher is simply a unionmatcher of a includematcher (matching paths recursively) with the given matcher. Since the forceincludematcher is only used by sparse, move it there. I don't have a good sparse repo setup to test performance impact on. Differential Revision: https://phab.mercurial-scm.org/D57
Wed, 12 Jul 2017 13:57:03 -0700 histedit: extract InterventionRequired transaction handling to utils
Martin von Zweigbergk <martinvonz@google.com> [Wed, 12 Jul 2017 13:57:03 -0700] rev 33446
histedit: extract InterventionRequired transaction handling to utils rebase will have similar logic, so let's extract it. Besides, it makes the histedit code more readable. We may want to parametrize acceptintervention() by the exception(s) that should result in transaction close. Differential Revision: https://phab.mercurial-scm.org/D66
Wed, 12 Jul 2017 13:17:49 -0700 histedit: create transaction outside of try
Martin von Zweigbergk <martinvonz@google.com> [Wed, 12 Jul 2017 13:17:49 -0700] rev 33445
histedit: create transaction outside of try Just a little refactoring to simplify the next patch. Differential Revision: https://phab.mercurial-scm.org/D65
Wed, 12 Jul 2017 11:18:02 -0700 histedit: remove transaction from state object
Martin von Zweigbergk <martinvonz@google.com> [Wed, 12 Jul 2017 11:18:02 -0700] rev 33444
histedit: remove transaction from state object The transaction is only used within a single function, so no need to store it on the state object. Differential Revision: https://phab.mercurial-scm.org/D64
Tue, 11 Jul 2017 08:17:29 -0700 phabricator: verify local tags before trusting them
Jun Wu <quark@fb.com> [Tue, 11 Jul 2017 08:17:29 -0700] rev 33443
phabricator: verify local tags before trusting them Previously we trust local tags blindly and that could cause wrong Differential Revision to be updated, when people switch between Phabricator instances. This patch adds verification logic to detect such issue and remove problematic tags. For example, a tag "D19" was on node "X", the code will fetch all diffs attached to D19, and check if nodes server-side overlaps with nodes in precursors. If they do not overlap, create a new Differential Revision. Test Plan: Use a test Phabricator instance, send patches using `hg phabsend`, then change the local tag manually to a wrong Differential Revision number. Amend the patch and send again. Make sure the tag gets ignored and deleted. Differential Revision: https://phab.mercurial-scm.org/D36
Mon, 10 Jul 2017 13:50:50 -0700 phabricator: finding old nodes in batch
Jun Wu <quark@fb.com> [Mon, 10 Jul 2017 13:50:50 -0700] rev 33442
phabricator: finding old nodes in batch This allows us to do extra sanity checks using batch APIs to prevent updating a wrong revision, which could happen when people switch Phabricator instances and having stale tags living in the repo. Differential Revision: https://phab.mercurial-scm.org/D34
Mon, 10 Jul 2017 22:37:33 -0700 phabricator: respect metadata sent by arc
Jun Wu <quark@fb.com> [Mon, 10 Jul 2017 22:37:33 -0700] rev 33441
phabricator: respect metadata sent by arc Previously we only respect hg:meta sent by phabsend. This patch makes it respect local:commits sent by arc as well. This avoids issues where phabread could lose the author information. Test Plan: Commit using a customized user, send the patch using arc to a test Phabricator instance, and then read the patch using phabread. Make sure it preserves the user information. Differential Revision: https://phab.mercurial-scm.org/D33
Wed, 12 Jul 2017 15:24:07 -0700 dirstate: update backup functions to take full backup filename
Adam Simpkins <simpkins@fb.com> [Wed, 12 Jul 2017 15:24:07 -0700] rev 33440
dirstate: update backup functions to take full backup filename Update the dirstate functions so that the caller supplies the full backup filename rather than just a prefix and suffix. The localrepo code was already hard-coding the fact that the backup name must be (exactly prefix + "dirstate" + suffix): it relied on this in _journalfiles() and undofiles(). Making the caller responsible for specifying the full backup name removes the need for the localrepo code to assume that dirstate._filename is always "dirstate". Differential Revision: https://phab.mercurial-scm.org/D68
Thu, 13 Jul 2017 09:51:50 -0700 util: remove unused ctxmanager
Martin von Zweigbergk <martinvonz@google.com> [Thu, 13 Jul 2017 09:51:50 -0700] rev 33439
util: remove unused ctxmanager This was meant as a substitute for Python's "with" with multiple context managers before we moved to Python 2.7. We're now on 2.7, so we should have no reason to keep ctxmanager. "hg grep --all ctxmanager" says that it was never used anyway. Differential Revision: https://phab.mercurial-scm.org/D73
Thu, 13 Jul 2017 18:31:35 -0700 codemod: simplify nested withs
Jun Wu <quark@fb.com> [Thu, 13 Jul 2017 18:31:35 -0700] rev 33438
codemod: simplify nested withs This is the result of running: python codemod_nestedwith.py **/*.py where codemod_nestedwith.py looks like this: #!/usr/bin/env python # codemod_nestedwith.py - codemod tool to rewrite nested with # # Copyright 2017 Facebook, Inc. # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from __future__ import absolute_import, print_function import sys import redbaron def readpath(path): with open(path) as f: return f.read() def writepath(path, content): with open(path, 'w') as f: f.write(content) def main(argv): if not argv: print('Usage: codemod_nestedwith.py FILES') for i, path in enumerate(argv): print('(%d/%d) scanning %s' % (i + 1, len(argv), path)) changed = False red = redbaron.RedBaron(readpath(path)) processed = set() for node in red.find_all('with'): if node in processed or node.type != 'with': continue top = node child = top[0] while True: if len(top) > 1 or child.type != 'with': break # estimate line length after merging two "with"s new = '%swith %s:' % (top.indentation, top.contexts.dumps()) new += ', %s' % child.contexts.dumps() # only do the rewrite if the end result is within 80 chars if len(new) > 80: break processed.add(child) top.contexts.extend(child.contexts) top.value = child.value top.value.decrease_indentation(4) child = child[0] changed = True if changed: print('updating %s' % path) writepath(path, red.dumps()) if __name__ == "__main__": sys.exit(main(sys.argv[1:])) Differential Revision: https://phab.mercurial-scm.org/D77
Mon, 08 Aug 2016 18:14:42 +0200 reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net> [Mon, 08 Aug 2016 18:14:42 +0200] rev 33437
reposvfs: add a ward to check if locks are properly taken we wrap 'repo.svfs.audit' to check for the store lock when accessing file in '.hg/store' for writing. This caught a couple of instance where the transaction was released after the lock, we should probably have a dedicated checker for that case.
Tue, 11 Jul 2017 12:38:17 +0200 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 12:38:17 +0200] rev 33436
repovfs: add a ward to check if locks are properly taken When the appropriate developer warnings are enabled, We wrap 'repo.vfs.audit' to check for locks when accessing file in '.hg' for writing. Another changeset will add a 'ward' for the store vfs (svfs). This check system has caught a handful of locking issues that have been fixed in previous series (mostly in 4.0). I expect another batch to be caught in third party extensions. We introduce two real exceptions from extensions 'blackbox.log' (because a lot of read-only operations add entry to it), and 'last-email.txt' (because 'hg email' is currently a read only operation and there is value to keep it this way). In addition we are currently allowing bisect to operate outside of the lock because the current code is a bit hard to get properly locked for now. Multiple clean up have been made but there is still a couple of them to do and the freeze is coming.
Tue, 11 Jul 2017 12:27:58 +0200 vfs: allow to pass more argument to audit
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 12:27:58 +0200] rev 33435
vfs: allow to pass more argument to audit We want to be able to do more precise check when auditing a path depending of the intend of the file access (eg read versus write). So we now pass the 'mode' value to 'audit' and update the audit function to accept them. This will be put to use in the next changeset.
Wed, 12 Jul 2017 10:11:02 +0200 zsh_completion: add '--partial' flag to completions for 'import' (issue5618)
Martin Tietze <mtietze@gmx.com> [Wed, 12 Jul 2017 10:11:02 +0200] rev 33434
zsh_completion: add '--partial' flag to completions for 'import' (issue5618) When using the 'import' command running ZSH together with its Mercurial-specific completions the flag '--partial' (introduced in Mercurial 3.1, 2014-08-01) is not offered as completion option. This patch adds it to the list of completions for the 'import' command.
Fri, 07 Jul 2017 10:04:05 +0200 configitems: register the 'bugzilla.password' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:05 +0200] rev 33433
configitems: register the 'bugzilla.password' config
Fri, 07 Jul 2017 10:04:03 +0200 configitems: register the 'bugzilla.mocklog' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:03 +0200] rev 33432
configitems: register the 'bugzilla.mocklog' config
Thu, 13 Jul 2017 22:57:11 -0400 test-amend: fix HGEDITOR shell script to run on Windows
Matt Harbison <matt_harbison@yahoo.com> [Thu, 13 Jul 2017 22:57:11 -0400] rev 33431
test-amend: fix HGEDITOR shell script to run on Windows Windows doesn't know how to launch *.sh directly. This workaround is used in several other tests.
Thu, 13 Jul 2017 22:47:35 -0400 test-paths: mask out JSON specific path differences for Windows
Matt Harbison <matt_harbison@yahoo.com> [Thu, 13 Jul 2017 22:47:35 -0400] rev 33430
test-paths: mask out JSON specific path differences for Windows The backslashes in the local paths were being escaped with another backslash, and $TESTTMP doesn't match against the double backslashed path. This doesn't happen without the 'json' filter.
Thu, 13 Jul 2017 03:17:59 +0900 tests: categorize entries in blacklist for fsmonitor for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:59 +0900] rev 33429
tests: categorize entries in blacklist for fsmonitor for future reference
Thu, 13 Jul 2017 03:17:59 +0900 tests: avoid tests related to directory permission if running with fsmonitor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:59 +0900] rev 33428
tests: avoid tests related to directory permission if running with fsmonitor
Thu, 13 Jul 2017 03:17:58 +0900 tests: add extra output for fsmonitor at checking under .hg
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:58 +0900] rev 33427
tests: add extra output for fsmonitor at checking under .hg
Thu, 13 Jul 2017 03:17:58 +0900 tests: add extra output for fsmonitor at showconfig
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:58 +0900] rev 33426
tests: add extra output for fsmonitor at showconfig
Thu, 13 Jul 2017 03:17:58 +0900 tests: take extra care for fsmonitor at enabling incompatible extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:58 +0900] rev 33425
tests: take extra care for fsmonitor at enabling incompatible extension This is worthwhile, because these tests don't focus mainly on using incompatible extensions itself.
Thu, 13 Jul 2017 03:17:57 +0900 tests: remove meaningless entries from blacklist for fsmonitor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:57 +0900] rev 33424
tests: remove meaningless entries from blacklist for fsmonitor IMHO, these tests were listed up in blacklist at 3b67f27bb908, because fsmonitor extension wasn't correctly installed before actual testing at that revision (this issue was fixed by 776fd2e2cf5a).
Thu, 13 Jul 2017 03:17:57 +0900 tests: remove meaningless comment from blacklist for fsmonitor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:57 +0900] rev 33423
tests: remove meaningless comment from blacklist for fsmonitor These tests can run successfully since fe0667cc521e.
Tue, 11 Jul 2017 22:06:57 -0400 test-https: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com> [Tue, 11 Jul 2017 22:06:57 -0400] rev 33422
test-https: stabilize for Windows A leading '/' without a following drive letter is resolved to the location of the MSYS installation. These could be collapsed into a single line of output, but this seems more self documenting.
Tue, 11 Jul 2017 16:48:15 -0700 tagmerge: use workingfilectx to write merged tags
Phil Cohen <phillco@fb.com> [Tue, 11 Jul 2017 16:48:15 -0700] rev 33421
tagmerge: use workingfilectx to write merged tags This function already does an excellent job of reading from context objects; we simply need to change the single write call to eliminate all uses of the wvfs. As with past changes, the effect should be a no-op but opens the door to in-memory merge later by using different context objects.
Thu, 29 Jun 2017 20:45:12 +0900 run-tests: add color to output if pygments is available
Matthieu Laneuville <matthieu.laneuville@octobus.net> [Thu, 29 Jun 2017 20:45:12 +0900] rev 33420
run-tests: add color to output if pygments is available The output of run-tests has no formatting by default, which hampers readability. This patch colors the diff output when pygments is available. To avoid coloring even when pygments is available, use --color never.
Thu, 30 Mar 2017 00:33:00 -0400 win32: work around a WinError problem handling HRESULT types
Matt Harbison <matt_harbison@yahoo.com> [Thu, 30 Mar 2017 00:33:00 -0400] rev 33419
win32: work around a WinError problem handling HRESULT types I ran into this ctypes bug while working with the Crypto API. While this could be an issue with any Win32 API in theory, the handful of things that we call are older functions that are unlikely to return COM errors, so I didn't retrofit this everywhere.
Wed, 12 Jul 2017 15:27:56 -0700 test-check-pyflakes: do not leave test.py in the repo
Jun Wu <quark@fb.com> [Wed, 12 Jul 2017 15:27:56 -0700] rev 33418
test-check-pyflakes: do not leave test.py in the repo Differential Revision: https://phab.mercurial-scm.org/D67
Sat, 08 Jul 2017 13:15:17 +0900 revset: add experimental ancestors/descendants relation subscript
Yuya Nishihara <yuya@tcha.org> [Sat, 08 Jul 2017 13:15:17 +0900] rev 33417
revset: add experimental ancestors/descendants relation subscript The relation name is 'generations' now, which may be changed in future.
Sat, 08 Jul 2017 13:07:59 +0900 revset: add experimental relation and subscript operators
Yuya Nishihara <yuya@tcha.org> [Sat, 08 Jul 2017 13:07:59 +0900] rev 33416
revset: add experimental relation and subscript operators The proposed syntax [1] was originally 'set{n rel}', but it seemed slightly confusing if template is involved. On the other hand, we want to keep 'set[n]' for future extension. So this patch introduces 'set#rel[n]' ternary operator. I chose '#' just because it looks like applying an attribute. This also adds stubs for 'set[n]' and 'set#rel' operators since these syntax elements are fundamental for constructing 'set#rel[n]'. [1]: https://www.mercurial-scm.org/wiki/RevsetOperatorPlan#ideas_from_mpm
Sat, 08 Jul 2017 12:49:46 +0900 revset: do not compute weight for integer literal argument
Yuya Nishihara <yuya@tcha.org> [Sat, 08 Jul 2017 12:49:46 +0900] rev 33415
revset: do not compute weight for integer literal argument In x^n and x~n, n isn't a set expression. There's no need to optimize the right-hand side.
Thu, 13 Jul 2017 00:35:54 +0900 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Jul 2017 00:35:54 +0900] rev 33414
templatekw: export ui.paths as {peerpaths} It's sometimes useful to show hyperlinks in log output. "{get(peerpaths, "default")}/rev/{node}" Since each path may have sub options, "{peerpaths}" is structured as a dict of dicts, but the inner dict is rendered as if it were a string URL. The implementation is ad-hoc, so there are some weird behaviors described in the test. We might need to introduce a proper way of handling a hybrid scalar object. This patch adds _hybrid.__getitem__() so d['path']['url'] works. The keyword is named as "peerpaths" since "paths" seemed too generic in log context.
Fri, 07 Jul 2017 23:13:04 +0900 summary: fix type of empty unresolved list
Yuya Nishihara <yuya@tcha.org> [Fri, 07 Jul 2017 23:13:04 +0900] rev 33413
summary: fix type of empty unresolved list It was okay because tested as a boolean prior to calling len(), but looked incorrect.
Fri, 07 Jul 2017 23:40:00 +0900 vfs: rename auditvfs to proxyvfs
Yuya Nishihara <yuya@tcha.org> [Fri, 07 Jul 2017 23:40:00 +0900] rev 33412
vfs: rename auditvfs to proxyvfs Since we've removed mustaudit property, auditvfs has no auditing business. It's just a utility class for vfs wrappers.
Fri, 07 Jul 2017 23:19:31 +0900 streamclone: comment why path auditing is disabled in generatev1()
Yuya Nishihara <yuya@tcha.org> [Fri, 07 Jul 2017 23:19:31 +0900] rev 33411
streamclone: comment why path auditing is disabled in generatev1() Copied from 39c6e349dfff. I wasn't sure whether it's for optimization or suppressing unwanted error.
Fri, 07 Jul 2017 23:25:16 +0900 streamclone: close large revlog files explicitly in generatev1()
Yuya Nishihara <yuya@tcha.org> [Fri, 07 Jul 2017 23:25:16 +0900] rev 33410
streamclone: close large revlog files explicitly in generatev1()
Tue, 11 Jul 2017 05:06:01 +0200 bundle2: no longer use 'retractboundary' in updatephases
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 05:06:01 +0200] rev 33409
bundle2: no longer use 'retractboundary' in updatephases The new 'phase-heads' forced all added node to secret before advancing the boundary to work around the fact changesets were added as draft by default. This is no longer necessary since the changegroup part can now use the 'targetphase' parameter. Not doing this retract boundary call has a couple of advantages: * This makes implementing phases change tracking in the transaction much simpler since retract boundary can become a rare case. * Bundling secret changesets is not the norm. Exchange never does that and even for strip, the use-case is not common.Skipping the retract boundary will avoid useless work here. * Sending phase update on push can be simplified since we can rely on the behavior of 'cg.apply' for most of it. This means less phases update send for example. * We no longer needs to track and use the addednodes during unbundling. This make it possible to have multiple 'changegroup' and 'phase-heads' parts in the same bundle without them interfering with each others. The new part has not been part of any release yet so we do not offer backward compatibility yet. It is important to update this semantic before the 4.3 freeze happens.
Tue, 11 Jul 2017 05:12:03 +0200 bundle2: automatically add 'targetphase' parameter in writenewbundle
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 05:12:03 +0200] rev 33408
bundle2: automatically add 'targetphase' parameter in writenewbundle If we are bundling secret changeset and the bundle will contain phase, we request the changegroup to be applied as secret. It will be useful for next patch as we are now sure that secrets changesets are applied as secret and not applied as draft then forced to secret.
Tue, 11 Jul 2017 05:11:52 +0200 bundle2: support the 'targetphase' parameter for the changegroup part
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 05:11:52 +0200] rev 33407
bundle2: support the 'targetphase' parameter for the changegroup part By default unbundled changesets are drafts. We want to reduce the number of phases changes during unbundling by giving the possibility to the bundle to indicate the phase of unbundled changesets. The longer terms goal is to add phase movement tracking in tr.changes and the 'retractboundary' call is making it more complicated than we want.
Tue, 11 Jul 2017 04:52:56 +0200 changegroup: stop treating strip as special when dealing with phases
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 04:52:56 +0200] rev 33406
changegroup: stop treating strip as special when dealing with phases Since 8e3021fd1a44, the strip bundle includes the phases of the stripping node. Hence we don't need this special case anymore. Dropping it will helps make the phase behavior more consistent across all exchanges medium.
Tue, 11 Jul 2017 09:42:32 -0700 match: inverse _anypats(), making it _prefix()
Martin von Zweigbergk <martinvonz@google.com> [Tue, 11 Jul 2017 09:42:32 -0700] rev 33405
match: inverse _anypats(), making it _prefix()
Tue, 11 Jul 2017 20:53:55 -0700 amend: new extension providing the amend command
Jun Wu <quark@fb.com> [Tue, 11 Jul 2017 20:53:55 -0700] rev 33404
amend: new extension providing the amend command Various third parties have implemented the `amend` command, which is in high demand. This patch adds it as an experimental extension so its interface could be formalized in core directly. Since `commit --amend` is basically what `amend` should do. The command is just a thin wrapper around `commit --amend` and just prevent the editor from popping up by passing `--message`.
Tue, 11 Jul 2017 11:21:04 -0700 py3: make localrepo filtered repo cache work on py3
Martin von Zweigbergk <martinvonz@google.com> [Tue, 11 Jul 2017 11:21:04 -0700] rev 33403
py3: make localrepo filtered repo cache work on py3 I don't know if this is the right fix, but it makes test-py3-commands.t pass again. Differential Revision: https://phab.mercurial-scm.org/D56
Fri, 07 Jul 2017 10:04:01 +0200 configitems: register the 'bugzilla.host' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:01 +0200] rev 33402
configitems: register the 'bugzilla.host' config
Fri, 07 Jul 2017 10:03:57 +0200 configitems: register the 'bugzilla.fixstatus' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:57 +0200] rev 33401
configitems: register the 'bugzilla.fixstatus' config
Fri, 07 Jul 2017 10:05:40 +0200 configitems: register the 'bugzilla.fixresolution' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:05:40 +0200] rev 33400
configitems: register the 'bugzilla.fixresolution' config
Fri, 07 Jul 2017 10:03:36 +0200 configitems: register the 'bugzilla.fixregexp' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:36 +0200] rev 33399
configitems: register the 'bugzilla.fixregexp' config
Fri, 07 Jul 2017 10:03:34 +0200 configitems: register the 'bugzilla.db' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:34 +0200] rev 33398
configitems: register the 'bugzilla.db' config
Fri, 07 Jul 2017 10:03:31 +0200 configitems: register the 'bugzilla.bzuser' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:31 +0200] rev 33397
configitems: register the 'bugzilla.bzuser' config
Fri, 07 Jul 2017 10:03:28 +0200 configitems: register the 'bugzilla.bzurl' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:28 +0200] rev 33396
configitems: register the 'bugzilla.bzurl' config
Fri, 07 Jul 2017 10:03:26 +0200 configitems: register the 'bugzilla.bzemail' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:26 +0200] rev 33395
configitems: register the 'bugzilla.bzemail' config
Fri, 07 Jul 2017 10:03:24 +0200 configitems: register the 'bugzilla.bzdir' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:24 +0200] rev 33394
configitems: register the 'bugzilla.bzdir' config
Fri, 07 Jul 2017 10:03:22 +0200 configitems: register the 'bugzilla.apikey' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:22 +0200] rev 33393
configitems: register the 'bugzilla.apikey' config
Mon, 10 Jul 2017 16:41:13 -0400 revlog: use struct.Struct instances for slight performance wins
Alex Gaynor <agaynor@mozilla.com> [Mon, 10 Jul 2017 16:41:13 -0400] rev 33392
revlog: use struct.Struct instances for slight performance wins Differential Revision: https://phab.mercurial-scm.org/D32
Mon, 10 Jul 2017 16:39:28 -0400 revlog: micro-optimize the computation of hashes
Alex Gaynor <agaynor@mozilla.com> [Mon, 10 Jul 2017 16:39:28 -0400] rev 33391
revlog: micro-optimize the computation of hashes Differential Revision: https://phab.mercurial-scm.org/D31
Mon, 03 Jul 2017 13:49:03 +0200 hgweb: re-implement followlines UI selection using buttons
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 03 Jul 2017 13:49:03 +0200] rev 33390
hgweb: re-implement followlines UI selection using buttons This changeset attempts to solve two issues with the "followlines" UI in hgweb. First the "followlines" action is currently not easily discoverable (one has to hover on a line for some time, wait for the invite message to appear and then perform some action). Second, it gets in the way of natural line selection, especially in filerevision view. This changeset introduces an additional markup element (a <button class="btn-followlines">) alongside each content line of the view. This button now holds events for line selection that were previously plugged onto content lines directly. Consequently, there's no more action on content lines, hence restoring the "natural line selection" behavior (solving the second problem). These buttons are hidden by default and get displayed upon hover of content lines; then upon hover of a button itself, a text inviting followlines section shows up. This solves the first problem (discoverability) as we now have a clear visual element indicating that "some action could be perform" (i.e. a button) and that is self-documented. In followlines.js, all event listeners are now attached to these <button> elements. The custom "floating tooltip" element is dropped as <button> elements are now self-documented through a "title" attribute that changes depending on preceding actions (selection started or not, in particular). The new <button> element is inserted in followlines.js script (thus only visible if JavaScript is activated); it contains a "+" and "-" with a "diff-semantics" style; upon hover, it scales up. To find the parent element under which to insert the <button> we either rely on the "data-selectabletag" attribute (which defines the HTML tag of children of class="sourcelines" element e.g. <span> for filerevision view and <tr> for annotate view) or use a child of the latter elements if we find an element with class="followlines-btn-parent" (useful for annotate view, for which we have to find the <td> in which to insert the <button>). On noticeable change in CSS concerns the "margin-left" of span:before pseudo-elements in filelog view that has been increased a bit in order to leave space for the new button to appear between line number column and line content one. Also note the "z-index" addition for "annotate-info" box so that the latter appears on top of new buttons (instead of getting hidden). In some respect, the UI similar to line commenting feature that is implemented in popular code hosting site like GitHub, BitBucket or Kallithea.
(0) -30000 -10000 -3000 -1000 -120 +120 +1000 +3000 +10000 tip