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"( |
|
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| |
|
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| |
|
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|template |
|
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 |
" |
|
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 |
|
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 |
|
|
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 |
|
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= |
|
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, |
|
514 | u1u, u2u = _computenonoverlap(repo, c1, c2, | |
514 |
|
|
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), |
|
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 |
|
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 |
( |
|
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 |
|
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 == ' |
|
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: |
|
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 |
|
|
226 | * largefiles: add a 'debuglfput' command to put largefile into the store | |
196 |
* largefiles: |
|
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 4 |
|
282 | 0 1 1 -1 base 46 45 46 1.02222 46 0 0.00000 | |
283 |
1 1 2 0 p1 5 |
|
283 | 1 1 2 0 p1 57 90 103 1.14444 103 0 0.00000 | |
284 |
2 1 3 1 p1 5 |
|
284 | 2 1 3 1 p1 57 135 160 1.18519 160 0 0.00000 | |
285 |
3 1 4 2 p1 5 |
|
285 | 3 1 4 2 p1 57 180 217 1.20556 217 0 0.00000 | |
286 |
4 1 5 3 p1 5 |
|
286 | 4 1 5 3 p1 57 225 274 1.21778 274 0 0.00000 | |
287 |
5 1 6 4 p1 5 |
|
287 | 5 1 6 4 p1 57 270 331 1.22593 331 0 0.00000 | |
288 |
6 1 |
|
288 | 6 2 1 -1 base 46 45 46 1.02222 46 0 0.00000 | |
289 |
7 |
|
289 | 7 2 2 6 p1 57 90 103 1.14444 103 0 0.00000 | |
290 |
8 |
|
290 | 8 2 3 7 p1 57 135 160 1.18519 160 0 0.00000 | |
291 |
9 |
|
291 | 9 2 4 8 p1 57 180 217 1.20556 217 0 0.00000 | |
292 |
10 |
|
292 | 10 2 5 9 p1 58 226 275 1.21681 275 0 0.00000 | |
293 |
11 |
|
293 | 11 2 6 10 p1 58 272 333 1.22426 333 0 0.00000 | |
294 |
12 |
|
294 | 12 2 7 11 p1 58 318 391 1.22956 391 0 0.00000 | |
295 |
13 |
|
295 | 13 2 8 12 p1 58 364 449 1.23352 449 0 0.00000 | |
296 |
14 |
|
296 | 14 2 9 13 p1 58 410 507 1.23659 507 0 0.00000 | |
297 |
15 |
|
297 | 15 2 10 14 p1 58 456 565 1.23904 565 0 0.00000 | |
298 |
16 |
|
298 | 16 2 11 15 p1 58 502 623 1.24104 623 0 0.00000 | |
299 |
17 |
|
299 | 17 2 12 16 p1 58 548 681 1.24270 681 0 0.00000 | |
300 |
18 1 |
|
300 | 18 3 1 -1 base 47 46 47 1.02174 47 0 0.00000 | |
301 |
19 |
|
301 | 19 3 2 18 p1 58 92 105 1.14130 105 0 0.00000 | |
302 |
20 |
|
302 | 20 3 3 19 p1 58 138 163 1.18116 163 0 0.00000 | |
303 |
21 |
|
303 | 21 3 4 20 p1 58 184 221 1.20109 221 0 0.00000 | |
304 |
22 |
|
304 | 22 3 5 21 p1 58 230 279 1.21304 279 0 0.00000 | |
305 |
23 |
|
305 | 23 3 6 22 p1 58 276 337 1.22101 337 0 0.00000 | |
306 |
24 |
|
306 | 24 3 7 23 p1 58 322 395 1.22671 395 0 0.00000 | |
307 |
25 |
|
307 | 25 3 8 24 p1 58 368 453 1.23098 453 0 0.00000 | |
308 |
26 |
|
308 | 26 3 9 25 p1 58 414 511 1.23430 511 0 0.00000 | |
309 |
27 |
|
309 | 27 3 10 26 p1 58 460 569 1.23696 569 0 0.00000 | |
310 |
28 |
|
310 | 28 3 11 27 p1 58 506 627 1.23913 627 0 0.00000 | |
311 |
29 |
|
311 | 29 3 12 28 p1 58 552 685 1.24094 685 0 0.00000 | |
312 |
30 |
|
312 | 30 3 13 29 p1 58 598 743 1.24247 743 0 0.00000 | |
313 |
31 |
|
313 | 31 3 14 30 p1 58 644 801 1.24379 801 0 0.00000 | |
314 |
32 |
|
314 | 32 3 15 31 p1 58 690 859 1.24493 859 0 0.00000 | |
315 |
33 |
|
315 | 33 3 16 32 p1 58 736 917 1.24592 917 0 0.00000 | |
316 |
34 |
|
316 | 34 3 17 33 p1 58 782 975 1.24680 975 0 0.00000 | |
317 |
35 |
|
317 | 35 3 18 34 p1 58 828 1033 1.24758 1033 0 0.00000 | |
318 |
36 |
|
318 | 36 3 19 35 p1 58 874 1091 1.24828 1091 0 0.00000 | |
319 |
37 |
|
319 | 37 3 20 36 p1 58 920 1149 1.24891 1149 0 0.00000 | |
320 |
38 |
|
320 | 38 3 21 37 p1 58 966 1207 1.24948 1207 0 0.00000 | |
321 |
39 3 |
|
321 | 39 3 22 38 p1 58 1012 1265 1.25000 1265 0 0.00000 | |
322 |
40 3 |
|
322 | 40 3 23 39 p1 58 1058 1323 1.25047 1323 0 0.00000 | |
323 |
41 3 |
|
323 | 41 3 24 40 p1 58 1104 1381 1.25091 1381 0 0.00000 | |
324 |
42 3 |
|
324 | 42 3 25 41 p1 58 1150 1439 1.25130 1439 0 0.00000 | |
325 |
43 3 |
|
325 | 43 3 26 42 p1 58 1196 1497 1.25167 1497 0 0.00000 | |
326 |
44 3 |
|
326 | 44 3 27 43 p1 58 1242 1555 1.25201 1555 0 0.00000 | |
327 |
45 3 |
|
327 | 45 3 28 44 p1 58 1288 1613 1.25233 1613 0 0.00000 | |
328 |
46 3 |
|
328 | 46 3 29 45 p1 58 1334 1671 1.25262 1671 0 0.00000 | |
329 |
47 3 |
|
329 | 47 3 30 46 p1 58 1380 1729 1.25290 1729 0 0.00000 | |
330 |
48 3 1 |
|
330 | 48 3 31 47 p1 58 1426 1787 1.25316 1787 0 0.00000 | |
331 |
49 |
|
331 | 49 4 1 -1 base 197 316 197 0.62342 197 0 0.00000 | |
332 |
50 |
|
332 | 50 4 2 49 p1 58 362 255 0.70442 255 0 0.00000 | |
333 |
51 |
|
333 | 51 2 13 17 p1 58 594 739 1.24411 2781 2042 2.76319 | |
334 |
52 |
|
334 | 52 5 1 -1 base 369 640 369 0.57656 369 0 0.00000 | |
335 |
53 |
|
335 | 53 6 1 -1 base 0 0 0 0.00000 0 0 0.00000 | |
336 |
54 |
|
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 4 |
|
348 | 0 1 1 -1 base 46 45 46 1.02222 46 0 0.00000 | |
349 |
1 1 2 0 p1 5 |
|
349 | 1 1 2 0 p1 57 90 103 1.14444 103 0 0.00000 | |
350 |
2 1 3 1 p1 5 |
|
350 | 2 1 3 1 p1 57 135 160 1.18519 160 0 0.00000 | |
351 |
3 1 4 2 p1 5 |
|
351 | 3 1 4 2 p1 57 180 217 1.20556 217 0 0.00000 | |
352 |
4 1 5 3 p1 5 |
|
352 | 4 1 5 3 p1 57 225 274 1.21778 274 0 0.00000 | |
353 |
5 1 6 4 p1 5 |
|
353 | 5 1 6 4 p1 57 270 331 1.22593 331 0 0.00000 | |
354 |
6 1 |
|
354 | 6 2 1 -1 base 46 45 46 1.02222 46 0 0.00000 | |
355 |
7 |
|
355 | 7 2 2 6 p1 57 90 103 1.14444 103 0 0.00000 | |
356 |
8 |
|
356 | 8 2 3 7 p1 57 135 160 1.18519 160 0 0.00000 | |
357 |
9 |
|
357 | 9 2 4 8 p1 57 180 217 1.20556 217 0 0.00000 | |
358 |
10 |
|
358 | 10 2 5 9 p1 58 226 275 1.21681 275 0 0.00000 | |
359 |
11 |
|
359 | 11 2 6 10 p1 58 272 333 1.22426 333 0 0.00000 | |
360 |
12 |
|
360 | 12 2 7 11 p1 58 318 391 1.22956 391 0 0.00000 | |
361 |
13 |
|
361 | 13 2 8 12 p1 58 364 449 1.23352 449 0 0.00000 | |
362 |
14 |
|
362 | 14 2 9 13 p1 58 410 507 1.23659 507 0 0.00000 | |
363 |
15 |
|
363 | 15 2 10 14 p1 58 456 565 1.23904 565 0 0.00000 | |
364 |
16 |
|
364 | 16 2 11 15 p1 58 502 623 1.24104 623 0 0.00000 | |
365 |
17 |
|
365 | 17 2 12 16 p1 58 548 681 1.24270 681 0 0.00000 | |
366 |
18 1 |
|
366 | 18 3 1 -1 base 47 46 47 1.02174 47 0 0.00000 | |
367 |
19 |
|
367 | 19 3 2 18 p1 58 92 105 1.14130 105 0 0.00000 | |
368 |
20 |
|
368 | 20 3 3 19 p1 58 138 163 1.18116 163 0 0.00000 | |
369 |
21 |
|
369 | 21 3 4 20 p1 58 184 221 1.20109 221 0 0.00000 | |
370 |
22 |
|
370 | 22 3 5 21 p1 58 230 279 1.21304 279 0 0.00000 | |
371 |
23 |
|
371 | 23 3 6 22 p1 58 276 337 1.22101 337 0 0.00000 | |
372 |
24 |
|
372 | 24 3 7 23 p1 58 322 395 1.22671 395 0 0.00000 | |
373 |
25 |
|
373 | 25 3 8 24 p1 58 368 453 1.23098 453 0 0.00000 | |
374 |
26 |
|
374 | 26 3 9 25 p1 58 414 511 1.23430 511 0 0.00000 | |
375 |
27 |
|
375 | 27 3 10 26 p1 58 460 569 1.23696 569 0 0.00000 | |
376 |
28 |
|
376 | 28 3 11 27 p1 58 506 627 1.23913 627 0 0.00000 | |
377 |
29 |
|
377 | 29 3 12 28 p1 58 552 685 1.24094 685 0 0.00000 | |
378 |
30 |
|
378 | 30 3 13 29 p1 58 598 743 1.24247 743 0 0.00000 | |
379 |
31 |
|
379 | 31 3 14 30 p1 58 644 801 1.24379 801 0 0.00000 | |
380 |
32 |
|
380 | 32 3 15 31 p1 58 690 859 1.24493 859 0 0.00000 | |
381 |
33 |
|
381 | 33 3 16 32 p1 58 736 917 1.24592 917 0 0.00000 | |
382 |
34 |
|
382 | 34 3 17 33 p1 58 782 975 1.24680 975 0 0.00000 | |
383 |
35 |
|
383 | 35 3 18 34 p1 58 828 1033 1.24758 1033 0 0.00000 | |
384 |
36 |
|
384 | 36 3 19 35 p1 58 874 1091 1.24828 1091 0 0.00000 | |
385 |
37 |
|
385 | 37 3 20 36 p1 58 920 1149 1.24891 1149 0 0.00000 | |
386 |
38 |
|
386 | 38 3 21 37 p1 58 966 1207 1.24948 1207 0 0.00000 | |
387 |
39 3 |
|
387 | 39 3 22 38 p1 58 1012 1265 1.25000 1265 0 0.00000 | |
388 |
40 3 |
|
388 | 40 3 23 39 p1 58 1058 1323 1.25047 1323 0 0.00000 | |
389 |
41 3 |
|
389 | 41 3 24 40 p1 58 1104 1381 1.25091 1381 0 0.00000 | |
390 |
42 3 |
|
390 | 42 3 25 41 p1 58 1150 1439 1.25130 1439 0 0.00000 | |
391 |
43 3 |
|
391 | 43 3 26 42 p1 58 1196 1497 1.25167 1497 0 0.00000 | |
392 |
44 3 |
|
392 | 44 3 27 43 p1 58 1242 1555 1.25201 1555 0 0.00000 | |
393 |
45 3 |
|
393 | 45 3 28 44 p1 58 1288 1613 1.25233 1613 0 0.00000 | |
394 |
46 3 |
|
394 | 46 3 29 45 p1 58 1334 1671 1.25262 1671 0 0.00000 | |
395 |
47 3 |
|
395 | 47 3 30 46 p1 58 1380 1729 1.25290 1729 0 0.00000 | |
396 |
48 3 1 |
|
396 | 48 3 31 47 p1 58 1426 1787 1.25316 1787 0 0.00000 | |
397 |
49 |
|
397 | 49 1 7 5 p1 58 316 389 1.23101 2857 2468 6.34447 | |
398 |
50 |
|
398 | 50 1 8 49 p1 58 362 447 1.23481 2915 2468 5.52125 | |
399 |
51 |
|
399 | 51 2 13 17 p1 58 594 739 1.24411 2642 1903 2.57510 | |
400 |
52 |
|
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