Mercurial > hg
annotate contrib/relnotes @ 45095:8e04607023e5
procutil: ensure that procutil.std{out,err}.write() writes all bytes
Python 3 offers different kind of streams and it’s not guaranteed for all of
them that calling write() writes all bytes.
When Python is started in unbuffered mode, sys.std{out,err}.buffer are
instances of io.FileIO, whose write() can write less bytes for
platform-specific reasons (e.g. Linux has a 0x7ffff000 bytes maximum and could
write less if interrupted by a signal; when writing to Windows consoles, it’s
limited to 32767 bytes to avoid the "not enough space" error). This can lead to
silent loss of data, both when using sys.std{out,err}.buffer (which may in fact
not be a buffered stream) and when using the text streams sys.std{out,err}
(I’ve created a CPython bug report for that:
https://bugs.python.org/issue41221).
Python may fix the problem at some point. For now, we implement our own wrapper
for procutil.std{out,err} that calls the raw stream’s write() method until all
bytes have been written. We don’t use sys.std{out,err} for larger writes, so I
think it’s not worth the effort to patch them.
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Fri, 10 Jul 2020 12:27:58 +0200 |
parents | 99e231afc29c |
children |
rev | line source |
---|---|
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2 """Generate release notes from our commit log. |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4 This uses the relnotes extension directives when they're available, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
5 and falls back to our old pre-relnotes logic that used to live in the |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
6 release-tools repo. |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
7 """ |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
8 import argparse |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 import re |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
10 import subprocess |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
11 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
12 rules = { |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
13 # keep |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
14 r"\(issue": 100, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
15 r"\(BC\)": 100, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 r"\(API\)": 100, |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
17 r"\(SEC\)": 100, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
18 # core commands, bump up |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 r"(commit|files|log|pull|push|patch|status|tag|summary)(|s|es):": 20, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
20 r"(annotate|alias|branch|bookmark|clone|graft|import|verify).*:": 20, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
21 # extensions, bump up |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
22 r"(mq|shelve|rebase):": 20, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
23 # newsy |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
24 r": deprecate": 20, |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
25 r": new.*(extension|flag|module)": 10, |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
26 r"( ability|command|feature|option|support)": 10, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
27 # experimental |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
28 r"hg-experimental": 20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
29 r"(from|graduate).*experimental": 15, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
30 r"(hide|mark).*experimental": -10, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
31 # bug-like? |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
32 r"(fix|don't break|improve)": 7, |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
33 r"(not|n't|avoid|fix|prevent).*crash": 10, |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
34 r"vulnerab": 10, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
35 # boring stuff, bump down |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
36 r"^contrib": -5, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
37 r"debug": -5, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
38 r"help": -5, |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
39 r"minor": -5, |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
40 r"(doc|metavar|bundle2|obsolete|obsmarker|rpm|setup|debug\S+:)": -15, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
41 r"(check-code|check-commit|check-config|import-checker)": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
42 r"(flake8|lintian|pyflakes|pylint)": -20, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
43 # cleanups and refactoring |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
44 r"(clean ?up|white ?space|spelling|quoting)": -20, |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
45 r"(flatten|dedent|indent|nesting|unnest)": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
46 r"(typo|hint|note|comment|TODO|FIXME)": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
47 r"(style:|convention|one-?liner)": -20, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
48 r"(argument|absolute_import|attribute|assignment|mutable)": -15, |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
49 r"(scope|True|False)": -10, |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
50 r"(unused|useless|unnecessar|superfluous|duplicate|deprecated)": -10, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
51 r"(redundant|pointless|confusing|uninitialized|meaningless|dead)": -10, |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
52 r": (drop|remove|delete|rip out)": -10, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
53 r": (inherit|rename|simplify|naming|inline)": -10, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
54 r"(correct doc|docstring|document .* method)": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
55 r"(abstract|factor|extract|prepare|split|replace| import)": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
56 r": add.*(function|method|implementation|example)": -10, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
57 r": (move|extract) .* (to|into|from|out of)": -20, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
58 r": implement ": -5, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
59 r": use .* implementation": -20, |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
60 r": use .* instead of": -20, |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
61 # code |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
62 r"_": -10, |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
63 r"__": -5, |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
64 r"\(\)": -5, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
65 r"\S\S\S+\.\S\S\S\S+": -5, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
66 # dumb keywords |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
67 r"\S+/\S+:": -10, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
68 r"\S+\.\S+:": -10, |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
69 # python compatibility |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
70 r"[Pp]y(|thon) ?[23]": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
71 r"pycompat": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
72 r"(coerce|convert|encode) .*to (byte|sys|)(s|str|string)": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
73 # tests |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
74 r"^test(|s|ing|runner|-\S+):": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
75 r"^(f|hghave|run-tests):": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
76 r"add.* tests?": -20, |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
77 r"(buildbot|fuzz|mock|ratchet)": -10, |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
78 # drop |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
79 r"^i18n-": -50, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
80 r"^i18n:.*(hint|comment)": -50, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
81 r"perf:": -50, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
82 r"Added.*for changeset": -50, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
83 r"^_": -50, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
84 } |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
85 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
86 cutoff = 10 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
87 commits = [] |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
88 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
89 groupings = [ |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
90 (r"util|parsers|repo|ctx|context|revlog|filelog|alias|cmdutil", "core"), |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
91 (r"revset|template|ui|dirstate|hook|i18n|transaction|wire|vfs", "core"), |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
92 (r"dispatch|exchange|localrepo|streamclone|color|pager", "core"), |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
93 (r"hgweb|paper|coal|gitweb|monoblue|spartan", "hgweb"), |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
94 (r"pull|push|revert|resolve|annotate|bookmark|branch|clone", "commands"), |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
95 (r"commands|commit|config|files|graft|import|log|merge|patch", "commands"), |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
96 (r"phases|status|summary|amend|tag|help|verify", "commands"), |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
97 (r"rebase|mq|convert|eol|histedit|largefiles", "extensions"), |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
98 (r"shelve|unshelve", "extensions"), |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
99 ] |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
100 |
43659
99e231afc29c
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41518
diff
changeset
|
101 |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
102 def wikify(desc): |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
103 desc = desc.replace("(issue", "(Bts:issue") |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
104 desc = re.sub(r"\b([0-9a-f]{12})\b", r"Cset:\1", desc) |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
105 # stop ParseError from being recognized as a (nonexistent) wiki page |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
106 desc = re.sub(r" ([A-Z][a-z]+[A-Z][a-z]+)\b", r" !\1", desc) |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
107 # prevent wiki markup of magic methods |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
108 desc = re.sub(r"\b(\S*__\S*)\b", r"`\1`", desc) |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
109 return desc |
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
110 |
43659
99e231afc29c
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41518
diff
changeset
|
111 |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
112 def main(): |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
113 desc = "example: %(prog)s 4.7.2 --stoprev 4.8rc0" |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
114 ap = argparse.ArgumentParser(description=desc) |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
115 ap.add_argument( |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
116 "startrev", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
117 metavar="REV", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
118 type=str, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
119 help=( |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
120 "Starting revision for the release notes. This revision " |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
121 "won't be included, but later revisions will." |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
122 ), |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
123 ) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
124 ap.add_argument( |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
125 "--stoprev", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
126 metavar="REV", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
127 type=str, |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
128 default="@", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
129 help=( |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
130 "Stop revision for release notes. This revision will be included," |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
131 " but no later revisions will. This revision needs to be " |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
132 "a descendant of startrev." |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
133 ), |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
134 ) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
135 args = ap.parse_args() |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
136 fromext = subprocess.check_output( |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
137 [ |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
138 "hg", |
39365
659e2bbd0c20
relnotes: enable extension when running releasenotes command
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39352
diff
changeset
|
139 "--config", |
659e2bbd0c20
relnotes: enable extension when running releasenotes command
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39352
diff
changeset
|
140 "extensions.releasenotes=", |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
141 "releasenotes", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
142 "-r", |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
143 "only(%s, %s)" % (args.stoprev, args.startrev), |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
144 ] |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
145 ).decode("utf-8") |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
146 # Find all release notes from un-relnotes-flagged commits. |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
147 for entry in sorted( |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
148 subprocess.check_output( |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
149 [ |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
150 "hg", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
151 "log", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
152 "-r", |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
153 "only(%s, %s) - merge()" % (args.stoprev, args.startrev), |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
154 "-T", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
155 r"{desc|firstline}\n", |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
156 ] |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
157 ) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
158 .decode("utf-8") |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
159 .splitlines() |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
160 ): |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
161 desc = entry.replace("`", "'") |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
162 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
163 score = 0 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
164 for rule, val in rules.items(): |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
165 if re.search(rule, desc): |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
166 score += val |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
167 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
168 if score >= cutoff: |
41518
530d211ae9a8
relnotes: more improvements
Anton Shestakov <av6@dwimlabs.net>
parents:
40452
diff
changeset
|
169 commits.append(wikify(desc)) |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
170 # Group unflagged notes. |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
171 groups = {} |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
172 bcs = [] |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
173 apis = [] |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
174 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
175 for d in commits: |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
176 if "(BC)" in d: |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
177 bcs.append(d) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
178 if "(API)" in d: |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
179 apis.append(d) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
180 for rule, g in groupings: |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
181 if re.match(rule, d): |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
182 groups.setdefault(g, []).append(d) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
183 break |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
184 else: |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
185 groups.setdefault("unsorted", []).append(d) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
186 print(fromext) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
187 # print legacy release notes sections |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
188 for g in sorted(groups): |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
189 print("\n=== %s ===" % g) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
190 for d in sorted(groups[g]): |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
191 print(" * %s" % d) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
192 |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
193 if bcs: |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
194 print("\n=== Behavior Changes ===\n") |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
195 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
196 for d in sorted(bcs): |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
197 print(" * %s" % d) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
198 |
40452
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
199 if apis: |
683e99f0b30c
relnotes: various tweaks for release notes
Anton Shestakov <av6@dwimlabs.net>
parents:
39365
diff
changeset
|
200 print("\n=== Internal API Changes ===\n") |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
201 |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
202 for d in sorted(apis): |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
203 print(" * %s" % d) |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
204 |
43659
99e231afc29c
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41518
diff
changeset
|
205 |
39352
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
206 if __name__ == "__main__": |
035517d48865
contrib: import the relnotes script from the release-tools repo
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
207 main() |