# HG changeset patch # User Martin von Zweigbergk # Date 1548183345 28800 # Node ID a322dbee4edaea65d3c2aed9a30ca972e435a028 # Parent 593f6359681dd59d5fbea690a203e09da10d7d4a# Parent 13c23396c7fe1633a2336b29e3a32b9b76274f28 merge with stable diff -r 593f6359681d -r a322dbee4eda .hgsigs --- a/.hgsigs Thu Jan 10 14:57:01 2019 +0100 +++ b/.hgsigs Tue Jan 22 10:55:45 2019 -0800 @@ -174,3 +174,4 @@ a91a2837150bdcb27ae76b3646e6c93cd6a15904 0 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 diff -r 593f6359681d -r a322dbee4eda .hgtags --- a/.hgtags Thu Jan 10 14:57:01 2019 +0100 +++ b/.hgtags Tue Jan 22 10:55:45 2019 -0800 @@ -187,3 +187,4 @@ a91a2837150bdcb27ae76b3646e6c93cd6a15904 4.8 1c8c54cf97256f4468da2eb4dbee24f7f3888e71 4.8.1 197f092b2cd9691e2a55d198f717b231af9be6f9 4.8.2 +593718ff5844cad7a27ee3eb5adad89ac8550949 4.9rc0 diff -r 593f6359681d -r a322dbee4eda mercurial/configitems.py --- a/mercurial/configitems.py Thu Jan 10 14:57:01 2019 +0100 +++ b/mercurial/configitems.py Tue Jan 22 10:55:45 2019 -0800 @@ -556,6 +556,9 @@ coreconfigitem('experimental', 'mergetempdirprefix', default=None, ) +coreconfigitem('experimental', 'mmapindexthreshold', + default=None, +) coreconfigitem('experimental', 'narrow', default=False, ) @@ -987,10 +990,6 @@ coreconfigitem('push', 'pushvars.server', default=False, ) -coreconfigitem('storage', 'mmap-threshold', - default='1MB', - alias=[('experimental', 'mmapindexthreshold')], -) coreconfigitem('rewrite', 'backup-bundle', default=True, alias=[('ui', 'history-editing-backup')], diff -r 593f6359681d -r a322dbee4eda mercurial/help/internals/extensions.txt --- a/mercurial/help/internals/extensions.txt Thu Jan 10 14:57:01 2019 +0100 +++ b/mercurial/help/internals/extensions.txt Tue Jan 22 10:55:45 2019 -0800 @@ -28,11 +28,16 @@ Example using ``@command`` decorator (requires Mercurial 1.9):: - from mercurial import cmdutil from mercurial.i18n import _ cmdtable = {} - command = cmdutil.command(cmdtable) + try: + from mercurial import registrar + command = registrar.command(cmdtable) + except (AttributeError, ImportError): + # Fallback to hg < 4.3 support + from mercurial import cmdutil + command = cmdutil.command(cmdtable) @command('print-parents', [('s', 'short', None, _('print short form')), @@ -308,6 +313,14 @@ buglink = 'https://bitbucket.org/USER/REPO/issues' +If an extension requires a minimum version of Mercurial, it can be declared +with the ``minimumhgversion`` variable:: + + minimumhgversion = '4.6' + +Older clients will print a warning that the extension requires a new version, +instead of attempting to load it. + Wrap up: what belongs where? ============================ diff -r 593f6359681d -r a322dbee4eda mercurial/localrepo.py --- a/mercurial/localrepo.py Thu Jan 10 14:57:01 2019 +0100 +++ b/mercurial/localrepo.py Tue Jan 22 10:55:45 2019 -0800 @@ -758,7 +758,8 @@ if 0 <= chainspan: options[b'maxdeltachainspan'] = chainspan - mmapindexthreshold = ui.configbytes(b'storage', b'mmap-threshold') + mmapindexthreshold = ui.configbytes(b'experimental', + b'mmapindexthreshold') if mmapindexthreshold is not None: options[b'mmapindexthreshold'] = mmapindexthreshold diff -r 593f6359681d -r a322dbee4eda mercurial/narrowspec.py --- a/mercurial/narrowspec.py Thu Jan 10 14:57:01 2019 +0100 +++ b/mercurial/narrowspec.py Tue Jan 22 10:55:45 2019 -0800 @@ -190,12 +190,14 @@ def restorewcbackup(repo, backupname): if repository.NARROW_REQUIREMENT not in repo.requirements: return - util.rename(repo.vfs.join(backupname), repo.vfs.join(DIRSTATE_FILENAME)) + # It may not exist in old repos + if repo.vfs.exists(backupname): + util.rename(repo.vfs.join(backupname), repo.vfs.join(DIRSTATE_FILENAME)) def clearwcbackup(repo, backupname): if repository.NARROW_REQUIREMENT not in repo.requirements: return - repo.vfs.unlink(backupname) + repo.vfs.tryunlink(backupname) def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes): r""" Restricts the patterns according to repo settings, diff -r 593f6359681d -r a322dbee4eda mercurial/revlog.py --- a/mercurial/revlog.py Thu Jan 10 14:57:01 2019 +0100 +++ b/mercurial/revlog.py Tue Jan 22 10:55:45 2019 -0800 @@ -896,6 +896,8 @@ common = [nullrev] if rustext is not None: + # TODO: WdirUnsupported should be raised instead of GraphError + # if common includes wdirrev return rustext.ancestor.MissingAncestors(self.index, common) return ancestor.incrementalmissingancestors(self.parentrevs, common) diff -r 593f6359681d -r a322dbee4eda mercurial/revset.py --- a/mercurial/revset.py Thu Jan 10 14:57:01 2019 +0100 +++ b/mercurial/revset.py Tue Jan 22 10:55:45 2019 -0800 @@ -1765,6 +1765,20 @@ return baseset() return subset & baseset([l]) +@predicate('_rev(number)', safe=True) +def _rev(repo, subset, x): + # internal version of "rev(x)" that raise error if "x" is invalid + # i18n: "rev" is a keyword + l = getargs(x, 1, 1, _("rev requires one argument")) + try: + # i18n: "rev" is a keyword + l = int(getstring(l[0], _("rev requires a number"))) + except (TypeError, ValueError): + # i18n: "rev" is a keyword + raise error.ParseError(_("rev expects a number")) + repo.changelog.node(l) # check that the rev exists + return subset & baseset([l]) + @predicate('revset(set)', safe=True, takeorder=True) def revsetpredicate(repo, subset, x, order): """Strictly interpret the content as a revset. diff -r 593f6359681d -r a322dbee4eda mercurial/revsetlang.py --- a/mercurial/revsetlang.py Thu Jan 10 14:57:01 2019 +0100 +++ b/mercurial/revsetlang.py Tue Jan 22 10:55:45 2019 -0800 @@ -585,7 +585,7 @@ def _formatargtype(c, arg): if c == 'd': - return 'rev(%d)' % int(arg) + return '_rev(%d)' % int(arg) elif c == 's': return _quote(arg) elif c == 'r': @@ -663,9 +663,9 @@ >>> formatspec(b'%r:: and %lr', b'10 or 11', (b"this()", b"that()")) '(10 or 11):: and ((this()) or (that()))' >>> formatspec(b'%d:: and not %d::', 10, 20) - 'rev(10):: and not rev(20)::' + '_rev(10):: and not _rev(20)::' >>> formatspec(b'%ld or %ld', [], [1]) - "_list('') or rev(1)" + "_list('') or _rev(1)" >>> formatspec(b'keyword(%s)', b'foo\\xe9') "keyword('foo\\\\xe9')" >>> b = lambda: b'default' diff -r 593f6359681d -r a322dbee4eda mercurial/templatekw.py --- a/mercurial/templatekw.py Thu Jan 10 14:57:01 2019 +0100 +++ b/mercurial/templatekw.py Tue Jan 22 10:55:45 2019 -0800 @@ -81,8 +81,15 @@ pdate, pdist, ptag = max(ptags) else: def key(x): - changessincetag = len(repo.revs('only(%d, %s)', - ctx.rev(), x[2][0])) + tag = x[2][0] + if ctx.rev() is None: + # only() doesn't support wdir + prevs = [c.rev() for c in ctx.parents()] + changes = repo.revs('only(%ld, %s)', prevs, tag) + changessincetag = len(changes) + 1 + else: + changes = repo.revs('only(%d, %s)', ctx.rev(), tag) + changessincetag = len(changes) # Smallest number of changes since tag wins. Date is # used as tiebreaker. return [-changessincetag, x[0]] diff -r 593f6359681d -r a322dbee4eda tests/test-inherit-mode.t diff -r 593f6359681d -r a322dbee4eda tests/test-narrow-share.t --- a/tests/test-narrow-share.t Thu Jan 10 14:57:01 2019 +0100 +++ b/tests/test-narrow-share.t Tue Jan 22 10:55:45 2019 -0800 @@ -166,7 +166,7 @@ R d7/f Make it look like a repo from before narrow+share was supported $ rm .hg/narrowspec.dirstate - $ hg st + $ hg ci -Am test abort: working copy's narrowspec is stale (run 'hg tracked --update-working-copy') [255] diff -r 593f6359681d -r a322dbee4eda tests/test-template-keywords.t --- a/tests/test-template-keywords.t Thu Jan 10 14:57:01 2019 +0100 +++ b/tests/test-template-keywords.t Tue Jan 22 10:55:45 2019 -0800 @@ -1056,6 +1056,41 @@ o 0: null+1,1 +Tags of working-directory parents (issue6055): + + $ hg update -q 3 + $ echo a > head3 + $ hg ci -qAm h3a + $ hg merge -q 2 + $ hg log -Gr'::wdir()' -T "{rev}: {latesttag % '{tag}+{distance},{changes} '}\n" + o 2147483647: at3+2,3 t3+2,3 + |\ + | @ 12: at3+1,1 t3+1,1 + | | + | o 3: at3+0,0 t3+0,0 + | | + @ | 2: t2+0,0 + |/ + o 1: t1+0,0 + | + o 0: null+1,1 + + + $ hg ci -m merge + $ hg log -Gr'::.' -T "{rev}: {latesttag % '{tag}+{distance},{changes} '}\n" + @ 13: at3+2,3 t3+2,3 + |\ + | o 12: at3+1,1 t3+1,1 + | | + | o 3: at3+0,0 t3+0,0 + | | + o | 2: t2+0,0 + |/ + o 1: t1+0,0 + | + o 0: null+1,1 + + $ cd .. Set up repository containing template fragments in commit metadata: