##// END OF EJS Templates
relnotes: more improvements
av6 -
r41659:530d211a default
parent child Browse files
Show More
@@ -1,191 +1,204 b''
1 1 #!/usr/bin/env python3
2 2 """Generate release notes from our commit log.
3 3
4 4 This uses the relnotes extension directives when they're available,
5 5 and falls back to our old pre-relnotes logic that used to live in the
6 6 release-tools repo.
7 7 """
8 8 import argparse
9 9 import re
10 10 import subprocess
11 11
12 12 rules = {
13 13 # keep
14 14 r"\(issue": 100,
15 15 r"\(BC\)": 100,
16 16 r"\(API\)": 100,
17 r"\(SEC\)": 100,
17 18 # core commands, bump up
18 19 r"(commit|files|log|pull|push|patch|status|tag|summary)(|s|es):": 20,
19 20 r"(annotate|alias|branch|bookmark|clone|graft|import|verify).*:": 20,
20 21 # extensions, bump up
21 22 r"(mq|shelve|rebase):": 20,
22 23 # newsy
23 24 r": deprecate": 20,
25 r": new.*(extension|flag|module)": 10,
24 26 r"( ability|command|feature|option|support)": 10,
25 27 # experimental
26 28 r"hg-experimental": 20,
27 29 r"(from|graduate).*experimental": 15,
28 30 r"(hide|mark).*experimental": -10,
29 31 # bug-like?
30 32 r"(fix|don't break|improve)": 7,
31 33 r"(not|n't|avoid|fix|prevent).*crash": 10,
34 r"vulnerab": 10,
32 35 # boring stuff, bump down
33 36 r"^contrib": -5,
34 37 r"debug": -5,
35 38 r"help": -5,
39 r"minor": -5,
36 40 r"(doc|metavar|bundle2|obsolete|obsmarker|rpm|setup|debug\S+:)": -15,
37 41 r"(check-code|check-commit|check-config|import-checker)": -20,
38 42 r"(flake8|lintian|pyflakes|pylint)": -20,
39 43 # cleanups and refactoring
40 r"(cleanup|white ?space|spelling|quoting)": -20,
44 r"(clean ?up|white ?space|spelling|quoting)": -20,
41 45 r"(flatten|dedent|indent|nesting|unnest)": -20,
42 46 r"(typo|hint|note|comment|TODO|FIXME)": -20,
43 47 r"(style:|convention|one-?liner)": -20,
44 r"_": -10,
45 48 r"(argument|absolute_import|attribute|assignment|mutable)": -15,
46 49 r"(scope|True|False)": -10,
47 r"(unused|useless|unnecessary|superfluous|duplicate|deprecated)": -10,
50 r"(unused|useless|unnecessar|superfluous|duplicate|deprecated)": -10,
48 51 r"(redundant|pointless|confusing|uninitialized|meaningless|dead)": -10,
49 52 r": (drop|remove|delete|rip out)": -10,
50 53 r": (inherit|rename|simplify|naming|inline)": -10,
51 54 r"(correct doc|docstring|document .* method)": -20,
52 55 r"(abstract|factor|extract|prepare|split|replace| import)": -20,
53 56 r": add.*(function|method|implementation|example)": -10,
54 57 r": (move|extract) .* (to|into|from|out of)": -20,
55 58 r": implement ": -5,
56 59 r": use .* implementation": -20,
60 r": use .* instead of": -20,
61 # code
62 r"_": -10,
63 r"__": -5,
64 r"\(\)": -5,
57 65 r"\S\S\S+\.\S\S\S\S+": -5,
58 r": use .* instead of": -20,
59 r"__": -5,
60 66 # dumb keywords
61 67 r"\S+/\S+:": -10,
62 68 r"\S+\.\S+:": -10,
63 69 # python compatibility
64 70 r"[Pp]y(|thon) ?[23]": -20,
65 71 r"pycompat": -20,
66 72 r"(coerce|convert|encode) .*to (byte|sys|)(s|str|string)": -20,
67 73 # tests
68 74 r"^test(|s|ing|runner|-\S+):": -20,
69 75 r"^(f|hghave|run-tests):": -20,
70 76 r"add.* tests?": -20,
71 77 r"(buildbot|fuzz|mock|ratchet)": -10,
72 78 # drop
73 79 r"^i18n-": -50,
74 80 r"^i18n:.*(hint|comment)": -50,
75 81 r"perf:": -50,
76 82 r"Added.*for changeset": -50,
77 83 r"^_": -50,
78 84 }
79 85
80 86 cutoff = 10
81 87 commits = []
82 88
83 89 groupings = [
84 90 (r"util|parsers|repo|ctx|context|revlog|filelog|alias|cmdutil", "core"),
85 91 (r"revset|template|ui|dirstate|hook|i18n|transaction|wire|vfs", "core"),
86 92 (r"dispatch|exchange|localrepo|streamclone|color|pager", "core"),
87 93 (r"hgweb|paper|coal|gitweb|monoblue|spartan", "hgweb"),
88 94 (r"pull|push|revert|resolve|annotate|bookmark|branch|clone", "commands"),
89 95 (r"commands|commit|config|files|graft|import|log|merge|patch", "commands"),
90 96 (r"phases|status|summary|amend|tag|help|verify", "commands"),
91 97 (r"rebase|mq|convert|eol|histedit|largefiles", "extensions"),
92 98 (r"shelve|unshelve", "extensions"),
93 99 ]
94 100
101 def wikify(desc):
102 desc = desc.replace("(issue", "(Bts:issue")
103 desc = re.sub(r"\b([0-9a-f]{12})\b", r"Cset:\1", desc)
104 # stop ParseError from being recognized as a (nonexistent) wiki page
105 desc = re.sub(r" ([A-Z][a-z]+[A-Z][a-z]+)\b", r" !\1", desc)
106 # prevent wiki markup of magic methods
107 desc = re.sub(r"\b(\S*__\S*)\b", r"`\1`", desc)
108 return desc
109
95 110 def main():
96 111 desc = "example: %(prog)s 4.7.2 --stoprev 4.8rc0"
97 112 ap = argparse.ArgumentParser(description=desc)
98 113 ap.add_argument(
99 114 "startrev",
100 115 metavar="REV",
101 116 type=str,
102 117 help=(
103 118 "Starting revision for the release notes. This revision "
104 119 "won't be included, but later revisions will."
105 120 ),
106 121 )
107 122 ap.add_argument(
108 123 "--stoprev",
109 124 metavar="REV",
110 125 type=str,
111 126 default="@",
112 127 help=(
113 128 "Stop revision for release notes. This revision will be included,"
114 129 " but no later revisions will. This revision needs to be "
115 130 "a descendant of startrev."
116 131 ),
117 132 )
118 133 args = ap.parse_args()
119 134 fromext = subprocess.check_output(
120 135 [
121 136 "hg",
122 137 "--config",
123 138 "extensions.releasenotes=",
124 139 "releasenotes",
125 140 "-r",
126 141 "only(%s, %s)" % (args.stoprev, args.startrev),
127 142 ]
128 143 ).decode("utf-8")
129 144 # Find all release notes from un-relnotes-flagged commits.
130 145 for entry in sorted(
131 146 subprocess.check_output(
132 147 [
133 148 "hg",
134 149 "log",
135 150 "-r",
136 151 "only(%s, %s) - merge()" % (args.stoprev, args.startrev),
137 152 "-T",
138 153 r"{desc|firstline}\n",
139 154 ]
140 155 )
141 156 .decode("utf-8")
142 157 .splitlines()
143 158 ):
144 159 desc = entry.replace("`", "'")
145 160
146 161 score = 0
147 162 for rule, val in rules.items():
148 163 if re.search(rule, desc):
149 164 score += val
150 165
151 desc = desc.replace("(issue", "(Bts:issue")
152
153 166 if score >= cutoff:
154 commits.append(desc)
167 commits.append(wikify(desc))
155 168 # Group unflagged notes.
156 169 groups = {}
157 170 bcs = []
158 171 apis = []
159 172
160 173 for d in commits:
161 174 if "(BC)" in d:
162 175 bcs.append(d)
163 176 if "(API)" in d:
164 177 apis.append(d)
165 178 for rule, g in groupings:
166 179 if re.match(rule, d):
167 180 groups.setdefault(g, []).append(d)
168 181 break
169 182 else:
170 183 groups.setdefault("unsorted", []).append(d)
171 184 print(fromext)
172 185 # print legacy release notes sections
173 186 for g in sorted(groups):
174 187 print("\n=== %s ===" % g)
175 188 for d in sorted(groups[g]):
176 189 print(" * %s" % d)
177 190
178 191 if bcs:
179 192 print("\n=== Behavior Changes ===\n")
180 193
181 194 for d in sorted(bcs):
182 195 print(" * %s" % d)
183 196
184 197 if apis:
185 198 print("\n=== Internal API Changes ===\n")
186 199
187 200 for d in sorted(apis):
188 201 print(" * %s" % d)
189 202
190 203 if __name__ == "__main__":
191 204 main()
@@ -1,317 +1,317 b''
1 1 #require test-repo py3exe
2 2 $ . "$TESTDIR/helpers-testrepo.sh"
3 3
4 4 $ cd $TESTDIR/..
5 5 $ python3 contrib/relnotes 4.4 --stoprev 4.5
6 6 changeset 3398603c5621: unexpected block in release notes directive feature
7 7 New Features
8 8 ============
9 9
10 10 revert --interactive
11 11 --------------------
12 12
13 13 The revert command now accepts the flag --interactive to allow reverting only
14 14 some of the changes to the specified files.
15 15
16 16 Rebase with different destination per source revision
17 17 -----------------------------------------------------
18 18
19 19 Previously, rebase only supports one unique destination. Now "SRC" and
20 20 "ALLSRC" can be used in rebase destination revset to precisely define
21 21 destination per each individual source revision.
22 22
23 23 For example, the following command could move some orphaned changesets to
24 24 reasonable new places so they become no longer orphaned:
25 25
26 26 hg rebase -r 'orphan()-obsolete()' -d 'max((successors(max(roots(ALLSRC) &
27 27 ::SRC)^)-obsolete())::)'
28 28
29 29 Accessing hidden changesets
30 30 ---------------------------
31 31
32 32 Set config option 'experimental.directaccess = True' to access hidden
33 33 changesets from read only commands.
34 34
35 35 githelp extension
36 36 -----------------
37 37
38 38 The "githelp" extension provides the "hg githelp" command. This command
39 39 attempts to convert a "git" command to its Mercurial equivalent. The extension
40 40 can be useful to Git users new to Mercurial.
41 41
42 42 Other Changes
43 43 -------------
44 44
45 45 * When interactive revert is run against a revision other than the working
46 46 directory parent, the diff shown is the diff to *apply* to the working
47 47 directory, rather than the diff to *discard* from the working copy. This is
48 48 in line with related user experiences with 'git' and appears to be less
49 49 confusing with 'ui.interface=curses'.
50 50
51 51 * Let 'hg rebase' avoid content-divergence by skipping obsolete changesets
52 52 (and their descendants) when they are present in the rebase set along with
53 53 one of their successors but none of their successors is in destination.
54 54
55 55 * hgweb now displays phases of non-public changesets
56 56
57 57 * The "HGPLAINEXCEPT" environment variable can now include "color" to allow
58 58 automatic output colorization in otherwise automated environments.
59 59
60 60 * A new unamend command in uncommit extension which undoes the effect of the
61 61 amend command by creating a new changeset which was there before amend and
62 62 moving the changes that were amended to the working directory.
63 63
64 64 * A '--abort' flag to merge command to abort the ongoing merge.
65 65
66 66 * An experimental flag '--rev' to 'hg branch' which can be used to change
67 67 branch of changesets.
68 68
69 69 Backwards Compatibility Changes
70 70 ===============================
71 71
72 72 * "log --follow-first -rREV", which is deprecated, now follows the first
73 73 parent of merge revisions from the specified "REV" just like "log --follow
74 74 -rREV".
75 75
76 76 * "log --follow -rREV FILE.." now follows file history across copies and
77 77 renames.
78 78
79 79 Bug Fixes
80 80 =========
81 81
82 82 Issue 5165
83 83 ----------
84 84
85 85 Bookmark, whose name is longer than 255, can again be exchanged again between
86 86 4.4+ client and servers.
87 87
88 88 Performance Improvements
89 89 ========================
90 90
91 91 * bundle2 read I/O throughput significantly increased.
92 92
93 93 * Significant memory use reductions when reading from bundle2 bundles.
94 94
95 95 On the BSD repository, peak RSS during changegroup application decreased by
96 96 ~185 MB from ~752 MB to ~567 MB.
97 97
98 98 API Changes
99 99 ===========
100 100
101 101 * bundlerepo.bundlerepository.bundle and
102 102 bundlerepo.bundlerepository.bundlefile are now prefixed with an underscore.
103 103
104 104 * Rename bundlerepo.bundlerepository.bundlefilespos to _cgfilespos.
105 105
106 106 * dirstate no longer provides a 'dirs()' method. To test for the existence of
107 107 a directory in the dirstate, use 'dirstate.hasdir(dirname)'.
108 108
109 109 * bundle2 parts are no longer seekable by default.
110 110
111 111 * mapping does not contain all template resources. use context.resource() in
112 112 template functions.
113 113
114 114 * "text=False|True" option is dropped from the vfs interface because of Python
115 115 3 compatibility issue. Use "util.tonativeeol/fromnativeeol()" to convert EOL
116 116 manually.
117 117
118 118 * wireproto.streamres.__init__ no longer accepts a "reader" argument. Use the
119 119 "gen" argument instead.
120 120
121 121 * exchange.getbundlechunks() now returns a 2-tuple instead of just an
122 122 iterator.
123 123
124 124
125 125 === commands ===
126 126 * amend: do not drop missing files (Bts:issue5732)
127 127 * amend: do not take untracked files as modified or clean (Bts:issue5732)
128 128 * amend: update .hgsubstate before committing a memctx (Bts:issue5677)
129 129 * annotate: add support to specify hidden revs if directaccess config is set
130 130 * bookmark: add methods to binary encode and decode bookmark values
131 131 * bookmark: deprecate direct update of a bookmark value
132 132 * bookmark: introduce a 'bookmarks' part
133 133 * bookmark: introduce in advance a variant of the exchange test
134 134 * bookmark: run 'pushkey' hooks after bookmark move, not 'prepushkey'
135 135 * bookmark: use the 'bookmarks' bundle2 part to push bookmark update (Bts:issue5165)
136 136 * bookmarks: add bookmarks to hidden revs if directaccess config is set
137 137 * bookmarks: calculate visibility exceptions only once
138 138 * bookmarks: display the obsfate of hidden revision we create a bookmark on
139 139 * bookmarks: fix pushkey compatibility mode (Bts:issue5777)
140 140 * bookmarks: use context managers for lock and transaction in update()
141 141 * bookmarks: use context managers for locks and transaction in pushbookmark()
142 142 * branch: add a --rev flag to change branch name of given revisions
143 143 * branch: allow changing branch name to existing name if possible
144 144 * clone: add support for storing remotenames while cloning
145 145 * clone: use utility function to write hgrc
146 146 * clonebundle: make it possible to retrieve the initial bundle through largefile
147 147 * commands: use the new API to access hidden changesets in various commands
148 148 * commandserver: restore cwd in case of exception
149 149 * commandserver: unblock SIGCHLD
150 150 * fileset: do not crash by unary negate operation
151 151 * help: deprecate ui.slash in favor of slashpath template filter (Bts:issue5572)
152 152 * log: allow matchfn to be non-null even if both --patch/--stat are off
153 153 * log: build follow-log filematcher at once
154 154 * log: don't expand aliases in revset built from command options
155 155 * log: follow file history across copies even with -rREV (BC) (Bts:issue4959)
156 156 * log: make "slowpath" condition slightly more readable
157 157 * log: make opt2revset table a module constant
158 158 * log: merge getlogrevs() and getgraphlogrevs()
159 159 * log: remove temporary variable 'date' used only once
160 160 * log: resolve --follow thoroughly in getlogrevs()
161 161 * log: resolve --follow with -rREV in cmdutil.getlogrevs()
162 162 * log: rewrite --follow-first -rREV like --follow for consistency (BC)
163 163 * log: simplify 'x or ancestors(x)' expression
164 164 * log: translate column labels at once (Bts:issue5750)
165 165 * log: use revsetlang.formatspec() thoroughly
166 166 * log: use revsetlang.formatspec() to concatenate list expression
167 167 * log: use smartset.slice() to limit number of revisions to be displayed
168 168 * merge: cache unknown dir checks (Bts:issue5716)
169 169 * merge: check created file dirs for path conflicts only once (Bts:issue5716)
170 170 * patch: add within-line color diff capacity
171 171 * patch: catch unexpected case in _inlinediff
172 172 * patch: do not break up multibyte character when highlighting word
173 173 * patch: improve heuristics to not take the word "diff" as header (Bts:issue1879)
174 174 * patch: reverse _inlinediff output for consistency
175 175 * pull: clarify that -u only updates linearly
176 176 * pull: hold wlock for the full operation when --update is used
177 177 * pull: retrieve bookmarks through the binary part when possible
178 178 * pull: store binary node in pullop.remotebookmarks
179 179 * push: include a 'check:bookmarks' part when possible
180 180 * push: restrict common discovery to the pushed set
181 181 * revert: do not reverse hunks in interactive when REV is not parent (Bts:issue5096)
182 182 * revert: support reverting to hidden cset if directaccess config is set
183 183
184 184 === core ===
185 185 * color: respect HGPLAINEXCEPT=color to allow colors while scripting (Bts:issue5749)
186 186 * dirstate: add explicit methods for querying directories (API)
187 187 * dispatch: abort if early boolean options can't be parsed
188 188 * dispatch: add HGPLAIN=+strictflags to restrict early parsing of global options
189 189 * dispatch: add option to not strip command args parsed by _earlygetopt()
190 190 * dispatch: alias --repo to --repository while parsing early options
191 191 * dispatch: fix early parsing of short option with value like -R=foo
192 192 * dispatch: handle IOError when writing to stderr
193 193 * dispatch: stop parsing of early boolean option at "--"
194 194 * dispatch: verify result of early command parsing
195 195 * exchange: return bundle info from getbundlechunks() (API)
196 196 * filelog: add the ability to report the user facing name
197 197 * localrepo: specify optional callback parameter to pathauditor as a keyword
198 198 * revlog: choose between ifh and dfh once for all
199 199 * revlog: don't use slicing to return parents
200 200 * revlog: group delta computation methods under _deltacomputer object
201 201 * revlog: group revision info into a dedicated structure
202 202 * revlog: introduce 'deltainfo' to distinguish from 'delta'
203 203 * revlog: rename 'rev' to 'base', as it is the base revision
204 204 * revlog: separate diff computation from the collection of other info
205 205 * revset: evaluate filesets against each revision for 'file()' (Bts:issue5778)
206 206 * revset: parse x^:: as (x^):: (Bts:issue5764)
207 207 * streamclone: add support for bundle2 based stream clone
208 208 * streamclone: add support for cloning non append-only file
209 209 * streamclone: also stream caches to the client
210 210 * streamclone: define first iteration of version 2 of stream format
211 211 * streamclone: move wire protocol status code from wireproto command
212 212 * streamclone: rework canperformstreamclone
213 213 * streamclone: tests phase exchange during stream clone
214 214 * streamclone: use readexactly when reading stream v2
215 215 * templater: fix crash by empty group expression
216 216 * templater: keep default resources per template engine (API)
217 217 * templater: look up symbols/resources as if they were separated (Bts:issue5699)
218 218 * transaction: register summary callbacks only at start of transaction (BC)
219 219 * util: whitelist NTFS for hardlink creation (Bts:issue4580)
220 220 * vfs: drop text mode flag (API)
221 221 * wireproto: drop support for reader interface from streamres (API)
222 222
223 223 === extensions ===
224 224 * convert: restore the ability to use bzr < 2.6.0 (Bts:issue5733)
225 225 * histedit: add support to output nodechanges using formatter
226 226 * largefiles: add a 'debuglfput' command to put largefile into the store
227 227 * largefiles: add support for 'largefiles://' url scheme
228 228 * largefiles: allow to run 'debugupgraderepo' on repo with largefiles
229 229 * largefiles: explicitly set the source and sink types to 'hg' for lfconvert
230 230 * largefiles: modernize how capabilities are added to the wire protocol
231 231 * largefiles: pay attention to dropped standin files when updating largefiles
232 232 * rebase: add concludememorynode(), and call it when rebasing in-memory
233 233 * rebase: add the --inmemory option flag; assign a wctx object for the rebase
234 234 * rebase: add ui.log calls for whether IMM used, whether rebasing WCP
235 235 * rebase: disable 'inmemory' if the rebaseset contains the working copy
236 236 * rebase: do not bail on uncomitted changes if rebasing in-memory
237 237 * rebase: do not update if IMM; instead, set the overlaywctx's parents
238 238 * rebase: don't run IMM if running rebase in a transaction
239 239 * rebase: don't take out a dirstate guard for in-memory rebase
240 240 * rebase: drop --style option
241 241 * rebase: enable multidest by default
242 242 * rebase: exclude descendants of obsoletes w/o a successor in dest (Bts:issue5300)
243 243 * rebase: fix for hgsubversion
244 244 * rebase: pass the wctx object (IMM or on-disk) to merge.update
245 245 * rebase: pass wctx to rebasenode()
246 246 * rebase: rerun a rebase on-disk if IMM merge conflicts arise
247 247 * rebase: switch ui.log calls to common style
248 248 * rebase: use fm.formatlist() and fm.formatdict() to support user template
249 249
250 250 === hgweb ===
251 251 * hgweb: disable diff.noprefix option for diffstat
252 252 * hgweb: drop support of browsers that don't understand <canvas> (BC)
253 253 * hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
254 254 * hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC)
255 255
256 256 === unsorted ===
257 257 * archive: add support to specify hidden revs if directaccess config is set
258 258 * atomicupdate: add an experimental option to use atomictemp when updating
259 259 * bundle2: don't use seekable bundle2 parts by default (Bts:issue5691)
260 260 * bundle: allow bundlerepo to support alternative manifest implementations
261 261 * changelog: introduce a 'tiprev' method
262 262 * changelog: use 'tiprev()' in 'tip()'
263 263 * completion: add support for new "amend" command
264 264 * crecord: fix revert -ir '.^' crash caused by 3649c3f2cd
265 265 * debugssl: convert port number to int (Bts:issue5757)
266 266 * diff: disable diff.noprefix option for diffstat (Bts:issue5759)
267 267 * evolution: make reporting of new unstable changesets optional
268 268 * extdata: abort if external command exits with non-zero status (BC)
269 * fancyopts: add early-options parser compatible with getopt()
270 269 * graphlog: add another graph node type, unstable, using character "*" (BC)
271 270 * hgdemandimport: use correct hyperlink to python-bug in comments (Bts:issue5765)
272 271 * httppeer: add support for tracing all http request made by the peer
273 272 * identify: document -r. explicitly how to disable wdir scanning (Bts:issue5622)
274 273 * lfs: register config options
275 274 * match: do not weirdly include explicit files excluded by -X option
276 275 * memfilectx: make changectx argument mandatory in constructor (API)
277 276 * morestatus: don't crash with different drive letters for repo.root and CWD
278 277 * outgoing: respect ":pushurl" paths (Bts:issue5365)
279 278 * remove: print message for each file in verbose mode only while using '-A' (BC)
280 * rewriteutil: use precheck() in uncommit and amend commands
281 279 * scmutil: don't try to delete origbackup symlinks to directories (Bts:issue5731)
282 280 * sshpeer: add support for request tracing
283 281 * subrepo: add config option to reject any subrepo operations (SEC)
284 282 * subrepo: disable git and svn subrepos by default (BC) (SEC)
283 * subrepo: disallow symlink traversal across subrepo mount point (SEC)
285 284 * subrepo: extend config option to disable subrepos by type (SEC)
286 285 * subrepo: handle 'C:' style paths on the command line (Bts:issue5770)
287 286 * subrepo: use per-type config options to enable subrepos
288 287 * svnsubrepo: check if subrepo is missing when checking dirty state (Bts:issue5657)
289 288 * test-bookmarks-pushpull: stabilize for Windows
290 289 * test-run-tests: stabilize the test (Bts:issue5735)
290 * tests: show symlink traversal across subrepo mount point (SEC)
291 291 * tr-summary: keep a weakref to the unfiltered repository
292 292 * unamend: fix command summary line
293 293 * uncommit: unify functions _uncommitdirstate and _unamenddirstate to one
294 294 * update: fix crash on bare update when directaccess is enabled
295 295 * update: support updating to hidden cset if directaccess config is set
296 296
297 297 === Behavior Changes ===
298 298
299 299 * extdata: abort if external command exits with non-zero status (BC)
300 300 * graphlog: add another graph node type, unstable, using character "*" (BC)
301 301 * hgweb: drop support of browsers that don't understand <canvas> (BC)
302 302 * hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
303 303 * hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC)
304 304 * log: follow file history across copies even with -rREV (BC) (Bts:issue4959)
305 305 * log: rewrite --follow-first -rREV like --follow for consistency (BC)
306 306 * remove: print message for each file in verbose mode only while using '-A' (BC)
307 307 * subrepo: disable git and svn subrepos by default (BC) (SEC)
308 308 * transaction: register summary callbacks only at start of transaction (BC)
309 309
310 310 === Internal API Changes ===
311 311
312 312 * dirstate: add explicit methods for querying directories (API)
313 313 * exchange: return bundle info from getbundlechunks() (API)
314 314 * memfilectx: make changectx argument mandatory in constructor (API)
315 315 * templater: keep default resources per template engine (API)
316 316 * vfs: drop text mode flag (API)
317 317 * wireproto: drop support for reader interface from streamres (API)
General Comments 0
You need to be logged in to leave comments. Login now