Show More
@@ -1,181 +1,191 b'' | |||||
1 | #!/usr/bin/env python3 |
|
1 | #!/usr/bin/env python3 | |
2 | """Generate release notes from our commit log. |
|
2 | """Generate release notes from our commit log. | |
3 |
|
3 | |||
4 | This uses the relnotes extension directives when they're available, |
|
4 | This uses the relnotes extension directives when they're available, | |
5 | and falls back to our old pre-relnotes logic that used to live in the |
|
5 | and falls back to our old pre-relnotes logic that used to live in the | |
6 | release-tools repo. |
|
6 | release-tools repo. | |
7 | """ |
|
7 | """ | |
8 | import argparse |
|
8 | 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, | |
20 | r"\(BC\)": 100, |
|
15 | r"\(BC\)": 100, | |
21 | r"\(API\)": 100, |
|
16 | r"\(API\)": 100, | |
22 | # core commands, bump up |
|
17 | # core commands, bump up | |
23 | r"(commit|files|log|pull|push|patch|status|tag|summary)(|s|es):": 20, |
|
18 | r"(commit|files|log|pull|push|patch|status|tag|summary)(|s|es):": 20, | |
24 | r"(annotate|alias|branch|bookmark|clone|graft|import|verify).*:": 20, |
|
19 | r"(annotate|alias|branch|bookmark|clone|graft|import|verify).*:": 20, | |
25 | # extensions, bump up |
|
20 | # extensions, bump up | |
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, | |
53 | r": use .* instead of": -20, |
|
58 | r": use .* instead of": -20, | |
54 | r"__": -5, |
|
59 | r"__": -5, | |
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 | |||
70 | cutoff = 10 |
|
80 | cutoff = 10 | |
71 | commits = [] |
|
81 | 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"), | |
81 | (r"rebase|mq|convert|eol|histedit|largefiles", "extensions"), |
|
91 | (r"rebase|mq|convert|eol|histedit|largefiles", "extensions"), | |
82 | (r"shelve|unshelve", "extensions"), |
|
92 | (r"shelve|unshelve", "extensions"), | |
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." | |
95 | ), |
|
105 | ), | |
96 | ) |
|
106 | ) | |
97 | ap.add_argument( |
|
107 | ap.add_argument( | |
98 | "--stoprev", |
|
108 | "--stoprev", | |
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 " | |
106 | "a descendant of startrev." |
|
115 | "a descendant of startrev." | |
107 | ), |
|
116 | ), | |
108 | ) |
|
117 | ) | |
109 | args = ap.parse_args() |
|
118 | args = ap.parse_args() | |
110 | fromext = subprocess.check_output( |
|
119 | fromext = subprocess.check_output( | |
111 | [ |
|
120 | [ | |
112 | "hg", |
|
121 | "hg", | |
113 | "--config", |
|
122 | "--config", | |
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. | |
121 | for entry in sorted( |
|
130 | for entry in sorted( | |
122 | subprocess.check_output( |
|
131 | subprocess.check_output( | |
123 | [ |
|
132 | [ | |
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 | ] | |
132 | ) |
|
140 | ) | |
133 | .decode("utf-8") |
|
141 | .decode("utf-8") | |
134 | .splitlines() |
|
142 | .splitlines() | |
135 | ): |
|
143 | ): | |
136 | desc = entry.replace("`", "'") |
|
144 | desc = entry.replace("`", "'") | |
137 |
|
145 | |||
138 | score = 0 |
|
146 | score = 0 | |
139 | for rule, val in rules.items(): |
|
147 | for rule, val in rules.items(): | |
140 | if re.search(rule, desc): |
|
148 | if re.search(rule, desc): | |
141 | score += val |
|
149 | score += val | |
142 |
|
150 | |||
143 | desc = desc.replace("(issue", "(Bts:issue") |
|
151 | desc = desc.replace("(issue", "(Bts:issue") | |
144 |
|
152 | |||
145 | if score >= cutoff: |
|
153 | if score >= cutoff: | |
146 | commits.append(desc) |
|
154 | commits.append(desc) | |
147 | # Group unflagged notes. |
|
155 | # Group unflagged notes. | |
148 | groups = {} |
|
156 | groups = {} | |
149 | bcs = [] |
|
157 | bcs = [] | |
150 | apis = [] |
|
158 | apis = [] | |
151 |
|
159 | |||
152 | for d in commits: |
|
160 | for d in commits: | |
153 | if "(BC)" in d: |
|
161 | if "(BC)" in d: | |
154 | bcs.append(d) |
|
162 | bcs.append(d) | |
155 | if "(API)" in d: |
|
163 | if "(API)" in d: | |
156 | apis.append(d) |
|
164 | apis.append(d) | |
157 | for rule, g in groupings: |
|
165 | for rule, g in groupings: | |
158 | if re.match(rule, d): |
|
166 | if re.match(rule, d): | |
159 | groups.setdefault(g, []).append(d) |
|
167 | groups.setdefault(g, []).append(d) | |
160 | break |
|
168 | break | |
161 | else: |
|
169 | else: | |
162 | groups.setdefault("unsorted", []).append(d) |
|
170 | groups.setdefault("unsorted", []).append(d) | |
163 | print(fromext) |
|
171 | print(fromext) | |
164 | # print legacy release notes sections |
|
172 | # print legacy release notes sections | |
165 | for g in sorted(groups): |
|
173 | for g in sorted(groups): | |
166 | print("\n=== %s ===" % g) |
|
174 | print("\n=== %s ===" % g) | |
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) | |
179 |
|
189 | |||
180 | if __name__ == "__main__": |
|
190 | if __name__ == "__main__": | |
181 | main() |
|
191 | main() |
@@ -1,291 +1,317 b'' | |||||
1 | #require test-repo py3exe |
|
1 | #require test-repo py3exe | |
2 | $ . "$TESTDIR/helpers-testrepo.sh" |
|
2 | $ . "$TESTDIR/helpers-testrepo.sh" | |
3 |
|
3 | |||
4 | $ cd $TESTDIR/.. |
|
4 | $ cd $TESTDIR/.. | |
5 | $ python3 contrib/relnotes 4.4 --stoprev 4.5 |
|
5 | $ python3 contrib/relnotes 4.4 --stoprev 4.5 | |
6 | changeset 3398603c5621: unexpected block in release notes directive feature |
|
6 | changeset 3398603c5621: unexpected block in release notes directive feature | |
7 | New Features |
|
7 | New Features | |
8 | ============ |
|
8 | ============ | |
9 |
|
9 | |||
10 | revert --interactive |
|
10 | revert --interactive | |
11 | -------------------- |
|
11 | -------------------- | |
12 |
|
12 | |||
13 | The revert command now accepts the flag --interactive to allow reverting only |
|
13 | The revert command now accepts the flag --interactive to allow reverting only | |
14 | some of the changes to the specified files. |
|
14 | some of the changes to the specified files. | |
15 |
|
15 | |||
16 | Rebase with different destination per source revision |
|
16 | Rebase with different destination per source revision | |
17 | ----------------------------------------------------- |
|
17 | ----------------------------------------------------- | |
18 |
|
18 | |||
19 | Previously, rebase only supports one unique destination. Now "SRC" and |
|
19 | Previously, rebase only supports one unique destination. Now "SRC" and | |
20 | "ALLSRC" can be used in rebase destination revset to precisely define |
|
20 | "ALLSRC" can be used in rebase destination revset to precisely define | |
21 | destination per each individual source revision. |
|
21 | destination per each individual source revision. | |
22 |
|
22 | |||
23 | For example, the following command could move some orphaned changesets to |
|
23 | For example, the following command could move some orphaned changesets to | |
24 | reasonable new places so they become no longer orphaned: |
|
24 | reasonable new places so they become no longer orphaned: | |
25 |
|
25 | |||
26 | hg rebase -r 'orphan()-obsolete()' -d 'max((successors(max(roots(ALLSRC) & |
|
26 | hg rebase -r 'orphan()-obsolete()' -d 'max((successors(max(roots(ALLSRC) & | |
27 | ::SRC)^)-obsolete())::)' |
|
27 | ::SRC)^)-obsolete())::)' | |
28 |
|
28 | |||
29 | Accessing hidden changesets |
|
29 | Accessing hidden changesets | |
30 | --------------------------- |
|
30 | --------------------------- | |
31 |
|
31 | |||
32 | Set config option 'experimental.directaccess = True' to access hidden |
|
32 | Set config option 'experimental.directaccess = True' to access hidden | |
33 | changesets from read only commands. |
|
33 | changesets from read only commands. | |
34 |
|
34 | |||
35 | githelp extension |
|
35 | githelp extension | |
36 | ----------------- |
|
36 | ----------------- | |
37 |
|
37 | |||
38 | The "githelp" extension provides the "hg githelp" command. This command |
|
38 | The "githelp" extension provides the "hg githelp" command. This command | |
39 | attempts to convert a "git" command to its Mercurial equivalent. The extension |
|
39 | attempts to convert a "git" command to its Mercurial equivalent. The extension | |
40 | can be useful to Git users new to Mercurial. |
|
40 | can be useful to Git users new to Mercurial. | |
41 |
|
41 | |||
42 | Other Changes |
|
42 | Other Changes | |
43 | ------------- |
|
43 | ------------- | |
44 |
|
44 | |||
45 | * When interactive revert is run against a revision other than the working |
|
45 | * When interactive revert is run against a revision other than the working | |
46 | directory parent, the diff shown is the diff to *apply* to the working |
|
46 | directory parent, the diff shown is the diff to *apply* to the working | |
47 | directory, rather than the diff to *discard* from the working copy. This is |
|
47 | directory, rather than the diff to *discard* from the working copy. This is | |
48 | in line with related user experiences with 'git' and appears to be less |
|
48 | in line with related user experiences with 'git' and appears to be less | |
49 | confusing with 'ui.interface=curses'. |
|
49 | confusing with 'ui.interface=curses'. | |
50 |
|
50 | |||
51 | * Let 'hg rebase' avoid content-divergence by skipping obsolete changesets |
|
51 | * Let 'hg rebase' avoid content-divergence by skipping obsolete changesets | |
52 | (and their descendants) when they are present in the rebase set along with |
|
52 | (and their descendants) when they are present in the rebase set along with | |
53 | one of their successors but none of their successors is in destination. |
|
53 | one of their successors but none of their successors is in destination. | |
54 |
|
54 | |||
55 | * hgweb now displays phases of non-public changesets |
|
55 | * hgweb now displays phases of non-public changesets | |
56 |
|
56 | |||
57 | * The "HGPLAINEXCEPT" environment variable can now include "color" to allow |
|
57 | * The "HGPLAINEXCEPT" environment variable can now include "color" to allow | |
58 | automatic output colorization in otherwise automated environments. |
|
58 | automatic output colorization in otherwise automated environments. | |
59 |
|
59 | |||
60 | * A new unamend command in uncommit extension which undoes the effect of the |
|
60 | * A new unamend command in uncommit extension which undoes the effect of the | |
61 | amend command by creating a new changeset which was there before amend and |
|
61 | amend command by creating a new changeset which was there before amend and | |
62 | moving the changes that were amended to the working directory. |
|
62 | moving the changes that were amended to the working directory. | |
63 |
|
63 | |||
64 | * A '--abort' flag to merge command to abort the ongoing merge. |
|
64 | * A '--abort' flag to merge command to abort the ongoing merge. | |
65 |
|
65 | |||
66 | * An experimental flag '--rev' to 'hg branch' which can be used to change |
|
66 | * An experimental flag '--rev' to 'hg branch' which can be used to change | |
67 | branch of changesets. |
|
67 | branch of changesets. | |
68 |
|
68 | |||
69 | Backwards Compatibility Changes |
|
69 | Backwards Compatibility Changes | |
70 | =============================== |
|
70 | =============================== | |
71 |
|
71 | |||
72 | * "log --follow-first -rREV", which is deprecated, now follows the first |
|
72 | * "log --follow-first -rREV", which is deprecated, now follows the first | |
73 | parent of merge revisions from the specified "REV" just like "log --follow |
|
73 | parent of merge revisions from the specified "REV" just like "log --follow | |
74 | -rREV". |
|
74 | -rREV". | |
75 |
|
75 | |||
76 | * "log --follow -rREV FILE.." now follows file history across copies and |
|
76 | * "log --follow -rREV FILE.." now follows file history across copies and | |
77 | renames. |
|
77 | renames. | |
78 |
|
78 | |||
79 | Bug Fixes |
|
79 | Bug Fixes | |
80 | ========= |
|
80 | ========= | |
81 |
|
81 | |||
82 | Issue 5165 |
|
82 | Issue 5165 | |
83 | ---------- |
|
83 | ---------- | |
84 |
|
84 | |||
85 | Bookmark, whose name is longer than 255, can again be exchanged again between |
|
85 | Bookmark, whose name is longer than 255, can again be exchanged again between | |
86 | 4.4+ client and servers. |
|
86 | 4.4+ client and servers. | |
87 |
|
87 | |||
88 | Performance Improvements |
|
88 | Performance Improvements | |
89 | ======================== |
|
89 | ======================== | |
90 |
|
90 | |||
91 | * bundle2 read I/O throughput significantly increased. |
|
91 | * bundle2 read I/O throughput significantly increased. | |
92 |
|
92 | |||
93 | * Significant memory use reductions when reading from bundle2 bundles. |
|
93 | * Significant memory use reductions when reading from bundle2 bundles. | |
94 |
|
94 | |||
95 | On the BSD repository, peak RSS during changegroup application decreased by |
|
95 | On the BSD repository, peak RSS during changegroup application decreased by | |
96 | ~185 MB from ~752 MB to ~567 MB. |
|
96 | ~185 MB from ~752 MB to ~567 MB. | |
97 |
|
97 | |||
98 | API Changes |
|
98 | API Changes | |
99 | =========== |
|
99 | =========== | |
100 |
|
100 | |||
101 | * bundlerepo.bundlerepository.bundle and |
|
101 | * bundlerepo.bundlerepository.bundle and | |
102 | bundlerepo.bundlerepository.bundlefile are now prefixed with an underscore. |
|
102 | bundlerepo.bundlerepository.bundlefile are now prefixed with an underscore. | |
103 |
|
103 | |||
104 | * Rename bundlerepo.bundlerepository.bundlefilespos to _cgfilespos. |
|
104 | * Rename bundlerepo.bundlerepository.bundlefilespos to _cgfilespos. | |
105 |
|
105 | |||
106 | * dirstate no longer provides a 'dirs()' method. To test for the existence of |
|
106 | * dirstate no longer provides a 'dirs()' method. To test for the existence of | |
107 | a directory in the dirstate, use 'dirstate.hasdir(dirname)'. |
|
107 | a directory in the dirstate, use 'dirstate.hasdir(dirname)'. | |
108 |
|
108 | |||
109 | * bundle2 parts are no longer seekable by default. |
|
109 | * bundle2 parts are no longer seekable by default. | |
110 |
|
110 | |||
111 | * mapping does not contain all template resources. use context.resource() in |
|
111 | * mapping does not contain all template resources. use context.resource() in | |
112 | template functions. |
|
112 | template functions. | |
113 |
|
113 | |||
114 | * "text=False|True" option is dropped from the vfs interface because of Python |
|
114 | * "text=False|True" option is dropped from the vfs interface because of Python | |
115 | 3 compatibility issue. Use "util.tonativeeol/fromnativeeol()" to convert EOL |
|
115 | 3 compatibility issue. Use "util.tonativeeol/fromnativeeol()" to convert EOL | |
116 | manually. |
|
116 | manually. | |
117 |
|
117 | |||
118 | * wireproto.streamres.__init__ no longer accepts a "reader" argument. Use the |
|
118 | * wireproto.streamres.__init__ no longer accepts a "reader" argument. Use the | |
119 | "gen" argument instead. |
|
119 | "gen" argument instead. | |
120 |
|
120 | |||
121 | * exchange.getbundlechunks() now returns a 2-tuple instead of just an |
|
121 | * exchange.getbundlechunks() now returns a 2-tuple instead of just an | |
122 | iterator. |
|
122 | iterator. | |
123 |
|
123 | |||
124 |
|
124 | |||
125 | === commands === |
|
125 | === commands === | |
126 | * amend: do not drop missing files (Bts:issue5732) |
|
126 | * amend: do not drop missing files (Bts:issue5732) | |
127 | * amend: do not take untracked files as modified or clean (Bts:issue5732) |
|
127 | * amend: do not take untracked files as modified or clean (Bts:issue5732) | |
128 | * amend: update .hgsubstate before committing a memctx (Bts:issue5677) |
|
128 | * amend: update .hgsubstate before committing a memctx (Bts:issue5677) | |
129 | * annotate: add support to specify hidden revs if directaccess config is set |
|
129 | * annotate: add support to specify hidden revs if directaccess config is set | |
130 | * bookmark: add methods to binary encode and decode bookmark values |
|
130 | * bookmark: add methods to binary encode and decode bookmark values | |
131 | * bookmark: deprecate direct update of a bookmark value |
|
131 | * bookmark: deprecate direct update of a bookmark value | |
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 | |
160 | * log: use revsetlang.formatspec() to concatenate list expression |
|
166 | * log: use revsetlang.formatspec() to concatenate list expression | |
161 | * log: use smartset.slice() to limit number of revisions to be displayed |
|
167 | * log: use smartset.slice() to limit number of revisions to be displayed | |
162 | * merge: cache unknown dir checks (Bts:issue5716) |
|
168 | * merge: cache unknown dir checks (Bts:issue5716) | |
163 | * merge: check created file dirs for path conflicts only once (Bts:issue5716) |
|
169 | * merge: check created file dirs for path conflicts only once (Bts:issue5716) | |
164 | * patch: add within-line color diff capacity |
|
170 | * patch: add within-line color diff capacity | |
165 | * patch: catch unexpected case in _inlinediff |
|
171 | * patch: catch unexpected case in _inlinediff | |
166 | * patch: do not break up multibyte character when highlighting word |
|
172 | * patch: do not break up multibyte character when highlighting word | |
167 | * patch: improve heuristics to not take the word "diff" as header (Bts:issue1879) |
|
173 | * patch: improve heuristics to not take the word "diff" as header (Bts:issue1879) | |
168 | * patch: reverse _inlinediff output for consistency |
|
174 | * patch: reverse _inlinediff output for consistency | |
169 | * pull: clarify that -u only updates linearly |
|
175 | * pull: clarify that -u only updates linearly | |
170 | * pull: hold wlock for the full operation when --update is used |
|
176 | * pull: hold wlock for the full operation when --update is used | |
171 | * pull: retrieve bookmarks through the binary part when possible |
|
177 | * pull: retrieve bookmarks through the binary part when possible | |
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 | |
182 | * revlog: group revision info into a dedicated structure |
|
201 | * revlog: group revision info into a dedicated structure | |
183 | * revlog: introduce 'deltainfo' to distinguish from 'delta' |
|
202 | * revlog: introduce 'deltainfo' to distinguish from 'delta' | |
184 | * revlog: rename 'rev' to 'base', as it is the base revision |
|
203 | * revlog: rename 'rev' to 'base', as it is the base revision | |
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) | |
194 |
|
|
225 | * histedit: add support to output nodechanges using formatter | |
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 | |
202 | * rebase: add concludememorynode(), and call it when rebasing in-memory |
|
232 | * rebase: add concludememorynode(), and call it when rebasing in-memory | |
203 | * rebase: add the --inmemory option flag; assign a wctx object for the rebase |
|
233 | * rebase: add the --inmemory option flag; assign a wctx object for the rebase | |
204 | * rebase: add ui.log calls for whether IMM used, whether rebasing WCP |
|
234 | * rebase: add ui.log calls for whether IMM used, whether rebasing WCP | |
205 | * rebase: disable 'inmemory' if the rebaseset contains the working copy |
|
235 | * rebase: disable 'inmemory' if the rebaseset contains the working copy | |
206 | * rebase: do not bail on uncomitted changes if rebasing in-memory |
|
236 | * rebase: do not bail on uncomitted changes if rebasing in-memory | |
207 | * rebase: do not update if IMM; instead, set the overlaywctx's parents |
|
237 | * rebase: do not update if IMM; instead, set the overlaywctx's parents | |
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() | |
214 | * rebase: rerun a rebase on-disk if IMM merge conflicts arise |
|
246 | * rebase: rerun a rebase on-disk if IMM merge conflicts arise | |
215 | * rebase: switch ui.log calls to common style |
|
247 | * rebase: switch ui.log calls to common style | |
216 | * rebase: use fm.formatlist() and fm.formatdict() to support user template |
|
248 | * rebase: use fm.formatlist() and fm.formatdict() to support user template | |
217 |
|
249 | |||
218 | === hgweb === |
|
250 | === hgweb === | |
219 | * hgweb: disable diff.noprefix option for diffstat |
|
251 | * hgweb: disable diff.noprefix option for diffstat | |
220 | * hgweb: drop support of browsers that don't understand <canvas> (BC) |
|
252 | * hgweb: drop support of browsers that don't understand <canvas> (BC) | |
221 | * hgweb: only include graph-related data in jsdata variable on /graph pages (BC) |
|
253 | * hgweb: only include graph-related data in jsdata variable on /graph pages (BC) | |
222 | * hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC) |
|
254 | * hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC) | |
223 |
|
255 | |||
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() | |
245 | * graphlog: add another graph node type, unstable, using character "*" (BC) |
|
270 | * graphlog: add another graph node type, unstable, using character "*" (BC) | |
246 | * hgdemandimport: use correct hyperlink to python-bug in comments (Bts:issue5765) |
|
271 | * hgdemandimport: use correct hyperlink to python-bug in comments (Bts:issue5765) | |
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 | |
254 | * outgoing: respect ":pushurl" paths (Bts:issue5365) |
|
278 | * outgoing: respect ":pushurl" paths (Bts:issue5365) | |
255 | * remove: print message for each file in verbose mode only while using '-A' (BC) |
|
279 | * remove: print message for each file in verbose mode only while using '-A' (BC) | |
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) |
General Comments 0
You need to be logged in to leave comments.
Login now