Mercurial > hg
annotate hgext/releasenotes.py @ 44647:99fa161a883c
phabricator: extract the logic to amend diff properties to a function
This will be needed on a separate code path when dealing with folding revisions.
And since we know that will involve adding multiple local commmits to the diff
properties instead of just one, restructure the logic slightly to allow it.
Differential Revision: https://phab.mercurial-scm.org/D8312
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 16 Mar 2020 14:33:35 -0400 |
parents | d4c1501225c4 |
children | 4c1b4805db57 |
rev | line source |
---|---|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 # Copyright 2017-present Gregory Szorc <gregory.szorc@gmail.com> |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 # |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 # GNU General Public License version 2 or any later version. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 """generate release notes from commit messages (EXPERIMENTAL) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
8 It is common to maintain files detailing changes in a project between |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
9 releases. Maintaining these files can be difficult and time consuming. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
10 The :hg:`releasenotes` command provided by this extension makes the |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
11 process simpler by automating it. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
12 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
13 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
14 from __future__ import absolute_import |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
15 |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
16 import difflib |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
17 import errno |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
18 import re |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
19 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
20 from mercurial.i18n import _ |
43085
eef9a2d67051
py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
21 from mercurial.pycompat import open |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 from mercurial import ( |
43898
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43117
diff
changeset
|
23 cmdutil, |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
24 config, |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
25 error, |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
26 minirst, |
34811
a542ad320adb
releasenotes: don't abort is there is a bad formatted entry for releasenotes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34810
diff
changeset
|
27 node, |
35003
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
28 pycompat, |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
29 registrar, |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
30 scmutil, |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
31 util, |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
32 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
33 from mercurial.utils import stringutil |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 cmdtable = {} |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
36 command = registrar.command(cmdtable) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
37 |
34812
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
38 try: |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
39 import fuzzywuzzy.fuzz as fuzz |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
40 |
34812
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
41 fuzz.token_set_ratio |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
42 except ImportError: |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
43 fuzz = None |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
44 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
45 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
46 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
47 # be specifying the version(s) of Mercurial they are tested with, or |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
48 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
49 testedwith = b'ships-with-hg-core' |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
51 DEFAULT_SECTIONS = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
52 (b'feature', _(b'New Features')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
53 (b'bc', _(b'Backwards Compatibility Changes')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
54 (b'fix', _(b'Bug Fixes')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
55 (b'perf', _(b'Performance Improvements')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
56 (b'api', _(b'API Changes')), |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
57 ] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 |
41532
bd3f03d8cc9f
global: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40293
diff
changeset
|
59 RE_DIRECTIVE = re.compile(br'^\.\. ([a-zA-Z0-9_]+)::\s*([^$]+)?$') |
40235
a7cdd81f191b
releasenotes: fix remaining bytes/unicode issues caught by tests
Augie Fackler <augie@google.com>
parents:
40234
diff
changeset
|
60 RE_ISSUE = br'\bissue ?[0-9]{4,6}(?![0-9])\b' |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
62 BULLET_SECTION = _(b'Other Changes') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
64 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 class parsedreleasenotes(object): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 def __init__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 self.sections = {} |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 def __contains__(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
70 return section in self.sections |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
71 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 def __iter__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 return iter(sorted(self.sections)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 def addtitleditem(self, section, title, paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
76 """Add a titled release note entry.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 self.sections.setdefault(section, ([], [])) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 self.sections[section][0].append((title, paragraphs)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 def addnontitleditem(self, section, paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
81 """Adds a non-titled release note entry. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
82 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 Will be rendered as a bullet point. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 self.sections.setdefault(section, ([], [])) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 self.sections[section][1].append(paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 def titledforsection(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 """Returns titled entries in a section. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
90 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
91 Returns a list of (title, paragraphs) tuples describing sub-sections. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
93 return self.sections.get(section, ([], []))[0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
94 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 def nontitledforsection(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 """Returns non-titled, bulleted paragraphs in a section.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 return self.sections.get(section, ([], []))[1] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 def hastitledinsection(self, section, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 return any(t[0] == title for t in self.titledforsection(section)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 def merge(self, ui, other): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 """Merge another instance into this one. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 This is used to combine multiple sources of release notes together. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 """ |
34813
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
107 if not fuzz: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
108 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
109 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 b"module 'fuzzywuzzy' not found, merging of similar " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 b"releasenotes is disabled\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
112 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
113 ) |
34813
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
114 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 for section in other: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
116 existingnotes = converttitled( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
117 self.titledforsection(section) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
118 ) + convertnontitled(self.nontitledforsection(section)) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
119 for title, paragraphs in other.titledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 if self.hastitledinsection(section, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
121 # TODO prompt for resolution if different and running in |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 # interactive mode. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
123 ui.write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
124 _(b'%s already exists in %s section; ignoring\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
125 % (title, section) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
126 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
129 incoming_str = converttitled([(title, paragraphs)])[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
130 if section == b'fix': |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
131 issue = getissuenum(incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
132 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
133 if findissue(ui, existingnotes, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
134 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
135 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
136 if similar(ui, existingnotes, incoming_str): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
137 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
138 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
139 self.addtitleditem(section, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
140 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
141 for paragraphs in other.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
142 if paragraphs in self.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
143 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
144 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
145 incoming_str = convertnontitled([paragraphs])[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 if section == b'fix': |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
147 issue = getissuenum(incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
148 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
149 if findissue(ui, existingnotes, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
150 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
151 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
152 if similar(ui, existingnotes, incoming_str): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
153 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
154 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
155 self.addnontitleditem(section, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
156 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
157 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 class releasenotessections(object): |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
159 def __init__(self, ui, repo=None): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
160 if repo: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
161 sections = util.sortdict(DEFAULT_SECTIONS) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
162 custom_sections = getcustomadmonitions(repo) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
163 if custom_sections: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
164 sections.update(custom_sections) |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
165 self._sections = list(pycompat.iteritems(sections)) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
166 else: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
167 self._sections = list(DEFAULT_SECTIONS) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
168 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
169 def __iter__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
170 return iter(self._sections) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
171 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
172 def names(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
173 return [t[0] for t in self._sections] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
174 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
175 def sectionfromtitle(self, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
176 for name, value in self._sections: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
177 if value == title: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
178 return name |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
179 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
180 return None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
181 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
182 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
183 def converttitled(titledparagraphs): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
184 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
185 Convert titled paragraphs to strings |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
186 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
187 string_list = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
188 for title, paragraphs in titledparagraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
189 lines = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
190 for para in paragraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
191 lines.extend(para) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
192 string_list.append(b' '.join(lines)) |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
193 return string_list |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
194 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
195 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
196 def convertnontitled(nontitledparagraphs): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
197 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
198 Convert non-titled bullets to strings |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
199 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
200 string_list = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
201 for paragraphs in nontitledparagraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
202 lines = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
203 for para in paragraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
204 lines.extend(para) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
205 string_list.append(b' '.join(lines)) |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
206 return string_list |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
207 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
208 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
209 def getissuenum(incoming_str): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
210 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
211 Returns issue number from the incoming string if it exists |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
212 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
213 issue = re.search(RE_ISSUE, incoming_str, re.IGNORECASE) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
214 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
215 issue = issue.group() |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
216 return issue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
217 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
218 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
219 def findissue(ui, existing, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
220 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
221 Returns true if issue number already exists in notes. |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
222 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
223 if any(issue in s for s in existing): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
224 ui.write(_(b'"%s" already exists in notes; ignoring\n') % issue) |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
225 return True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
226 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
227 return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
228 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
229 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
230 def similar(ui, existing, incoming_str): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
231 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
232 Returns true if similar note found in existing notes. |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
233 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
234 if len(incoming_str.split()) > 10: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
235 merge = similaritycheck(incoming_str, existing) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
236 if not merge: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
237 ui.write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
238 _(b'"%s" already exists in notes file; ignoring\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
239 % incoming_str |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
240 ) |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
241 return True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
242 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
243 return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
244 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
245 return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
246 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
247 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
248 def similaritycheck(incoming_str, existingnotes): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
249 """ |
34780
070ba789f4d0
releasenotes: fix documentation of similaritycheck()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34736
diff
changeset
|
250 Returns false when note fragment can be merged to existing notes. |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
251 """ |
34812
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
252 # fuzzywuzzy not present |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
253 if not fuzz: |
34810
44bd29168d14
releasenotes: make the import of fuzzywuzzy optional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34780
diff
changeset
|
254 return True |
44bd29168d14
releasenotes: make the import of fuzzywuzzy optional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34780
diff
changeset
|
255 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
256 merge = True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
257 for bullet in existingnotes: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
258 score = fuzz.token_set_ratio(incoming_str, bullet) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
259 if score > 75: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
260 merge = False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
261 break |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
262 return merge |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
263 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
264 |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
265 def getcustomadmonitions(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
266 ctx = repo[b'.'] |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
267 p = config.config() |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
268 |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
269 def read(f, sections=None, remap=None): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
270 if f in ctx: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
271 data = ctx[f].data() |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
272 p.parse(f, data, sections, remap, read) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
273 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
274 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
275 _(b".hgreleasenotes file \'%s\' not found") % repo.pathto(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
276 ) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
277 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
278 if b'.hgreleasenotes' in ctx: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 read(b'.hgreleasenotes') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 return p[b'sections'] |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
281 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
282 |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
283 def checkadmonitions(ui, repo, directives, revs): |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
284 """ |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
285 Checks the commit messages for admonitions and their validity. |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
286 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
287 .. abcd:: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
288 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
289 First paragraph under this admonition |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
290 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
291 For this commit message, using `hg releasenotes -r . --check` |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
292 returns: Invalid admonition 'abcd' present in changeset 3ea92981e103 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
293 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
294 As admonition 'abcd' is neither present in default nor custom admonitions |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
295 """ |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
296 for rev in revs: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
297 ctx = repo[rev] |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
298 admonition = re.search(RE_DIRECTIVE, ctx.description()) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
299 if admonition: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
300 if admonition.group(1) in directives: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
301 continue |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
302 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
303 ui.write( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
304 _(b"Invalid admonition '%s' present in changeset %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
305 % (admonition.group(1), ctx.hex()[:12]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
306 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
307 sim = lambda x: difflib.SequenceMatcher( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
308 None, admonition.group(1), x |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
309 ).ratio() |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
310 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
311 similar = [s for s in directives if sim(s) > 0.6] |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
312 if len(similar) == 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
313 ui.write(_(b"(did you mean %s?)\n") % similar[0]) |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
314 elif similar: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
315 ss = b", ".join(sorted(similar)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
316 ui.write(_(b"(did you mean one of %s?)\n") % ss) |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
317 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
318 |
33940
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
319 def _getadmonitionlist(ui, sections): |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
320 for section in sections: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
321 ui.write(b"%s: %s\n" % (section[0], section[1])) |
33940
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
322 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
323 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
324 def parsenotesfromrevisions(repo, directives, revs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
325 notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 for rev in revs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
328 ctx = repo[rev] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
329 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
330 blocks, pruned = minirst.parse( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
331 ctx.description(), admonitions=directives |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
332 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
333 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
334 for i, block in enumerate(blocks): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
335 if block[b'type'] != b'admonition': |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
336 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
337 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
338 directive = block[b'admonitiontitle'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
339 title = block[b'lines'][0].strip() if block[b'lines'] else None |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
340 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
341 if i + 1 == len(blocks): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
342 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
343 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
344 b'changeset %s: release notes directive %s ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
345 b'lacks content' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
346 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
347 % (ctx, directive) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
348 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
349 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
350 # Now search ahead and find all paragraphs attached to this |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
351 # admonition. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
352 paragraphs = [] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
353 for j in range(i + 1, len(blocks)): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
354 pblock = blocks[j] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
356 # Margin blocks may appear between paragraphs. Ignore them. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
357 if pblock[b'type'] == b'margin': |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
358 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
360 if pblock[b'type'] == b'admonition': |
36770
a5891e94bfe1
releasenotes: allow notes for multiple directives in a single changeset
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36769
diff
changeset
|
361 break |
a5891e94bfe1
releasenotes: allow notes for multiple directives in a single changeset
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36769
diff
changeset
|
362 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
363 if pblock[b'type'] != b'paragraph': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
364 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
365 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
366 b'changeset %s: unexpected block in release ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
367 b'notes directive %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
368 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
369 % (ctx, directive) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
370 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
371 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
372 if pblock[b'indent'] > 0: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
373 paragraphs.append(pblock[b'lines']) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
374 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
375 break |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
376 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
377 # TODO consider using title as paragraph for more concise notes. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
378 if not paragraphs: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
379 repo.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
380 _(b"error parsing releasenotes for revision: '%s'\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
381 % node.hex(ctx.node()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
382 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
383 if title: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
384 notes.addtitleditem(directive, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
386 notes.addnontitleditem(directive, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
387 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
388 return notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
390 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
391 def parsereleasenotesfile(sections, text): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
392 """Parse text content containing generated release notes.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 blocks = minirst.parse(text)[0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
396 |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
397 def gatherparagraphsbullets(offset, title=False): |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
398 notefragment = [] |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
399 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
400 for i in range(offset + 1, len(blocks)): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
401 block = blocks[i] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
402 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
403 if block[b'type'] == b'margin': |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
404 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
405 elif block[b'type'] == b'section': |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
406 break |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
407 elif block[b'type'] == b'bullet': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
408 if block[b'indent'] != 0: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
409 raise error.Abort(_(b'indented bullet lists not supported')) |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
410 if title: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
411 lines = [l[1:].strip() for l in block[b'lines']] |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
412 notefragment.append(lines) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
413 continue |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
414 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
415 lines = [[l[1:].strip() for l in block[b'lines']]] |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
416 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
417 for block in blocks[i + 1 :]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
418 if block[b'type'] in (b'bullet', b'section'): |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
419 break |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
420 if block[b'type'] == b'paragraph': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
421 lines.append(block[b'lines']) |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
422 notefragment.append(lines) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
423 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
424 elif block[b'type'] != b'paragraph': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
425 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
426 _(b'unexpected block type in release notes: %s') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
427 % block[b'type'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
428 ) |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
429 if title: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
430 notefragment.append(block[b'lines']) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
431 |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
432 return notefragment |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
433 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
434 currentsection = None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
435 for i, block in enumerate(blocks): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
436 if block[b'type'] != b'section': |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
437 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
438 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
439 title = block[b'lines'][0] |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
440 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
441 # TODO the parsing around paragraphs and bullet points needs some |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
442 # work. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
443 if block[b'underline'] == b'=': # main section |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
444 name = sections.sectionfromtitle(title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
445 if not name: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
446 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
447 _(b'unknown release notes section: %s') % title |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
448 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
449 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
450 currentsection = name |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
451 bullet_points = gatherparagraphsbullets(i) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
452 if bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
453 for para in bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
454 notes.addnontitleditem(currentsection, para) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
455 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
456 elif block[b'underline'] == b'-': # sub-section |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
457 if title == BULLET_SECTION: |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
458 bullet_points = gatherparagraphsbullets(i) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
459 for para in bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
460 notes.addnontitleditem(currentsection, para) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
461 else: |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
462 paragraphs = gatherparagraphsbullets(i, True) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
463 notes.addtitleditem(currentsection, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
464 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
465 raise error.Abort(_(b'unsupported section type for %s') % title) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
466 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
467 return notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
468 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
469 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
470 def serializenotes(sections, notes): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
471 """Serialize release notes from parsed fragments and notes. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
472 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
473 This function essentially takes the output of ``parsenotesfromrevisions()`` |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
474 and ``parserelnotesfile()`` and produces output combining the 2. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
475 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
476 lines = [] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
477 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
478 for sectionname, sectiontitle in sections: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
479 if sectionname not in notes: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
480 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
481 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
482 lines.append(sectiontitle) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
483 lines.append(b'=' * len(sectiontitle)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
484 lines.append(b'') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
485 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
486 # First pass to emit sub-sections. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
487 for title, paragraphs in notes.titledforsection(sectionname): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
488 lines.append(title) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
489 lines.append(b'-' * len(title)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
490 lines.append(b'') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
491 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
492 for i, para in enumerate(paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
493 if i: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
494 lines.append(b'') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
495 lines.extend( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
496 stringutil.wrap(b' '.join(para), width=78).splitlines() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
497 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
498 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
499 lines.append(b'') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
500 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
501 # Second pass to emit bullet list items. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
502 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
503 # If the section has titled and non-titled items, we can't |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
504 # simply emit the bullet list because it would appear to come |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
505 # from the last title/section. So, we emit a new sub-section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
506 # for the non-titled items. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
507 nontitled = notes.nontitledforsection(sectionname) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
508 if notes.titledforsection(sectionname) and nontitled: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
509 # TODO make configurable. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
510 lines.append(BULLET_SECTION) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
511 lines.append(b'-' * len(BULLET_SECTION)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
512 lines.append(b'') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
513 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
514 for paragraphs in nontitled: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
515 lines.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
516 stringutil.wrap( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
517 b' '.join(paragraphs[0]), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
518 width=78, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
519 initindent=b'* ', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
520 hangindent=b' ', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
521 ).splitlines() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
522 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
523 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
524 for para in paragraphs[1:]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
525 lines.append(b'') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
526 lines.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
527 stringutil.wrap( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
528 b' '.join(para), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
529 width=78, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
530 initindent=b' ', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
531 hangindent=b' ', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
532 ).splitlines() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
533 ) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
534 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
535 lines.append(b'') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
536 |
33784
589fda7895da
releasenotes: minor bug fix for index error while serializing
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33698
diff
changeset
|
537 if lines and lines[-1]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
538 lines.append(b'') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
539 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
540 return b'\n'.join(lines) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
541 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
542 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
543 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
544 b'releasenotes', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
545 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
546 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
547 b'r', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
548 b'rev', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
549 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
550 _(b'revisions to process for release notes'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
551 _(b'REV'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
552 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
553 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
554 b'c', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
555 b'check', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
556 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
557 _(b'checks for validity of admonitions (if any)'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
558 _(b'REV'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
560 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
561 b'l', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
562 b'list', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
563 False, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
564 _(b'list the available admonitions with their title'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
565 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
566 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
567 ], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
568 _(b'hg releasenotes [-r REV] [-c] FILE'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
569 helpcategory=command.CATEGORY_CHANGE_NAVIGATION, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
570 ) |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
571 def releasenotes(ui, repo, file_=None, **opts): |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
572 """parse release notes from commit messages into an output file |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
573 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
574 Given an output file and set of revisions, this command will parse commit |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
575 messages for release notes then add them to the output file. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
576 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
577 Release notes are defined in commit messages as ReStructuredText |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
578 directives. These have the form:: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
579 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
580 .. directive:: title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
581 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
582 content |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
583 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
584 Each ``directive`` maps to an output section in a generated release notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
585 file, which itself is ReStructuredText. For example, the ``.. feature::`` |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
586 directive would map to a ``New Features`` section. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
587 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
588 Release note directives can be either short-form or long-form. In short- |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
589 form, ``title`` is omitted and the release note is rendered as a bullet |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
590 list. In long form, a sub-section with the title ``title`` is added to the |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
591 section. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
592 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
593 The ``FILE`` argument controls the output file to write gathered release |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
594 notes to. The format of the file is:: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
595 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
596 Section 1 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
597 ========= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
598 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
599 ... |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
600 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
601 Section 2 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
602 ========= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
603 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
604 ... |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
605 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
606 Only sections with defined release notes are emitted. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
607 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
608 If a section only has short-form notes, it will consist of bullet list:: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
609 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
610 Section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
611 ======= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
612 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
613 * Release note 1 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
614 * Release note 2 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
615 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
616 If a section has long-form notes, sub-sections will be emitted:: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
617 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
618 Section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
619 ======= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
620 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
621 Note 1 Title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
622 ------------ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
623 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
624 Description of the first long-form note. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
625 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
626 Note 2 Title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
627 ------------ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
628 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
629 Description of the second long-form note. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
630 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
631 If the ``FILE`` argument points to an existing file, that file will be |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
632 parsed for release notes having the format that would be generated by this |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
633 command. The notes from the processed commit messages will be *merged* |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
634 into this parsed set. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
635 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
636 During release notes merging: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
637 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
638 * Duplicate items are automatically ignored |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
639 * Items that are different are automatically ignored if the similarity is |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
640 greater than a threshold. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
641 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
642 This means that the release notes file can be updated independently from |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
643 this command and changes should not be lost when running this command on |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
644 that file. A particular use case for this is to tweak the wording of a |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
645 release note after it has been added to the release notes file. |
34341
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
646 |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
647 The -c/--check option checks the commit message for invalid admonitions. |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
648 |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
649 The -l/--list option, presents the user with a list of existing available |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
650 admonitions along with their title. This also includes the custom |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
651 admonitions (if any). |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
652 """ |
35003
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
653 |
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
654 opts = pycompat.byteskwargs(opts) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
655 sections = releasenotessections(ui, repo) |
34340
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
656 |
44194
d4c1501225c4
cmdutil: change check_incompatible_arguments() *arg to single iterable
Martin von Zweigbergk <martinvonz@google.com>
parents:
43898
diff
changeset
|
657 cmdutil.check_incompatible_arguments(opts, b'list', [b'rev', b'check']) |
34340
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
658 |
43898
023ad45e2fd2
releasenotes: extract helper for checking for incompatible arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
43117
diff
changeset
|
659 if opts.get(b'list'): |
33940
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
660 return _getadmonitionlist(ui, sections) |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
661 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
662 rev = opts.get(b'rev') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 revs = scmutil.revrange(repo, [rev or b'not public()']) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
664 if opts.get(b'check'): |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
665 return checkadmonitions(ui, repo, sections.names(), revs) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
666 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
667 incoming = parsenotesfromrevisions(repo, sections.names(), revs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
668 |
34404
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34341
diff
changeset
|
669 if file_ is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
670 ui.pager(b'releasenotes') |
34404
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34341
diff
changeset
|
671 return ui.write(serializenotes(sections, incoming)) |
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34341
diff
changeset
|
672 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
673 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
674 with open(file_, b'rb') as fh: |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
675 notes = parsereleasenotesfile(sections, fh.read()) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
676 except IOError as e: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
677 if e.errno != errno.ENOENT: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
678 raise |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
679 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
680 notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
681 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
682 notes.merge(ui, incoming) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
683 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
684 with open(file_, b'wb') as fh: |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
685 fh.write(serializenotes(sections, notes)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
686 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
687 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
688 @command(b'debugparsereleasenotes', norepo=True) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
689 def debugparsereleasenotes(ui, path, repo=None): |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
690 """parse release notes and print resulting data structure""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
691 if path == b'-': |
40235
a7cdd81f191b
releasenotes: fix remaining bytes/unicode issues caught by tests
Augie Fackler <augie@google.com>
parents:
40234
diff
changeset
|
692 text = pycompat.stdin.read() |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
693 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
694 with open(path, b'rb') as fh: |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
695 text = fh.read() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
696 |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
697 sections = releasenotessections(ui, repo) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
698 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
699 notes = parsereleasenotesfile(sections, text) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
700 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
701 for section in notes: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
702 ui.write(_(b'section: %s\n') % section) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
703 for title, paragraphs in notes.titledforsection(section): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
704 ui.write(_(b' subsection: %s\n') % title) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
705 for para in paragraphs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
706 ui.write(_(b' paragraph: %s\n') % b' '.join(para)) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
707 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
708 for paragraphs in notes.nontitledforsection(section): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
709 ui.write(_(b' bullet point:\n')) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
710 for para in paragraphs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
711 ui.write(_(b' paragraph: %s\n') % b' '.join(para)) |