##// END OF EJS Templates
merge with stable
Augie Fackler -
r40496:4fe63b57 merge default
parent child Browse files
Show More
@@ -170,3 +170,5 b' e90130af47ce8dd53a3109aed9d15876b3e7dee8'
170 33ac6a72308a215e6086fbced347ec10aa963b0a 0 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
@@ -183,3 +183,5 b' e90130af47ce8dd53a3109aed9d15876b3e7dee8'
183 33ac6a72308a215e6086fbced347ec10aa963b0a 4.7
183 33ac6a72308a215e6086fbced347ec10aa963b0a 4.7
184 ede3bf31fe63677fdf5bd8db687977d4e3d792ed 4.7.1
184 ede3bf31fe63677fdf5bd8db687977d4e3d792ed 4.7.1
185 5405cb1a79010ac50c58cd84e6f50c4556bf2a4c 4.7.2
185 5405cb1a79010ac50c58cd84e6f50c4556bf2a4c 4.7.2
186 956ec6f1320df26f3133ec40f3de866ea0695fd7 4.8rc0
187 a91a2837150bdcb27ae76b3646e6c93cd6a15904 4.8
@@ -9,11 +9,6 b' import argparse'
9 import re
9 import re
10 import subprocess
10 import subprocess
11
11
12 # Regenerate this list with
13 # hg export 'grep("\.\. [a-z]+::")' | grep '^\.\.' | \
14 # sed 's/.. //;s/::.*//' | sort -u
15 rnsections = ["api", "bc", "container", "feature", "fix", "note", "perf"]
16
17 rules = {
12 rules = {
18 # keep
13 # keep
19 r"\(issue": 100,
14 r"\(issue": 100,
@@ -26,27 +21,37 b' rules = {'
26 r"(mq|shelve|rebase):": 20,
21 r"(mq|shelve|rebase):": 20,
27 # newsy
22 # newsy
28 r": deprecate": 20,
23 r": deprecate": 20,
29 r"(option|feature|command|support)": 10,
24 r"( ability|command|feature|option|support)": 10,
25 # experimental
26 r"hg-experimental": 20,
27 r"(from|graduate).*experimental": 15,
28 r"(hide|mark).*experimental": -10,
30 # bug-like?
29 # bug-like?
31 r"(fix|don't break|improve)": 7,
30 r"(fix|don't break|improve)": 7,
31 r"(not|n't|avoid|fix|prevent).*crash": 10,
32 # boring stuff, bump down
32 # boring stuff, bump down
33 r"^contrib": -5,
33 r"^contrib": -5,
34 r"debug": -5,
34 r"debug": -5,
35 r"help": -5,
35 r"help": -5,
36 r"(doc|bundle2|obsolete|obsmarker|rpm|setup|debug\S+:)": -15,
36 r"(doc|metavar|bundle2|obsolete|obsmarker|rpm|setup|debug\S+:)": -15,
37 r"(check-code|check-commit|import-checker)": -20,
37 r"(check-code|check-commit|check-config|import-checker)": -20,
38 r"(flake8|lintian|pyflakes|pylint)": -20,
38 # cleanups and refactoring
39 # cleanups and refactoring
39 r"(cleanup|whitespace|nesting|indent|spelling|comment)": -20,
40 r"(cleanup|white ?space|spelling|quoting)": -20,
40 r"(typo|hint|note|style:|correct doc)": -20,
41 r"(flatten|dedent|indent|nesting|unnest)": -20,
42 r"(typo|hint|note|comment|TODO|FIXME)": -20,
43 r"(style:|convention|one-?liner)": -20,
41 r"_": -10,
44 r"_": -10,
42 r"(argument|absolute_import|attribute|assignment|mutable)": -15,
45 r"(argument|absolute_import|attribute|assignment|mutable)": -15,
43 r"(unused|useless|unnecessary|duplicate|deprecated|scope|True|False)": -10,
46 r"(scope|True|False)": -10,
47 r"(unused|useless|unnecessary|superfluous|duplicate|deprecated)": -10,
44 r"(redundant|pointless|confusing|uninitialized|meaningless|dead)": -10,
48 r"(redundant|pointless|confusing|uninitialized|meaningless|dead)": -10,
45 r": (drop|remove|inherit|rename|simplify|naming|inline)": -10,
49 r": (drop|remove|delete|rip out)": -10,
46 r"(docstring|document .* method)": -20,
50 r": (inherit|rename|simplify|naming|inline)": -10,
47 r"(factor|extract|prepare|split|replace| import)": -20,
51 r"(correct doc|docstring|document .* method)": -20,
48 r": add.*(function|method|implementation|test|example)": -10,
52 r"(abstract|factor|extract|prepare|split|replace| import)": -20,
49 r": (move|extract) .* (to|into|from)": -20,
53 r": add.*(function|method|implementation|example)": -10,
54 r": (move|extract) .* (to|into|from|out of)": -20,
50 r": implement ": -5,
55 r": implement ": -5,
51 r": use .* implementation": -20,
56 r": use .* implementation": -20,
52 r"\S\S\S+\.\S\S\S\S+": -5,
57 r"\S\S\S+\.\S\S\S\S+": -5,
@@ -55,15 +60,20 b' rules = {'
55 # dumb keywords
60 # dumb keywords
56 r"\S+/\S+:": -10,
61 r"\S+/\S+:": -10,
57 r"\S+\.\S+:": -10,
62 r"\S+\.\S+:": -10,
63 # python compatibility
64 r"[Pp]y(|thon) ?[23]": -20,
65 r"pycompat": -20,
66 r"(coerce|convert|encode) .*to (byte|sys|)(s|str|string)": -20,
67 # tests
68 r"^test(|s|ing|runner|-\S+):": -20,
69 r"^(f|hghave|run-tests):": -20,
70 r"add.* tests?": -20,
71 r"(buildbot|fuzz|mock|ratchet)": -10,
58 # drop
72 # drop
59 r"^i18n-": -50,
73 r"^i18n-": -50,
60 r"^i18n:.*(hint|comment)": -50,
74 r"^i18n:.*(hint|comment)": -50,
61 r"perf:": -50,
75 r"perf:": -50,
62 r"check-code:": -50,
63 r"Added.*for changeset": -50,
76 r"Added.*for changeset": -50,
64 r"tests?:": -50,
65 r"test-": -50,
66 r"add.* tests": -50,
67 r"^_": -50,
77 r"^_": -50,
68 }
78 }
69
79
@@ -72,9 +82,9 b' commits = []'
72
82
73 groupings = [
83 groupings = [
74 (r"util|parsers|repo|ctx|context|revlog|filelog|alias|cmdutil", "core"),
84 (r"util|parsers|repo|ctx|context|revlog|filelog|alias|cmdutil", "core"),
75 (r"revset|templater|ui|dirstate|hook|i18n|transaction|wire", "core"),
85 (r"revset|template|ui|dirstate|hook|i18n|transaction|wire|vfs", "core"),
76 (r"color|pager", "core"),
86 (r"dispatch|exchange|localrepo|streamclone|color|pager", "core"),
77 (r"hgweb|paper|coal|gitweb", "hgweb"),
87 (r"hgweb|paper|coal|gitweb|monoblue|spartan", "hgweb"),
78 (r"pull|push|revert|resolve|annotate|bookmark|branch|clone", "commands"),
88 (r"pull|push|revert|resolve|annotate|bookmark|branch|clone", "commands"),
79 (r"commands|commit|config|files|graft|import|log|merge|patch", "commands"),
89 (r"commands|commit|config|files|graft|import|log|merge|patch", "commands"),
80 (r"phases|status|summary|amend|tag|help|verify", "commands"),
90 (r"phases|status|summary|amend|tag|help|verify", "commands"),
@@ -83,12 +93,12 b' groupings = ['
83 ]
93 ]
84
94
85 def main():
95 def main():
86 ap = argparse.ArgumentParser()
96 desc = "example: %(prog)s 4.7.2 --stoprev 4.8rc0"
97 ap = argparse.ArgumentParser(description=desc)
87 ap.add_argument(
98 ap.add_argument(
88 "startrev",
99 "startrev",
89 metavar="REV",
100 metavar="REV",
90 type=str,
101 type=str,
91 nargs=1,
92 help=(
102 help=(
93 "Starting revision for the release notes. This revision "
103 "Starting revision for the release notes. This revision "
94 "won't be included, but later revisions will."
104 "won't be included, but later revisions will."
@@ -99,7 +109,6 b' def main():'
99 metavar="REV",
109 metavar="REV",
100 type=str,
110 type=str,
101 default="@",
111 default="@",
102 nargs=1,
103 help=(
112 help=(
104 "Stop revision for release notes. This revision will be included,"
113 "Stop revision for release notes. This revision will be included,"
105 " but no later revisions will. This revision needs to be "
114 " but no later revisions will. This revision needs to be "
@@ -114,7 +123,7 b' def main():'
114 "extensions.releasenotes=",
123 "extensions.releasenotes=",
115 "releasenotes",
124 "releasenotes",
116 "-r",
125 "-r",
117 "%s::%s" % (args.startrev[0], args.stoprev[0]),
126 "only(%s, %s)" % (args.stoprev, args.startrev),
118 ]
127 ]
119 ).decode("utf-8")
128 ).decode("utf-8")
120 # Find all release notes from un-relnotes-flagged commits.
129 # Find all release notes from un-relnotes-flagged commits.
@@ -124,8 +133,7 b' def main():'
124 "hg",
133 "hg",
125 "log",
134 "log",
126 "-r",
135 "-r",
127 r'%s::%s - merge() - grep("\n\.\. (%s)::")'
136 "only(%s, %s) - merge()" % (args.stoprev, args.startrev),
128 % (args.startrev[0], args.stoprev[0], "|".join(rnsections)),
129 "-T",
137 "-T",
130 r"{desc|firstline}\n",
138 r"{desc|firstline}\n",
131 ]
139 ]
@@ -167,12 +175,14 b' def main():'
167 for d in sorted(groups[g]):
175 for d in sorted(groups[g]):
168 print(" * %s" % d)
176 print(" * %s" % d)
169
177
170 print("\n=== BC ===\n")
178 if bcs:
179 print("\n=== Behavior Changes ===\n")
171
180
172 for d in sorted(bcs):
181 for d in sorted(bcs):
173 print(" * %s" % d)
182 print(" * %s" % d)
174
183
175 print("\n=== API Changes ===\n")
184 if apis:
185 print("\n=== Internal API Changes ===\n")
176
186
177 for d in sorted(apis):
187 for d in sorted(apis):
178 print(" * %s" % d)
188 print(" * %s" % d)
@@ -157,7 +157,8 b' def fix(ui, repo, *pats, **opts):'
157 # Don't waste memory/time passing unchanged content back, but
157 # Don't waste memory/time passing unchanged content back, but
158 # produce one result per item either way.
158 # produce one result per item either way.
159 yield (rev, path, newdata if newdata != olddata else None)
159 yield (rev, path, newdata if newdata != olddata else None)
160 results = worker.worker(ui, 1.0, getfixes, tuple(), workqueue)
160 results = worker.worker(ui, 1.0, getfixes, tuple(), workqueue,
161 threadsafe=False)
161
162
162 # We have to hold on to the data for each successor revision in memory
163 # We have to hold on to the data for each successor revision in memory
163 # until all its parents are committed. We ensure this by committing and
164 # until all its parents are committed. We ensure this by committing and
@@ -561,7 +561,7 b' class sqlitefilestore(object):'
561 def emitrevisions(self, nodes, nodesorder=None, revisiondata=False,
561 def emitrevisions(self, nodes, nodesorder=None, revisiondata=False,
562 assumehaveparentrevisions=False,
562 assumehaveparentrevisions=False,
563 deltamode=repository.CG_DELTAMODE_STD):
563 deltamode=repository.CG_DELTAMODE_STD):
564 if nodesorder not in ('nodes', 'storage', None):
564 if nodesorder not in ('nodes', 'storage', 'linear', None):
565 raise error.ProgrammingError('unhandled value for nodesorder: %s' %
565 raise error.ProgrammingError('unhandled value for nodesorder: %s' %
566 nodesorder)
566 nodesorder)
567
567
@@ -1691,8 +1691,8 b' def addpartbundlestream2(bundler, repo, '
1691 includepats = kwargs.get(r'includepats')
1691 includepats = kwargs.get(r'includepats')
1692 excludepats = kwargs.get(r'excludepats')
1692 excludepats = kwargs.get(r'excludepats')
1693
1693
1694 narrowstream = repo.ui.configbool('experimental.server',
1694 narrowstream = repo.ui.configbool('experimental',
1695 'stream-narrow-clones')
1695 'server.stream-narrow-clones')
1696
1696
1697 if (includepats or excludepats) and not narrowstream:
1697 if (includepats or excludepats) and not narrowstream:
1698 raise error.Abort(_('server does not support narrow stream clones'))
1698 raise error.Abort(_('server does not support narrow stream clones'))
@@ -2317,7 +2317,7 b' rustlazyancestorsObject *rustlazyancesto'
2317 /* to pass index_get_parents() */
2317 /* to pass index_get_parents() */
2318 int (*)(indexObject *, Py_ssize_t, int*, int),
2318 int (*)(indexObject *, Py_ssize_t, int*, int),
2319 /* intrevs vector */
2319 /* intrevs vector */
2320 int initrevslen, long *initrevs,
2320 Py_ssize_t initrevslen, long *initrevs,
2321 long stoprev,
2321 long stoprev,
2322 int inclusive);
2322 int inclusive);
2323 void rustlazyancestors_drop(rustlazyancestorsObject *self);
2323 void rustlazyancestors_drop(rustlazyancestorsObject *self);
@@ -613,7 +613,7 b" coreconfigitem('experimental', 'server.f"
613 coreconfigitem('experimental', 'server.manifestdata.recommended-batch-size',
613 coreconfigitem('experimental', 'server.manifestdata.recommended-batch-size',
614 default=100000,
614 default=100000,
615 )
615 )
616 coreconfigitem('experimental.server', 'stream-narrow-clones',
616 coreconfigitem('experimental', 'server.stream-narrow-clones',
617 default=False,
617 default=False,
618 )
618 )
619 coreconfigitem('experimental', 'single-head-per-branch',
619 coreconfigitem('experimental', 'single-head-per-branch',
@@ -934,7 +934,7 b" coreconfigitem('profiling', 'statformat'"
934 default='hotpath',
934 default='hotpath',
935 )
935 )
936 coreconfigitem('profiling', 'time-track',
936 coreconfigitem('profiling', 'time-track',
937 default='real',
937 default=dynamicdefault,
938 )
938 )
939 coreconfigitem('profiling', 'type',
939 coreconfigitem('profiling', 'type',
940 default='stat',
940 default='stat',
@@ -219,6 +219,7 b' def _committedforwardcopies(a, b, match)'
219 def _forwardcopies(a, b, match=None):
219 def _forwardcopies(a, b, match=None):
220 """find {dst@b: src@a} copy mapping where a is an ancestor of b"""
220 """find {dst@b: src@a} copy mapping where a is an ancestor of b"""
221
221
222 match = a.repo().narrowmatch(match)
222 # check for working copy
223 # check for working copy
223 if b.rev() is None:
224 if b.rev() is None:
224 if a == b.p1():
225 if a == b.p1():
@@ -510,8 +511,9 b' def _fullcopytracing(repo, c1, c2, base)'
510 # unmatched file from topological common ancestors (no DAG rotation)
511 # unmatched file from topological common ancestors (no DAG rotation)
511 # need to recompute this for directory move handling when grafting
512 # need to recompute this for directory move handling when grafting
512 mta = tca.manifest()
513 mta = tca.manifest()
513 u1u, u2u = _computenonoverlap(repo, c1, c2, m1.filesnotin(mta),
514 u1u, u2u = _computenonoverlap(repo, c1, c2,
514 m2.filesnotin(mta),
515 m1.filesnotin(mta, repo.narrowmatch()),
516 m2.filesnotin(mta, repo.narrowmatch()),
515 baselabel='topological common ancestor')
517 baselabel='topological common ancestor')
516
518
517 for f in u1u:
519 for f in u1u:
@@ -725,7 +725,7 b' class curseschunkselector(object):'
725 nextitem = currentitem
725 nextitem = currentitem
726 else:
726 else:
727 parent = nextitem.parentitem()
727 parent = nextitem.parentitem()
728 if parent.folded:
728 if parent is not None and parent.folded:
729 self.togglefolded(parent)
729 self.togglefolded(parent)
730
730
731 self.currentselecteditem = nextitem
731 self.currentselecteditem = nextitem
@@ -25,7 +25,7 b' int strcpy_s(char *d, size_t n, const ch'
25
25
26 #define _tcscpy_s strcpy_s
26 #define _tcscpy_s strcpy_s
27 #define _tcscat_s strcat_s
27 #define _tcscat_s strcat_s
28 #define _countof(array) (sizeof(array)/sizeof(array[0]))
28 #define _countof(array) (sizeof(array) / sizeof(array[0]))
29 #endif
29 #endif
30
30
31 static TCHAR pyscript[MAX_PATH + 10];
31 static TCHAR pyscript[MAX_PATH + 10];
@@ -43,7 +43,7 b' int _tmain(int argc, TCHAR *argv[])'
43 HANDLE hfind;
43 HANDLE hfind;
44 const char *err;
44 const char *err;
45 HMODULE pydll;
45 HMODULE pydll;
46 void(__cdecl * Py_SetPythonHome)(TCHAR *home);
46 void(__cdecl * Py_SetPythonHome)(TCHAR * home);
47 int(__cdecl * Py_Main)(int argc, TCHAR *argv[]);
47 int(__cdecl * Py_Main)(int argc, TCHAR *argv[]);
48
48
49 if (GetModuleFileName(NULL, pyscript, _countof(pyscript)) == 0) {
49 if (GetModuleFileName(NULL, pyscript, _countof(pyscript)) == 0) {
@@ -86,11 +86,12 b' int _tmain(int argc, TCHAR *argv[])'
86 scenario, so let's load python dll from this dir. */
86 scenario, so let's load python dll from this dir. */
87 FindClose(hfind);
87 FindClose(hfind);
88 _tcscpy_s(pydllfile, _countof(pydllfile), pyhome);
88 _tcscpy_s(pydllfile, _countof(pydllfile), pyhome);
89 _tcscat_s(pydllfile, _countof(pydllfile), _T("\\") _T(HGPYTHONLIB)
89 _tcscat_s(pydllfile, _countof(pydllfile),
90 _T(".dll"));
90 _T("\\") _T(HGPYTHONLIB) _T(".dll"));
91 pydll = LoadLibrary(pydllfile);
91 pydll = LoadLibrary(pydllfile);
92 if (pydll == NULL) {
92 if (pydll == NULL) {
93 err = "failed to load private Python DLL " HGPYTHONLIB ".dll";
93 err = "failed to load private Python DLL " HGPYTHONLIB
94 ".dll";
94 goto bail;
95 goto bail;
95 }
96 }
96 Py_SetPythonHome =
97 Py_SetPythonHome =
@@ -9,6 +9,7 b' from __future__ import absolute_import'
9
9
10 import itertools
10 import itertools
11 import os
11 import os
12 import re
12 import textwrap
13 import textwrap
13
14
14 from .i18n import (
15 from .i18n import (
@@ -30,6 +31,7 b' from . import ('
30 templatefilters,
31 templatefilters,
31 templatefuncs,
32 templatefuncs,
32 templatekw,
33 templatekw,
34 ui as uimod,
33 util,
35 util,
34 )
36 )
35 from .hgweb import (
37 from .hgweb import (
@@ -431,6 +433,16 b" addtopicsymbols('templates', '.. functio"
431 addtopicsymbols('hgweb', '.. webcommandsmarker', webcommands.commands,
433 addtopicsymbols('hgweb', '.. webcommandsmarker', webcommands.commands,
432 dedent=True)
434 dedent=True)
433
435
436 def inserttweakrc(ui, topic, doc):
437 marker = '.. tweakdefaultsmarker'
438 repl = uimod.tweakrc
439 def sub(m):
440 lines = [m.group(1) + s for s in repl.splitlines()]
441 return '\n'.join(lines)
442 return re.sub(br'( *)%s' % re.escape(marker), sub, doc)
443
444 addtopichook('config', inserttweakrc)
445
434 def help_(ui, commands, name, unknowncmd=False, full=True, subtopic=None,
446 def help_(ui, commands, name, unknowncmd=False, full=True, subtopic=None,
435 **opts):
447 **opts):
436 '''
448 '''
@@ -1715,7 +1715,7 b' statistical text report generated from t'
1715
1715
1716 ``time-track``
1716 ``time-track``
1717 Control if the stat profiler track ``cpu`` or ``real`` time.
1717 Control if the stat profiler track ``cpu`` or ``real`` time.
1718 (default: ``cpu``)
1718 (default: ``cpu`` on Windows, otherwise ``real``)
1719
1719
1720 ``limit``
1720 ``limit``
1721 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
1721 Number of lines to show. Specific to the ``ls`` instrumenting profiler.
@@ -2370,6 +2370,10 b' User interface controls.'
2370 effect if ``HGPLAIN`` is set or ``HGPLAINEXCEPT`` is set and does
2370 effect if ``HGPLAIN`` is set or ``HGPLAINEXCEPT`` is set and does
2371 not include ``tweakdefaults``. (default: False)
2371 not include ``tweakdefaults``. (default: False)
2372
2372
2373 It currently means::
2374
2375 .. tweakdefaultsmarker
2376
2373 ``username``
2377 ``username``
2374 The committer of a changeset created when running "commit".
2378 The committer of a changeset created when running "commit".
2375 Typically a person's name and email address, e.g. ``Fred Widget
2379 Typically a person's name and email address, e.g. ``Fred Widget
@@ -405,11 +405,15 b' class httppeer(wireprotov1peer.wirepeer)'
405 return True
405 return True
406
406
407 def close(self):
407 def close(self):
408 try:
409 reqs, sent, recv = (self._urlopener.requestscount,
410 self._urlopener.sentbytescount,
411 self._urlopener.receivedbytescount)
412 except AttributeError:
413 return
408 self.ui.note(_('(sent %d HTTP requests and %d bytes; '
414 self.ui.note(_('(sent %d HTTP requests and %d bytes; '
409 'received %d bytes in responses)\n') %
415 'received %d bytes in responses)\n') %
410 (self._urlopener.requestscount,
416 (reqs, sent, recv))
411 self._urlopener.sentbytescount,
412 self._urlopener.receivedbytescount))
413
417
414 # End of ipeerconnection interface.
418 # End of ipeerconnection interface.
415
419
@@ -442,7 +442,10 b' class HTTPResponse(httplib.HTTPResponse)'
442 data = self._raw_read(amt)
442 data = self._raw_read(amt)
443
443
444 self.receivedbytescount += len(data)
444 self.receivedbytescount += len(data)
445 self._connection.receivedbytescount += len(data)
445 try:
446 self._connection.receivedbytescount += len(data)
447 except AttributeError:
448 pass
446 try:
449 try:
447 self._handler.parent.receivedbytescount += len(data)
450 self._handler.parent.receivedbytescount += len(data)
448 except AttributeError:
451 except AttributeError:
@@ -105,7 +105,7 b' def activepath(repo, remote):'
105 # use the string given to us
105 # use the string given to us
106 rpath = remote
106 rpath = remote
107 if local:
107 if local:
108 rpath = remote._repo.root
108 rpath = util.pconvert(remote._repo.root)
109 elif not isinstance(remote, bytes):
109 elif not isinstance(remote, bytes):
110 rpath = remote._url
110 rpath = remote._url
111
111
@@ -113,6 +113,11 b' def activepath(repo, remote):'
113 for path, url in repo.ui.configitems('paths'):
113 for path, url in repo.ui.configitems('paths'):
114 # remove auth info from user defined url
114 # remove auth info from user defined url
115 noauthurl = util.removeauth(url)
115 noauthurl = util.removeauth(url)
116
117 # Standardize on unix style paths, otherwise some {remotenames} end up
118 # being an absolute path on Windows.
119 url = util.pconvert(bytes(url))
120 noauthurl = util.pconvert(noauthurl)
116 if url == rpath or noauthurl == rpath:
121 if url == rpath or noauthurl == rpath:
117 rpath = path
122 rpath = path
118 break
123 break
@@ -129,11 +129,13 b' HIDEABLE_FLAG = 32 # Phases that are hid'
129 # record phase index
129 # record phase index
130 public, draft, secret = range(3)
130 public, draft, secret = range(3)
131 internal = INTERNAL_FLAG | HIDEABLE_FLAG
131 internal = INTERNAL_FLAG | HIDEABLE_FLAG
132 archived = HIDEABLE_FLAG
132 allphases = range(internal + 1)
133 allphases = range(internal + 1)
133 trackedphases = allphases[1:]
134 trackedphases = allphases[1:]
134 # record phase names
135 # record phase names
135 phasenames = [None] * len(allphases)
136 phasenames = [None] * len(allphases)
136 phasenames[:3] = ['public', 'draft', 'secret']
137 phasenames[:3] = ['public', 'draft', 'secret']
138 phasenames[archived] = 'archived'
137 phasenames[internal] = 'internal'
139 phasenames[internal] = 'internal'
138 # record phase property
140 # record phase property
139 mutablephases = tuple(allphases[1:])
141 mutablephases = tuple(allphases[1:])
@@ -446,8 +448,9 b' class phasecache(object):'
446 def _retractboundary(self, repo, tr, targetphase, nodes):
448 def _retractboundary(self, repo, tr, targetphase, nodes):
447 # Be careful to preserve shallow-copied values: do not update
449 # Be careful to preserve shallow-copied values: do not update
448 # phaseroots values, replace them.
450 # phaseroots values, replace them.
449 if targetphase == internal and not supportinternal(repo):
451 if targetphase in (archived, internal) and not supportinternal(repo):
450 msg = 'this repository does not support the internal phase'
452 name = phasenames[targetphase]
453 msg = 'this repository does not support the %s phase' % name
451 raise error.ProgrammingError(msg)
454 raise error.ProgrammingError(msg)
452
455
453 repo = repo.unfiltered()
456 repo = repo.unfiltered()
@@ -101,7 +101,8 b' def statprofile(ui, fp):'
101 else:
101 else:
102 ui.warn(_("invalid sampling frequency '%s' - ignoring\n") % freq)
102 ui.warn(_("invalid sampling frequency '%s' - ignoring\n") % freq)
103
103
104 track = ui.config('profiling', 'time-track')
104 track = ui.config('profiling', 'time-track',
105 pycompat.iswindows and 'cpu' or 'real')
105 statprof.start(mechanism='thread', track=track)
106 statprof.start(mechanism='thread', track=track)
106
107
107 try:
108 try:
@@ -2207,7 +2207,7 b' class revlog(object):'
2207 def emitrevisions(self, nodes, nodesorder=None, revisiondata=False,
2207 def emitrevisions(self, nodes, nodesorder=None, revisiondata=False,
2208 assumehaveparentrevisions=False,
2208 assumehaveparentrevisions=False,
2209 deltamode=repository.CG_DELTAMODE_STD):
2209 deltamode=repository.CG_DELTAMODE_STD):
2210 if nodesorder not in ('nodes', 'storage', None):
2210 if nodesorder not in ('nodes', 'storage', 'linear', None):
2211 raise error.ProgrammingError('unhandled value for nodesorder: %s' %
2211 raise error.ProgrammingError('unhandled value for nodesorder: %s' %
2212 nodesorder)
2212 nodesorder)
2213
2213
@@ -593,7 +593,10 b' def _candidategroups(revlog, textlen, p1'
593 group = []
593 group = []
594 for rev in temptative:
594 for rev in temptative:
595 # skip over empty delta (no need to include them in a chain)
595 # skip over empty delta (no need to include them in a chain)
596 while not (rev == nullrev or rev in tested or deltalength(rev)):
596 while (revlog._generaldelta
597 and not (rev == nullrev
598 or rev in tested
599 or deltalength(rev))):
597 tested.add(rev)
600 tested.add(rev)
598 rev = deltaparent(rev)
601 rev = deltaparent(rev)
599 # filter out revision we tested already
602 # filter out revision we tested already
@@ -646,6 +649,11 b' def _refinedgroups(revlog, p1, p2, cache'
646 if good is not None:
649 if good is not None:
647 break
650 break
648
651
652 # If sparse revlog is enabled, we can try to refine the available deltas
653 if not revlog._sparserevlog:
654 yield None
655 return
656
649 # if we have a refinable value, try to refine it
657 # if we have a refinable value, try to refine it
650 if good is not None and good not in (p1, p2) and revlog.issnapshot(good):
658 if good is not None and good not in (p1, p2) and revlog.issnapshot(good):
651 # refine snapshot down
659 # refine snapshot down
@@ -340,11 +340,11 b' def emitrevisions(store, nodes, nodesord'
340
340
341 if nodesorder == 'nodes':
341 if nodesorder == 'nodes':
342 revs = [frev(n) for n in nodes]
342 revs = [frev(n) for n in nodes]
343 elif nodesorder == 'storage':
343 elif nodesorder == 'linear':
344 revs = sorted(frev(n) for n in nodes)
345 else:
346 revs = set(frev(n) for n in nodes)
344 revs = set(frev(n) for n in nodes)
347 revs = dagop.linearize(revs, store.parentrevs)
345 revs = dagop.linearize(revs, store.parentrevs)
346 else: # storage and default
347 revs = sorted(frev(n) for n in nodes)
348
348
349 prevrev = None
349 prevrev = None
350
350
@@ -60,15 +60,16 b' impl Graph for Index {'
60 pub extern "C" fn rustlazyancestors_init(
60 pub extern "C" fn rustlazyancestors_init(
61 index: IndexPtr,
61 index: IndexPtr,
62 parents: IndexParentsFn,
62 parents: IndexParentsFn,
63 initrevslen: usize,
63 initrevslen: ssize_t,
64 initrevs: *mut c_long,
64 initrevs: *mut c_long,
65 stoprev: c_long,
65 stoprev: c_long,
66 inclusive: c_int,
66 inclusive: c_int,
67 ) -> *mut AncestorsIterator<Index> {
67 ) -> *mut AncestorsIterator<Index> {
68 assert!(initrevslen >= 0);
68 unsafe {
69 unsafe {
69 raw_init(
70 raw_init(
70 Index::new(index, parents),
71 Index::new(index, parents),
71 initrevslen,
72 initrevslen as usize,
72 initrevs,
73 initrevs,
73 stoprev,
74 stoprev,
74 inclusive,
75 inclusive,
@@ -168,6 +168,9 b' from distutils.errors import ('
168 from distutils.sysconfig import get_python_inc, get_config_var
168 from distutils.sysconfig import get_python_inc, get_config_var
169 from distutils.version import StrictVersion
169 from distutils.version import StrictVersion
170
170
171 # Explain to distutils.StrictVersion how our release candidates are versionned
172 StrictVersion.version_re = re.compile(r'^(\d+)\.(\d+)(\.(\d+))?-?(rc(\d+))?$')
173
171 def write_if_changed(path, content):
174 def write_if_changed(path, content):
172 """Write content to a file iff the content hasn't changed."""
175 """Write content to a file iff the content hasn't changed."""
173 if os.path.exists(path):
176 if os.path.exists(path):
@@ -791,10 +791,14 b' def has_repofncache():'
791 def has_sqlite():
791 def has_sqlite():
792 try:
792 try:
793 import sqlite3
793 import sqlite3
794 sqlite3.sqlite_version
794 version = sqlite3.sqlite_version_info
795 except ImportError:
795 except ImportError:
796 return False
796 return False
797
797
798 if version < (3, 8, 3):
799 # WITH clause not supported
800 return False
801
798 return matchoutput('sqlite3 -version', b'^3\.\d+')
802 return matchoutput('sqlite3 -version', b'^3\.\d+')
799
803
800 @check('vcr', 'vcr http mocking library')
804 @check('vcr', 'vcr http mocking library')
@@ -132,28 +132,34 b''
132 * bookmark: introduce a 'bookmarks' part
132 * bookmark: introduce a 'bookmarks' part
133 * bookmark: introduce in advance a variant of the exchange test
133 * bookmark: introduce in advance a variant of the exchange test
134 * bookmark: run 'pushkey' hooks after bookmark move, not 'prepushkey'
134 * bookmark: run 'pushkey' hooks after bookmark move, not 'prepushkey'
135 * bookmark: use the 'bookmarks' bundle2 part to push bookmark update (Bts:issue5165)
135 * bookmarks: add bookmarks to hidden revs if directaccess config is set
136 * bookmarks: add bookmarks to hidden revs if directaccess config is set
136 * bookmarks: calculate visibility exceptions only once
137 * bookmarks: calculate visibility exceptions only once
137 * bookmarks: display the obsfate of hidden revision we create a bookmark on
138 * bookmarks: display the obsfate of hidden revision we create a bookmark on
138 * bookmarks: fix pushkey compatibility mode (Bts:issue5777)
139 * bookmarks: fix pushkey compatibility mode (Bts:issue5777)
139 * bookmarks: use context managers for lock and transaction in update()
140 * bookmarks: use context managers for lock and transaction in update()
140 * bookmarks: use context managers for locks and transaction in pushbookmark()
141 * bookmarks: use context managers for locks and transaction in pushbookmark()
142 * branch: add a --rev flag to change branch name of given revisions
141 * branch: allow changing branch name to existing name if possible
143 * branch: allow changing branch name to existing name if possible
142 * clone: add support for storing remotenames while cloning
144 * clone: add support for storing remotenames while cloning
143 * clone: use utility function to write hgrc
145 * clone: use utility function to write hgrc
144 * clonebundle: make it possible to retrieve the initial bundle through largefile
146 * clonebundle: make it possible to retrieve the initial bundle through largefile
147 * commands: use the new API to access hidden changesets in various commands
145 * commandserver: restore cwd in case of exception
148 * commandserver: restore cwd in case of exception
146 * commandserver: unblock SIGCHLD
149 * commandserver: unblock SIGCHLD
150 * fileset: do not crash by unary negate operation
147 * help: deprecate ui.slash in favor of slashpath template filter (Bts:issue5572)
151 * help: deprecate ui.slash in favor of slashpath template filter (Bts:issue5572)
148 * log: allow matchfn to be non-null even if both --patch/--stat are off
152 * log: allow matchfn to be non-null even if both --patch/--stat are off
149 * log: build follow-log filematcher at once
153 * log: build follow-log filematcher at once
150 * log: don't expand aliases in revset built from command options
154 * log: don't expand aliases in revset built from command options
155 * log: follow file history across copies even with -rREV (BC) (Bts:issue4959)
151 * log: make "slowpath" condition slightly more readable
156 * log: make "slowpath" condition slightly more readable
152 * log: make opt2revset table a module constant
157 * log: make opt2revset table a module constant
153 * log: merge getlogrevs() and getgraphlogrevs()
158 * log: merge getlogrevs() and getgraphlogrevs()
154 * log: remove temporary variable 'date' used only once
159 * log: remove temporary variable 'date' used only once
155 * log: resolve --follow thoroughly in getlogrevs()
160 * log: resolve --follow thoroughly in getlogrevs()
156 * log: resolve --follow with -rREV in cmdutil.getlogrevs()
161 * log: resolve --follow with -rREV in cmdutil.getlogrevs()
162 * log: rewrite --follow-first -rREV like --follow for consistency (BC)
157 * log: simplify 'x or ancestors(x)' expression
163 * log: simplify 'x or ancestors(x)' expression
158 * log: translate column labels at once (Bts:issue5750)
164 * log: translate column labels at once (Bts:issue5750)
159 * log: use revsetlang.formatspec() thoroughly
165 * log: use revsetlang.formatspec() thoroughly
@@ -172,10 +178,23 b''
172 * pull: store binary node in pullop.remotebookmarks
178 * pull: store binary node in pullop.remotebookmarks
173 * push: include a 'check:bookmarks' part when possible
179 * push: include a 'check:bookmarks' part when possible
174 * push: restrict common discovery to the pushed set
180 * push: restrict common discovery to the pushed set
181 * revert: do not reverse hunks in interactive when REV is not parent (Bts:issue5096)
175 * revert: support reverting to hidden cset if directaccess config is set
182 * revert: support reverting to hidden cset if directaccess config is set
176
183
177 === core ===
184 === core ===
185 * color: respect HGPLAINEXCEPT=color to allow colors while scripting (Bts:issue5749)
186 * dirstate: add explicit methods for querying directories (API)
187 * dispatch: abort if early boolean options can't be parsed
188 * dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
189 * dispatch: add option to not strip command args parsed by _earlygetopt()
190 * dispatch: alias --repo to --repository while parsing early options
191 * dispatch: fix early parsing of short option with value like -R=foo
192 * dispatch: handle IOError when writing to stderr
193 * dispatch: stop parsing of early boolean option at "--"
194 * dispatch: verify result of early command parsing
195 * exchange: return bundle info from getbundlechunks() (API)
178 * filelog: add the ability to report the user facing name
196 * filelog: add the ability to report the user facing name
197 * localrepo: specify optional callback parameter to pathauditor as a keyword
179 * revlog: choose between ifh and dfh once for all
198 * revlog: choose between ifh and dfh once for all
180 * revlog: don't use slicing to return parents
199 * revlog: don't use slicing to return parents
181 * revlog: group delta computation methods under _deltacomputer object
200 * revlog: group delta computation methods under _deltacomputer object
@@ -185,9 +204,21 b''
185 * revlog: separate diff computation from the collection of other info
204 * revlog: separate diff computation from the collection of other info
186 * revset: evaluate filesets against each revision for 'file()' (Bts:issue5778)
205 * revset: evaluate filesets against each revision for 'file()' (Bts:issue5778)
187 * revset: parse x^:: as (x^):: (Bts:issue5764)
206 * revset: parse x^:: as (x^):: (Bts:issue5764)
207 * streamclone: add support for bundle2 based stream clone
208 * streamclone: add support for cloning non append-only file
209 * streamclone: also stream caches to the client
210 * streamclone: define first iteration of version 2 of stream format
211 * streamclone: move wire protocol status code from wireproto command
212 * streamclone: rework canperformstreamclone
213 * streamclone: tests phase exchange during stream clone
214 * streamclone: use readexactly when reading stream v2
215 * templater: fix crash by empty group expression
216 * templater: keep default resources per template engine (API)
188 * templater: look up symbols/resources as if they were separated (Bts:issue5699)
217 * templater: look up symbols/resources as if they were separated (Bts:issue5699)
189 * transaction: register summary callbacks only at start of transaction (BC)
218 * transaction: register summary callbacks only at start of transaction (BC)
190 * util: whitelist NTFS for hardlink creation (Bts:issue4580)
219 * util: whitelist NTFS for hardlink creation (Bts:issue4580)
220 * vfs: drop text mode flag (API)
221 * wireproto: drop support for reader interface from streamres (API)
191
222
192 === extensions ===
223 === extensions ===
193 * convert: restore the ability to use bzr < 2.6.0 (Bts:issue5733)
224 * convert: restore the ability to use bzr < 2.6.0 (Bts:issue5733)
@@ -195,7 +226,6 b''
195 * largefiles: add a 'debuglfput' command to put largefile into the store
226 * largefiles: add a 'debuglfput' command to put largefile into the store
196 * largefiles: add support for 'largefiles://' url scheme
227 * largefiles: add support for 'largefiles://' url scheme
197 * largefiles: allow to run 'debugupgraderepo' on repo with largefiles
228 * largefiles: allow to run 'debugupgraderepo' on repo with largefiles
198 * largefiles: convert EOL of hgrc before appending to bytes IO
199 * largefiles: explicitly set the source and sink types to 'hg' for lfconvert
229 * largefiles: explicitly set the source and sink types to 'hg' for lfconvert
200 * largefiles: modernize how capabilities are added to the wire protocol
230 * largefiles: modernize how capabilities are added to the wire protocol
201 * largefiles: pay attention to dropped standin files when updating largefiles
231 * largefiles: pay attention to dropped standin files when updating largefiles
@@ -208,6 +238,8 b''
208 * rebase: don't run IMM if running rebase in a transaction
238 * rebase: don't run IMM if running rebase in a transaction
209 * rebase: don't take out a dirstate guard for in-memory rebase
239 * rebase: don't take out a dirstate guard for in-memory rebase
210 * rebase: drop --style option
240 * rebase: drop --style option
241 * rebase: enable multidest by default
242 * rebase: exclude descendants of obsoletes w/o a successor in dest (Bts:issue5300)
211 * rebase: fix for hgsubversion
243 * rebase: fix for hgsubversion
212 * rebase: pass the wctx object (IMM or on-disk) to merge.update
244 * rebase: pass the wctx object (IMM or on-disk) to merge.update
213 * rebase: pass wctx to rebasenode()
245 * rebase: pass wctx to rebasenode()
@@ -224,21 +256,14 b''
224 === unsorted ===
256 === unsorted ===
225 * archive: add support to specify hidden revs if directaccess config is set
257 * archive: add support to specify hidden revs if directaccess config is set
226 * atomicupdate: add an experimental option to use atomictemp when updating
258 * atomicupdate: add an experimental option to use atomictemp when updating
259 * bundle2: don't use seekable bundle2 parts by default (Bts:issue5691)
227 * bundle: allow bundlerepo to support alternative manifest implementations
260 * bundle: allow bundlerepo to support alternative manifest implementations
228 * changelog: introduce a 'tiprev' method
261 * changelog: introduce a 'tiprev' method
229 * changelog: use 'tiprev()' in 'tip()'
262 * changelog: use 'tiprev()' in 'tip()'
230 * completion: add support for new "amend" command
263 * completion: add support for new "amend" command
264 * crecord: fix revert -ir '.^' crash caused by 3649c3f2cd
231 * debugssl: convert port number to int (Bts:issue5757)
265 * debugssl: convert port number to int (Bts:issue5757)
232 * diff: disable diff.noprefix option for diffstat (Bts:issue5759)
266 * diff: disable diff.noprefix option for diffstat (Bts:issue5759)
233 * dispatch: abort if early boolean options can't be parsed
234 * dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
235 * dispatch: add option to not strip command args parsed by _earlygetopt()
236 * dispatch: alias --repo to --repository while parsing early options
237 * dispatch: convert non-list option parsed by _earlygetopt() to string
238 * dispatch: fix early parsing of short option with value like -R=foo
239 * dispatch: handle IOError when writing to stderr
240 * dispatch: stop parsing of early boolean option at "--"
241 * dispatch: verify result of early command parsing
242 * evolution: make reporting of new unstable changesets optional
267 * evolution: make reporting of new unstable changesets optional
243 * extdata: abort if external command exits with non-zero status (BC)
268 * extdata: abort if external command exits with non-zero status (BC)
244 * fancyopts: add early-options parser compatible with getopt()
269 * fancyopts: add early-options parser compatible with getopt()
@@ -247,7 +272,6 b''
247 * httppeer: add support for tracing all http request made by the peer
272 * httppeer: add support for tracing all http request made by the peer
248 * identify: document -r. explicitly how to disable wdir scanning (Bts:issue5622)
273 * identify: document -r. explicitly how to disable wdir scanning (Bts:issue5622)
249 * lfs: register config options
274 * lfs: register config options
250 * localrepo: specify optional callback parameter to pathauditor as a keyword
251 * match: do not weirdly include explicit files excluded by -X option
275 * match: do not weirdly include explicit files excluded by -X option
252 * memfilectx: make changectx argument mandatory in constructor (API)
276 * memfilectx: make changectx argument mandatory in constructor (API)
253 * morestatus: don't crash with different drive letters for repo.root and CWD
277 * morestatus: don't crash with different drive letters for repo.root and CWD
@@ -256,36 +280,38 b''
256 * rewriteutil: use precheck() in uncommit and amend commands
280 * rewriteutil: use precheck() in uncommit and amend commands
257 * scmutil: don't try to delete origbackup symlinks to directories (Bts:issue5731)
281 * scmutil: don't try to delete origbackup symlinks to directories (Bts:issue5731)
258 * sshpeer: add support for request tracing
282 * sshpeer: add support for request tracing
259 * streamclone: add support for bundle2 based stream clone
260 * streamclone: add support for cloning non append-only file
261 * streamclone: also stream caches to the client
262 * streamclone: define first iteration of version 2 of stream format
263 * streamclone: move wire protocol status code from wireproto command
264 * streamclone: rework canperformstreamclone
265 * streamclone: tests phase exchange during stream clone
266 * streamclone: use readexactly when reading stream v2
267 * subrepo: add config option to reject any subrepo operations (SEC)
283 * subrepo: add config option to reject any subrepo operations (SEC)
268 * subrepo: disable git and svn subrepos by default (BC) (SEC)
284 * subrepo: disable git and svn subrepos by default (BC) (SEC)
269 * subrepo: extend config option to disable subrepos by type (SEC)
285 * subrepo: extend config option to disable subrepos by type (SEC)
270 * subrepo: handle 'C:' style paths on the command line (Bts:issue5770)
286 * subrepo: handle 'C:' style paths on the command line (Bts:issue5770)
271 * subrepo: use per-type config options to enable subrepos
287 * subrepo: use per-type config options to enable subrepos
272 * svnsubrepo: check if subrepo is missing when checking dirty state (Bts:issue5657)
288 * svnsubrepo: check if subrepo is missing when checking dirty state (Bts:issue5657)
289 * test-bookmarks-pushpull: stabilize for Windows
290 * test-run-tests: stabilize the test (Bts:issue5735)
273 * tr-summary: keep a weakref to the unfiltered repository
291 * tr-summary: keep a weakref to the unfiltered repository
274 * unamend: fix command summary line
292 * unamend: fix command summary line
275 * uncommit: unify functions _uncommitdirstate and _unamenddirstate to one
293 * uncommit: unify functions _uncommitdirstate and _unamenddirstate to one
294 * update: fix crash on bare update when directaccess is enabled
276 * update: support updating to hidden cset if directaccess config is set
295 * update: support updating to hidden cset if directaccess config is set
277
296
278 === BC ===
297 === Behavior Changes ===
279
298
280 * extdata: abort if external command exits with non-zero status (BC)
299 * extdata: abort if external command exits with non-zero status (BC)
281 * graphlog: add another graph node type, unstable, using character "*" (BC)
300 * graphlog: add another graph node type, unstable, using character "*" (BC)
282 * hgweb: drop support of browsers that don't understand <canvas> (BC)
301 * hgweb: drop support of browsers that don't understand <canvas> (BC)
283 * hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
302 * hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
284 * hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC)
303 * hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC)
304 * log: follow file history across copies even with -rREV (BC) (Bts:issue4959)
305 * log: rewrite --follow-first -rREV like --follow for consistency (BC)
285 * remove: print message for each file in verbose mode only while using '-A' (BC)
306 * remove: print message for each file in verbose mode only while using '-A' (BC)
286 * subrepo: disable git and svn subrepos by default (BC) (SEC)
307 * subrepo: disable git and svn subrepos by default (BC) (SEC)
287 * transaction: register summary callbacks only at start of transaction (BC)
308 * transaction: register summary callbacks only at start of transaction (BC)
288
309
289 === API Changes ===
310 === Internal API Changes ===
290
311
312 * dirstate: add explicit methods for querying directories (API)
313 * exchange: return bundle info from getbundlechunks() (API)
291 * memfilectx: make changectx argument mandatory in constructor (API)
314 * memfilectx: make changectx argument mandatory in constructor (API)
315 * templater: keep default resources per template engine (API)
316 * vfs: drop text mode flag (API)
317 * wireproto: drop support for reader interface from streamres (API)
@@ -279,61 +279,61 b' test maxdeltachainspan'
279 14 files updated, 0 files merged, 0 files removed, 0 files unresolved
279 14 files updated, 0 files merged, 0 files removed, 0 files unresolved
280 $ hg -R relax-chain debugdeltachain -m
280 $ hg -R relax-chain debugdeltachain -m
281 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
281 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
282 0 1 1 -1 base 47 46 47 1.02174 47 0 0.00000
282 0 1 1 -1 base 46 45 46 1.02222 46 0 0.00000
283 1 1 2 0 p1 58 92 105 1.14130 105 0 0.00000
283 1 1 2 0 p1 57 90 103 1.14444 103 0 0.00000
284 2 1 3 1 p1 58 138 163 1.18116 163 0 0.00000
284 2 1 3 1 p1 57 135 160 1.18519 160 0 0.00000
285 3 1 4 2 p1 58 184 221 1.20109 221 0 0.00000
285 3 1 4 2 p1 57 180 217 1.20556 217 0 0.00000
286 4 1 5 3 p1 58 230 279 1.21304 279 0 0.00000
286 4 1 5 3 p1 57 225 274 1.21778 274 0 0.00000
287 5 1 6 4 p1 58 276 337 1.22101 337 0 0.00000
287 5 1 6 4 p1 57 270 331 1.22593 331 0 0.00000
288 6 1 7 5 p1 58 322 395 1.22671 395 0 0.00000
288 6 2 1 -1 base 46 45 46 1.02222 46 0 0.00000
289 7 1 8 6 p1 58 368 453 1.23098 453 0 0.00000
289 7 2 2 6 p1 57 90 103 1.14444 103 0 0.00000
290 8 1 9 7 p1 58 414 511 1.23430 511 0 0.00000
290 8 2 3 7 p1 57 135 160 1.18519 160 0 0.00000
291 9 1 10 8 p1 58 460 569 1.23696 569 0 0.00000
291 9 2 4 8 p1 57 180 217 1.20556 217 0 0.00000
292 10 1 11 9 p1 58 506 627 1.23913 627 0 0.00000
292 10 2 5 9 p1 58 226 275 1.21681 275 0 0.00000
293 11 1 12 10 p1 58 552 685 1.24094 685 0 0.00000
293 11 2 6 10 p1 58 272 333 1.22426 333 0 0.00000
294 12 1 13 11 p1 58 598 743 1.24247 743 0 0.00000
294 12 2 7 11 p1 58 318 391 1.22956 391 0 0.00000
295 13 1 14 12 p1 58 644 801 1.24379 801 0 0.00000
295 13 2 8 12 p1 58 364 449 1.23352 449 0 0.00000
296 14 1 15 13 p1 58 690 859 1.24493 859 0 0.00000
296 14 2 9 13 p1 58 410 507 1.23659 507 0 0.00000
297 15 1 16 14 p1 58 736 917 1.24592 917 0 0.00000
297 15 2 10 14 p1 58 456 565 1.23904 565 0 0.00000
298 16 1 17 15 p1 58 782 975 1.24680 975 0 0.00000
298 16 2 11 15 p1 58 502 623 1.24104 623 0 0.00000
299 17 1 18 16 p1 58 828 1033 1.24758 1033 0 0.00000
299 17 2 12 16 p1 58 548 681 1.24270 681 0 0.00000
300 18 1 19 17 p1 58 874 1091 1.24828 1091 0 0.00000
300 18 3 1 -1 base 47 46 47 1.02174 47 0 0.00000
301 19 1 20 18 p1 58 920 1149 1.24891 1149 0 0.00000
301 19 3 2 18 p1 58 92 105 1.14130 105 0 0.00000
302 20 1 21 19 p1 58 966 1207 1.24948 1207 0 0.00000
302 20 3 3 19 p1 58 138 163 1.18116 163 0 0.00000
303 21 1 22 20 p1 58 1012 1265 1.25000 1265 0 0.00000
303 21 3 4 20 p1 58 184 221 1.20109 221 0 0.00000
304 22 1 23 21 p1 58 1058 1323 1.25047 1323 0 0.00000
304 22 3 5 21 p1 58 230 279 1.21304 279 0 0.00000
305 23 1 24 22 p1 58 1104 1381 1.25091 1381 0 0.00000
305 23 3 6 22 p1 58 276 337 1.22101 337 0 0.00000
306 24 1 25 23 p1 58 1150 1439 1.25130 1439 0 0.00000
306 24 3 7 23 p1 58 322 395 1.22671 395 0 0.00000
307 25 1 26 24 p1 58 1196 1497 1.25167 1497 0 0.00000
307 25 3 8 24 p1 58 368 453 1.23098 453 0 0.00000
308 26 1 27 25 p1 58 1242 1555 1.25201 1555 0 0.00000
308 26 3 9 25 p1 58 414 511 1.23430 511 0 0.00000
309 27 1 28 26 p1 58 1288 1613 1.25233 1613 0 0.00000
309 27 3 10 26 p1 58 460 569 1.23696 569 0 0.00000
310 28 1 29 27 p1 58 1334 1671 1.25262 1671 0 0.00000
310 28 3 11 27 p1 58 506 627 1.23913 627 0 0.00000
311 29 1 30 28 p1 58 1380 1729 1.25290 1729 0 0.00000
311 29 3 12 28 p1 58 552 685 1.24094 685 0 0.00000
312 30 1 31 29 p1 58 1426 1787 1.25316 1787 0 0.00000
312 30 3 13 29 p1 58 598 743 1.24247 743 0 0.00000
313 31 2 1 -1 base 46 45 46 1.02222 46 0 0.00000
313 31 3 14 30 p1 58 644 801 1.24379 801 0 0.00000
314 32 2 2 31 p1 57 90 103 1.14444 103 0 0.00000
314 32 3 15 31 p1 58 690 859 1.24493 859 0 0.00000
315 33 2 3 32 p1 57 135 160 1.18519 160 0 0.00000
315 33 3 16 32 p1 58 736 917 1.24592 917 0 0.00000
316 34 2 4 33 p1 57 180 217 1.20556 217 0 0.00000
316 34 3 17 33 p1 58 782 975 1.24680 975 0 0.00000
317 35 2 5 34 p1 57 225 274 1.21778 274 0 0.00000
317 35 3 18 34 p1 58 828 1033 1.24758 1033 0 0.00000
318 36 2 6 35 p1 57 270 331 1.22593 331 0 0.00000
318 36 3 19 35 p1 58 874 1091 1.24828 1091 0 0.00000
319 37 2 7 36 p1 58 316 389 1.23101 389 0 0.00000
319 37 3 20 36 p1 58 920 1149 1.24891 1149 0 0.00000
320 38 2 8 37 p1 58 362 447 1.23481 447 0 0.00000
320 38 3 21 37 p1 58 966 1207 1.24948 1207 0 0.00000
321 39 3 1 -1 base 46 45 46 1.02222 46 0 0.00000
321 39 3 22 38 p1 58 1012 1265 1.25000 1265 0 0.00000
322 40 3 2 39 p1 57 90 103 1.14444 103 0 0.00000
322 40 3 23 39 p1 58 1058 1323 1.25047 1323 0 0.00000
323 41 3 3 40 p1 57 135 160 1.18519 160 0 0.00000
323 41 3 24 40 p1 58 1104 1381 1.25091 1381 0 0.00000
324 42 3 4 41 p1 57 180 217 1.20556 217 0 0.00000
324 42 3 25 41 p1 58 1150 1439 1.25130 1439 0 0.00000
325 43 3 5 42 p1 58 226 275 1.21681 275 0 0.00000
325 43 3 26 42 p1 58 1196 1497 1.25167 1497 0 0.00000
326 44 3 6 43 p1 58 272 333 1.22426 333 0 0.00000
326 44 3 27 43 p1 58 1242 1555 1.25201 1555 0 0.00000
327 45 3 7 44 p1 58 318 391 1.22956 391 0 0.00000
327 45 3 28 44 p1 58 1288 1613 1.25233 1613 0 0.00000
328 46 3 8 45 p1 58 364 449 1.23352 449 0 0.00000
328 46 3 29 45 p1 58 1334 1671 1.25262 1671 0 0.00000
329 47 3 9 46 p1 58 410 507 1.23659 507 0 0.00000
329 47 3 30 46 p1 58 1380 1729 1.25290 1729 0 0.00000
330 48 3 10 47 p1 58 456 565 1.23904 565 0 0.00000
330 48 3 31 47 p1 58 1426 1787 1.25316 1787 0 0.00000
331 49 3 11 48 p1 58 502 623 1.24104 623 0 0.00000
331 49 4 1 -1 base 197 316 197 0.62342 197 0 0.00000
332 50 3 12 49 p1 58 548 681 1.24270 681 0 0.00000
332 50 4 2 49 p1 58 362 255 0.70442 255 0 0.00000
333 51 3 13 50 p1 58 594 739 1.24411 739 0 0.00000
333 51 2 13 17 p1 58 594 739 1.24411 2781 2042 2.76319
334 52 3 14 51 p1 58 640 797 1.24531 797 0 0.00000
334 52 5 1 -1 base 369 640 369 0.57656 369 0 0.00000
335 53 4 1 -1 base 0 0 0 0.00000 0 0 0.00000
335 53 6 1 -1 base 0 0 0 0.00000 0 0 0.00000
336 54 5 1 -1 base 369 640 369 0.57656 369 0 0.00000
336 54 7 1 -1 base 369 640 369 0.57656 369 0 0.00000
337 $ hg clone --pull source-repo --config experimental.maxdeltachainspan=0 noconst-chain --config format.generaldelta=yes
337 $ hg clone --pull source-repo --config experimental.maxdeltachainspan=0 noconst-chain --config format.generaldelta=yes
338 requesting all changes
338 requesting all changes
339 adding changesets
339 adding changesets
@@ -345,58 +345,58 b' test maxdeltachainspan'
345 14 files updated, 0 files merged, 0 files removed, 0 files unresolved
345 14 files updated, 0 files merged, 0 files removed, 0 files unresolved
346 $ hg -R noconst-chain debugdeltachain -m
346 $ hg -R noconst-chain debugdeltachain -m
347 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
347 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio
348 0 1 1 -1 base 47 46 47 1.02174 47 0 0.00000
348 0 1 1 -1 base 46 45 46 1.02222 46 0 0.00000
349 1 1 2 0 p1 58 92 105 1.14130 105 0 0.00000
349 1 1 2 0 p1 57 90 103 1.14444 103 0 0.00000
350 2 1 3 1 p1 58 138 163 1.18116 163 0 0.00000
350 2 1 3 1 p1 57 135 160 1.18519 160 0 0.00000
351 3 1 4 2 p1 58 184 221 1.20109 221 0 0.00000
351 3 1 4 2 p1 57 180 217 1.20556 217 0 0.00000
352 4 1 5 3 p1 58 230 279 1.21304 279 0 0.00000
352 4 1 5 3 p1 57 225 274 1.21778 274 0 0.00000
353 5 1 6 4 p1 58 276 337 1.22101 337 0 0.00000
353 5 1 6 4 p1 57 270 331 1.22593 331 0 0.00000
354 6 1 7 5 p1 58 322 395 1.22671 395 0 0.00000
354 6 2 1 -1 base 46 45 46 1.02222 46 0 0.00000
355 7 1 8 6 p1 58 368 453 1.23098 453 0 0.00000
355 7 2 2 6 p1 57 90 103 1.14444 103 0 0.00000
356 8 1 9 7 p1 58 414 511 1.23430 511 0 0.00000
356 8 2 3 7 p1 57 135 160 1.18519 160 0 0.00000
357 9 1 10 8 p1 58 460 569 1.23696 569 0 0.00000
357 9 2 4 8 p1 57 180 217 1.20556 217 0 0.00000
358 10 1 11 9 p1 58 506 627 1.23913 627 0 0.00000
358 10 2 5 9 p1 58 226 275 1.21681 275 0 0.00000
359 11 1 12 10 p1 58 552 685 1.24094 685 0 0.00000
359 11 2 6 10 p1 58 272 333 1.22426 333 0 0.00000
360 12 1 13 11 p1 58 598 743 1.24247 743 0 0.00000
360 12 2 7 11 p1 58 318 391 1.22956 391 0 0.00000
361 13 1 14 12 p1 58 644 801 1.24379 801 0 0.00000
361 13 2 8 12 p1 58 364 449 1.23352 449 0 0.00000
362 14 1 15 13 p1 58 690 859 1.24493 859 0 0.00000
362 14 2 9 13 p1 58 410 507 1.23659 507 0 0.00000
363 15 1 16 14 p1 58 736 917 1.24592 917 0 0.00000
363 15 2 10 14 p1 58 456 565 1.23904 565 0 0.00000
364 16 1 17 15 p1 58 782 975 1.24680 975 0 0.00000
364 16 2 11 15 p1 58 502 623 1.24104 623 0 0.00000
365 17 1 18 16 p1 58 828 1033 1.24758 1033 0 0.00000
365 17 2 12 16 p1 58 548 681 1.24270 681 0 0.00000
366 18 1 19 17 p1 58 874 1091 1.24828 1091 0 0.00000
366 18 3 1 -1 base 47 46 47 1.02174 47 0 0.00000
367 19 1 20 18 p1 58 920 1149 1.24891 1149 0 0.00000
367 19 3 2 18 p1 58 92 105 1.14130 105 0 0.00000
368 20 1 21 19 p1 58 966 1207 1.24948 1207 0 0.00000
368 20 3 3 19 p1 58 138 163 1.18116 163 0 0.00000
369 21 1 22 20 p1 58 1012 1265 1.25000 1265 0 0.00000
369 21 3 4 20 p1 58 184 221 1.20109 221 0 0.00000
370 22 1 23 21 p1 58 1058 1323 1.25047 1323 0 0.00000
370 22 3 5 21 p1 58 230 279 1.21304 279 0 0.00000
371 23 1 24 22 p1 58 1104 1381 1.25091 1381 0 0.00000
371 23 3 6 22 p1 58 276 337 1.22101 337 0 0.00000
372 24 1 25 23 p1 58 1150 1439 1.25130 1439 0 0.00000
372 24 3 7 23 p1 58 322 395 1.22671 395 0 0.00000
373 25 1 26 24 p1 58 1196 1497 1.25167 1497 0 0.00000
373 25 3 8 24 p1 58 368 453 1.23098 453 0 0.00000
374 26 1 27 25 p1 58 1242 1555 1.25201 1555 0 0.00000
374 26 3 9 25 p1 58 414 511 1.23430 511 0 0.00000
375 27 1 28 26 p1 58 1288 1613 1.25233 1613 0 0.00000
375 27 3 10 26 p1 58 460 569 1.23696 569 0 0.00000
376 28 1 29 27 p1 58 1334 1671 1.25262 1671 0 0.00000
376 28 3 11 27 p1 58 506 627 1.23913 627 0 0.00000
377 29 1 30 28 p1 58 1380 1729 1.25290 1729 0 0.00000
377 29 3 12 28 p1 58 552 685 1.24094 685 0 0.00000
378 30 1 31 29 p1 58 1426 1787 1.25316 1787 0 0.00000
378 30 3 13 29 p1 58 598 743 1.24247 743 0 0.00000
379 31 2 1 -1 base 46 45 46 1.02222 46 0 0.00000
379 31 3 14 30 p1 58 644 801 1.24379 801 0 0.00000
380 32 2 2 31 p1 57 90 103 1.14444 103 0 0.00000
380 32 3 15 31 p1 58 690 859 1.24493 859 0 0.00000
381 33 2 3 32 p1 57 135 160 1.18519 160 0 0.00000
381 33 3 16 32 p1 58 736 917 1.24592 917 0 0.00000
382 34 2 4 33 p1 57 180 217 1.20556 217 0 0.00000
382 34 3 17 33 p1 58 782 975 1.24680 975 0 0.00000
383 35 2 5 34 p1 57 225 274 1.21778 274 0 0.00000
383 35 3 18 34 p1 58 828 1033 1.24758 1033 0 0.00000
384 36 2 6 35 p1 57 270 331 1.22593 331 0 0.00000
384 36 3 19 35 p1 58 874 1091 1.24828 1091 0 0.00000
385 37 2 7 36 p1 58 316 389 1.23101 389 0 0.00000
385 37 3 20 36 p1 58 920 1149 1.24891 1149 0 0.00000
386 38 2 8 37 p1 58 362 447 1.23481 447 0 0.00000
386 38 3 21 37 p1 58 966 1207 1.24948 1207 0 0.00000
387 39 3 1 -1 base 46 45 46 1.02222 46 0 0.00000
387 39 3 22 38 p1 58 1012 1265 1.25000 1265 0 0.00000
388 40 3 2 39 p1 57 90 103 1.14444 103 0 0.00000
388 40 3 23 39 p1 58 1058 1323 1.25047 1323 0 0.00000
389 41 3 3 40 p1 57 135 160 1.18519 160 0 0.00000
389 41 3 24 40 p1 58 1104 1381 1.25091 1381 0 0.00000
390 42 3 4 41 p1 57 180 217 1.20556 217 0 0.00000
390 42 3 25 41 p1 58 1150 1439 1.25130 1439 0 0.00000
391 43 3 5 42 p1 58 226 275 1.21681 275 0 0.00000
391 43 3 26 42 p1 58 1196 1497 1.25167 1497 0 0.00000
392 44 3 6 43 p1 58 272 333 1.22426 333 0 0.00000
392 44 3 27 43 p1 58 1242 1555 1.25201 1555 0 0.00000
393 45 3 7 44 p1 58 318 391 1.22956 391 0 0.00000
393 45 3 28 44 p1 58 1288 1613 1.25233 1613 0 0.00000
394 46 3 8 45 p1 58 364 449 1.23352 449 0 0.00000
394 46 3 29 45 p1 58 1334 1671 1.25262 1671 0 0.00000
395 47 3 9 46 p1 58 410 507 1.23659 507 0 0.00000
395 47 3 30 46 p1 58 1380 1729 1.25290 1729 0 0.00000
396 48 3 10 47 p1 58 456 565 1.23904 565 0 0.00000
396 48 3 31 47 p1 58 1426 1787 1.25316 1787 0 0.00000
397 49 3 11 48 p1 58 502 623 1.24104 623 0 0.00000
397 49 1 7 5 p1 58 316 389 1.23101 2857 2468 6.34447
398 50 3 12 49 p1 58 548 681 1.24270 681 0 0.00000
398 50 1 8 49 p1 58 362 447 1.23481 2915 2468 5.52125
399 51 3 13 50 p1 58 594 739 1.24411 739 0 0.00000
399 51 2 13 17 p1 58 594 739 1.24411 2642 1903 2.57510
400 52 3 14 51 p1 58 640 797 1.24531 797 0 0.00000
400 52 2 14 51 p1 58 640 797 1.24531 2700 1903 2.38770
401 53 4 1 -1 base 0 0 0 0.00000 0 0 0.00000
401 53 4 1 -1 base 0 0 0 0.00000 0 0 0.00000
402 54 5 1 -1 base 369 640 369 0.57656 369 0 0.00000
402 54 5 1 -1 base 369 640 369 0.57656 369 0 0.00000
@@ -18,10 +18,12 b' create full repo'
18 $ echo modified > inside/f2
18 $ echo modified > inside/f2
19 $ hg ci -qm 'modify inside/f2'
19 $ hg ci -qm 'modify inside/f2'
20
20
21 $ mkdir outside
22 $ echo new > outside/f3
23 $ hg ci -Aqm 'add outside/f3'
21 $ cd ..
24 $ cd ..
22
25
23 $ hg clone --narrow ssh://user@dummy/master narrow --include inside
26 $ hg clone --narrow ssh://user@dummy/master narrow --include inside -r 2
24 requesting all changes
25 adding changesets
27 adding changesets
26 adding manifests
28 adding manifests
27 adding file changes
29 adding file changes
@@ -55,3 +57,18 b' create full repo'
55 date: Thu Jan 01 00:00:00 1970 +0000
57 date: Thu Jan 01 00:00:00 1970 +0000
56 summary: move f2 from outside
58 summary: move f2 from outside
57
59
60 $ echo new > inside/f4
61 $ hg ci -Aqm 'add inside/f4'
62 $ hg pull -q
63 $ hg --config extensions.rebase= rebase -d tip
64 rebasing 3:4f84b666728c "add inside/f4"
65 saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/4f84b666728c-4269b76e-rebase.hg
66
67 $ hg co -q 0
68 $ echo modified > inside/f1
69 $ hg ci -qm 'modify inside/f1'
70 $ echo new > inside/f5
71 $ hg ci -Aqm 'add inside/f5'
72 $ hg --config extensions.rebase= rebase -d 'public()' -r .
73 rebasing 6:610b60178c28 "add inside/f5" (tip)
74 saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/610b60178c28-65716a78-rebase.hg
@@ -850,6 +850,10 b' Check we deny its usage on older reposit'
850 ** ProgrammingError: this repository does not support the internal phase
850 ** ProgrammingError: this repository does not support the internal phase
851 raise error.ProgrammingError(msg)
851 raise error.ProgrammingError(msg)
852 mercurial.error.ProgrammingError: this repository does not support the internal phase
852 mercurial.error.ProgrammingError: this repository does not support the internal phase
853 $ hg --config "phases.new-commit=archived" commit -m "my test archived commit" 2>&1 | grep ProgrammingError
854 ** ProgrammingError: this repository does not support the archived phase
855 raise error.ProgrammingError(msg)
856 mercurial.error.ProgrammingError: this repository does not support the archived phase
853
857
854 $ cd ..
858 $ cd ..
855
859
@@ -878,7 +882,8 b' Commit an internal changesets'
878 test-debug-phase: new rev 1: x -> 96
882 test-debug-phase: new rev 1: x -> 96
879 test-hook-close-phase: c01c42dffc7f81223397e99652a0703f83e1c5ea: -> internal
883 test-hook-close-phase: c01c42dffc7f81223397e99652a0703f83e1c5ea: -> internal
880
884
881 Usual visibility rules apply when working directory parents
885 The changeset is a working parent descendant.
886 Per the usual visibility rules, it is made visible.
882
887
883 $ hg log -G -l 3
888 $ hg log -G -l 3
884 @ changeset: 1:c01c42dffc7f
889 @ changeset: 1:c01c42dffc7f
@@ -904,3 +909,45 b' Commit is hidden as expected'
904 date: Thu Jan 01 00:00:00 1970 +0000
909 date: Thu Jan 01 00:00:00 1970 +0000
905 summary: A
910 summary: A
906
911
912
913 Test for archived phase
914 -----------------------
915
916 Commit an archived changesets
917
918 $ echo B > B
919 $ hg add B
920 $ hg status
921 A B
922 $ hg --config "phases.new-commit=archived" commit -m "my test archived commit"
923 test-debug-phase: new rev 2: x -> 32
924 test-hook-close-phase: 8df5997c3361518f733d1ae67cd3adb9b0eaf125: -> archived
925
926 The changeset is a working parent descendant.
927 Per the usual visibility rules, it is made visible.
928
929 $ hg log -G -l 3
930 @ changeset: 2:8df5997c3361
931 | tag: tip
932 | parent: 0:4a2df7238c3b
933 | user: test
934 | date: Thu Jan 01 00:00:00 1970 +0000
935 | summary: my test archived commit
936 |
937 o changeset: 0:4a2df7238c3b
938 user: test
939 date: Thu Jan 01 00:00:00 1970 +0000
940 summary: A
941
942
943 Commit is hidden as expected
944
945 $ hg up 0
946 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
947 $ hg log -G
948 @ changeset: 0:4a2df7238c3b
949 tag: tip
950 user: test
951 date: Thu Jan 01 00:00:00 1970 +0000
952 summary: A
953
@@ -25,6 +25,14 b' except ImportError:'
25 sqlitestore = None
25 sqlitestore = None
26
26
27 try:
27 try:
28 import sqlite3
29 if sqlite3.sqlite_version_info < (3, 8, 3):
30 # WITH clause not supported
31 sqlitestore = None
32 except ImportError:
33 pass
34
35 try:
28 from mercurial import zstd
36 from mercurial import zstd
29 zstd.__version__
37 zstd.__version__
30 except ImportError:
38 except ImportError:
General Comments 0
You need to be logged in to leave comments. Login now