Mercurial > hg-stable
annotate hgext/releasenotes.py @ 40243:96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
It's silly to splitlines() a joined string, but we don't care the performance
here.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 13 Oct 2018 12:29:43 +0200 |
parents | a7cdd81f191b |
children | c303d65d2e34 |
rev | line source |
---|---|
32798
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 |
33900
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
16 import difflib |
32798
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 _ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
21 from mercurial import ( |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
22 config, |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
23 error, |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
24 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
|
25 node, |
35044
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
26 pycompat, |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
27 registrar, |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
28 scmutil, |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
29 util, |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
30 ) |
40243
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
31 from mercurial.utils import ( |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
32 stringutil, |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
33 ) |
32798
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 |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
40 fuzz.token_set_ratio |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
41 except ImportError: |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
42 fuzz = None |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
43 |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
44 # 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
|
45 # 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
|
46 # 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
|
47 # leave the attribute unspecified. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
48 testedwith = 'ships-with-hg-core' |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
49 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 DEFAULT_SECTIONS = [ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
51 ('feature', _('New Features')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
52 ('bc', _('Backwards Compatibility Changes')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 ('fix', _('Bug Fixes')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 ('perf', _('Performance Improvements')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
55 ('api', _('API Changes')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
56 ] |
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 RE_DIRECTIVE = re.compile('^\.\. ([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
|
59 RE_ISSUE = br'\bissue ?[0-9]{4,6}(?![0-9])\b' |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 BULLET_SECTION = _('Other Changes') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 class parsedreleasenotes(object): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 def __init__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 self.sections = {} |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 def __contains__(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 return section in self.sections |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
70 def __iter__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
71 return iter(sorted(self.sections)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 def addtitleditem(self, section, title, paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 """Add a titled release note entry.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 self.sections.setdefault(section, ([], [])) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
76 self.sections[section][0].append((title, paragraphs)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 def addnontitleditem(self, section, paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 """Adds a non-titled release note entry. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
81 Will be rendered as a bullet point. |
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 self.sections.setdefault(section, ([], [])) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 self.sections[section][1].append(paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 def titledforsection(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 """Returns titled entries in a section. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 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
|
90 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
91 return self.sections.get(section, ([], []))[0] |
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 def nontitledforsection(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
94 """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
|
95 return self.sections.get(section, ([], []))[1] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 def hastitledinsection(self, section, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 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
|
99 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 def merge(self, ui, other): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 """Merge another instance into this one. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 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
|
104 """ |
34813
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
105 if not fuzz: |
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
106 ui.warn(_("module 'fuzzywuzzy' not found, merging of similar " |
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
107 "releasenotes is disabled\n")) |
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
108 |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
109 for section in other: |
33724
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
110 existingnotes = converttitled(self.titledforsection(section)) + \ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
111 convertnontitled(self.nontitledforsection(section)) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
112 for title, paragraphs in other.titledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
113 if self.hastitledinsection(section, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
114 # 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
|
115 # interactive mode. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
116 ui.write(_('%s already exists in %s section; ignoring\n') % |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
117 (title, section)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
118 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
119 |
33724
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
120 incoming_str = converttitled([(title, paragraphs)])[0] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
121 if section == 'fix': |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
122 issue = getissuenum(incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
123 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
124 if findissue(ui, existingnotes, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
125 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
126 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
127 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
|
128 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
129 |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
130 self.addtitleditem(section, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
131 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 for paragraphs in other.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
133 if paragraphs in self.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
134 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
135 |
33724
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
136 incoming_str = convertnontitled([paragraphs])[0] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
137 if section == 'fix': |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
138 issue = getissuenum(incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
139 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
140 if findissue(ui, existingnotes, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
141 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
142 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
143 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
|
144 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
145 |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
146 self.addnontitleditem(section, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
147 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
148 class releasenotessections(object): |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
149 def __init__(self, ui, repo=None): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
150 if repo: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
151 sections = util.sortdict(DEFAULT_SECTIONS) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
152 custom_sections = getcustomadmonitions(repo) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
153 if custom_sections: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
154 sections.update(custom_sections) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
155 self._sections = list(sections.iteritems()) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
156 else: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
157 self._sections = list(DEFAULT_SECTIONS) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 def __iter__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 return iter(self._sections) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
161 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
162 def names(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
163 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
|
164 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
165 def sectionfromtitle(self, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
166 for name, value in self._sections: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
167 if value == title: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
168 return name |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
169 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
170 return None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
171 |
33724
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
172 def converttitled(titledparagraphs): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
173 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
174 Convert titled paragraphs to strings |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
175 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
176 string_list = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
177 for title, paragraphs in titledparagraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
178 lines = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
179 for para in paragraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
180 lines.extend(para) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
181 string_list.append(' '.join(lines)) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
182 return string_list |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
183 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
184 def convertnontitled(nontitledparagraphs): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
185 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
186 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
|
187 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
188 string_list = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
189 for paragraphs in nontitledparagraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
190 lines = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
191 for para in paragraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
192 lines.extend(para) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
193 string_list.append(' '.join(lines)) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
194 return string_list |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
195 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
196 def getissuenum(incoming_str): |
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 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
|
199 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
200 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
|
201 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
202 issue = issue.group() |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
203 return issue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
204 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
205 def findissue(ui, existing, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
206 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
207 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
|
208 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
209 if any(issue in s for s in existing): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
210 ui.write(_('"%s" already exists in notes; ignoring\n') % issue) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
211 return True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
212 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
213 return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
214 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
215 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
|
216 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
217 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
|
218 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
219 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
|
220 merge = similaritycheck(incoming_str, existing) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
221 if not merge: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
222 ui.write(_('"%s" already exists in notes file; ignoring\n') |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
223 % incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
224 return True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
225 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
226 return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
227 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
228 return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
229 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
230 def similaritycheck(incoming_str, existingnotes): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
231 """ |
34780
070ba789f4d0
releasenotes: fix documentation of similaritycheck()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34736
diff
changeset
|
232 Returns false when note fragment can be merged to existing notes. |
33724
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
233 """ |
34812
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
234 # fuzzywuzzy not present |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
235 if not fuzz: |
34810
44bd29168d14
releasenotes: make the import of fuzzywuzzy optional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34780
diff
changeset
|
236 return True |
44bd29168d14
releasenotes: make the import of fuzzywuzzy optional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34780
diff
changeset
|
237 |
33724
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
238 merge = True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
239 for bullet in existingnotes: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
240 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
|
241 if score > 75: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
242 merge = False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
243 break |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
244 return merge |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
245 |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
246 def getcustomadmonitions(repo): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
247 ctx = repo['.'] |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
248 p = config.config() |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
249 |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
250 def read(f, sections=None, remap=None): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
251 if f in ctx: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
252 data = ctx[f].data() |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
253 p.parse(f, data, sections, remap, read) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
254 else: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
255 raise error.Abort(_(".hgreleasenotes file \'%s\' not found") % |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
256 repo.pathto(f)) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
257 |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
258 if '.hgreleasenotes' in ctx: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
259 read('.hgreleasenotes') |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
260 return p['sections'] |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
261 |
33900
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
262 def checkadmonitions(ui, repo, directives, revs): |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
263 """ |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
264 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:
33805
diff
changeset
|
265 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
266 .. abcd:: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
267 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
268 First paragraph under this admonition |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
269 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
270 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:
33805
diff
changeset
|
271 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:
33805
diff
changeset
|
272 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
273 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:
33805
diff
changeset
|
274 """ |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
275 for rev in revs: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
276 ctx = repo[rev] |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
277 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:
33805
diff
changeset
|
278 if admonition: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
279 if admonition.group(1) in directives: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
280 continue |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
281 else: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
282 ui.write(_("Invalid admonition '%s' present in changeset %s" |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
283 "\n") % (admonition.group(1), ctx.hex()[:12])) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
284 sim = lambda x: difflib.SequenceMatcher(None, |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
285 admonition.group(1), x).ratio() |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
286 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
287 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:
33805
diff
changeset
|
288 if len(similar) == 1: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
289 ui.write(_("(did you mean %s?)\n") % similar[0]) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
290 elif similar: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
291 ss = ", ".join(sorted(similar)) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
292 ui.write(_("(did you mean one of %s?)\n") % ss) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
293 |
33958
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
294 def _getadmonitionlist(ui, sections): |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
295 for section in sections: |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
296 ui.write("%s: %s\n" % (section[0], section[1])) |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
297 |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
298 def parsenotesfromrevisions(repo, directives, revs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
299 notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
300 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
301 for rev in revs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
302 ctx = repo[rev] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
303 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
304 blocks, pruned = minirst.parse(ctx.description(), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
305 admonitions=directives) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
306 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
307 for i, block in enumerate(blocks): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
308 if block['type'] != 'admonition': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
309 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
310 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
311 directive = block['admonitiontitle'] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
312 title = block['lines'][0].strip() if block['lines'] else None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
313 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
314 if i + 1 == len(blocks): |
36777
3fff6f30bd7f
releasenotes: mention changeset with warning and abort
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36776
diff
changeset
|
315 raise error.Abort(_('changeset %s: release notes directive %s ' |
3fff6f30bd7f
releasenotes: mention changeset with warning and abort
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36776
diff
changeset
|
316 'lacks content') % (ctx, directive)) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
317 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
318 # 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
|
319 # admonition. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
320 paragraphs = [] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
321 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
|
322 pblock = blocks[j] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
323 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
324 # Margin blocks may appear between paragraphs. Ignore them. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
325 if pblock['type'] == 'margin': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 |
36778
a5891e94bfe1
releasenotes: allow notes for multiple directives in a single changeset
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36777
diff
changeset
|
328 if pblock['type'] == 'admonition': |
a5891e94bfe1
releasenotes: allow notes for multiple directives in a single changeset
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36777
diff
changeset
|
329 break |
a5891e94bfe1
releasenotes: allow notes for multiple directives in a single changeset
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36777
diff
changeset
|
330 |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
331 if pblock['type'] != 'paragraph': |
36777
3fff6f30bd7f
releasenotes: mention changeset with warning and abort
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36776
diff
changeset
|
332 repo.ui.warn(_('changeset %s: unexpected block in release ' |
3fff6f30bd7f
releasenotes: mention changeset with warning and abort
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
36776
diff
changeset
|
333 'notes directive %s\n') % (ctx, directive)) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
334 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
335 if pblock['indent'] > 0: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
336 paragraphs.append(pblock['lines']) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
337 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
338 break |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
339 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
340 # 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
|
341 if not paragraphs: |
34811
a542ad320adb
releasenotes: don't abort is there is a bad formatted entry for releasenotes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34810
diff
changeset
|
342 repo.ui.warn(_("error parsing releasenotes for revision: " |
a542ad320adb
releasenotes: don't abort is there is a bad formatted entry for releasenotes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34810
diff
changeset
|
343 "'%s'\n") % node.hex(ctx.node())) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
344 if title: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
345 notes.addtitleditem(directive, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
346 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
347 notes.addnontitleditem(directive, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
348 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
349 return notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
350 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
351 def parsereleasenotesfile(sections, text): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
352 """Parse text content containing generated release notes.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
353 notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
354 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 blocks = minirst.parse(text)[0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
356 |
33028
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
357 def gatherparagraphsbullets(offset, title=False): |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
358 notefragment = [] |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
360 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
|
361 block = blocks[i] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
362 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
363 if block['type'] == 'margin': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
364 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
365 elif block['type'] == 'section': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
366 break |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
367 elif block['type'] == 'bullet': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
368 if block['indent'] != 0: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
369 raise error.Abort(_('indented bullet lists not supported')) |
33028
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
370 if title: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
371 lines = [l[1:].strip() for l in block['lines']] |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
372 notefragment.append(lines) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
373 continue |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
374 else: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
375 lines = [[l[1:].strip() for l in block['lines']]] |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
376 |
33028
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
377 for block in blocks[i + 1:]: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
378 if block['type'] in ('bullet', 'section'): |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
379 break |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
380 if block['type'] == 'paragraph': |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
381 lines.append(block['lines']) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
382 notefragment.append(lines) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
383 continue |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
384 elif block['type'] != 'paragraph': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 raise error.Abort(_('unexpected block type in release notes: ' |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
386 '%s') % block['type']) |
33028
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
387 if title: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
388 notefragment.append(block['lines']) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 |
33028
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
390 return notefragment |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
391 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
392 currentsection = None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 for i, block in enumerate(blocks): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 if block['type'] != 'section': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
396 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
397 title = block['lines'][0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
398 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
399 # 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
|
400 # work. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
401 if block['underline'] == '=': # main section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
402 name = sections.sectionfromtitle(title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
403 if not name: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
404 raise error.Abort(_('unknown release notes section: %s') % |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
405 title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
406 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
407 currentsection = name |
33028
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
408 bullet_points = gatherparagraphsbullets(i) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
409 if bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
410 for para in bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
411 notes.addnontitleditem(currentsection, para) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
412 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
413 elif block['underline'] == '-': # sub-section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
414 if title == BULLET_SECTION: |
33028
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
415 bullet_points = gatherparagraphsbullets(i) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
416 for para in bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
417 notes.addnontitleditem(currentsection, para) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
418 else: |
33028
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32798
diff
changeset
|
419 paragraphs = gatherparagraphsbullets(i, True) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
420 notes.addtitleditem(currentsection, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
421 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
422 raise error.Abort(_('unsupported section type for %s') % title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
423 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
424 return notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
425 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
426 def serializenotes(sections, notes): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
427 """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
|
428 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
429 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
|
430 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
|
431 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
432 lines = [] |
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 for sectionname, sectiontitle in sections: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
435 if sectionname not in notes: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
436 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
437 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
438 lines.append(sectiontitle) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
439 lines.append('=' * len(sectiontitle)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
440 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
441 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
442 # First pass to emit sub-sections. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
443 for title, paragraphs in notes.titledforsection(sectionname): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
444 lines.append(title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
445 lines.append('-' * len(title)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
446 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
447 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
448 for i, para in enumerate(paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
449 if i: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
450 lines.append('') |
40243
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
451 lines.extend(stringutil.wrap(' '.join(para), |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
452 width=78).splitlines()) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
453 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
454 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
455 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
456 # Second pass to emit bullet list items. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
457 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
458 # 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
|
459 # 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
|
460 # 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
|
461 # for the non-titled items. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
462 nontitled = notes.nontitledforsection(sectionname) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
463 if notes.titledforsection(sectionname) and nontitled: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
464 # TODO make configurable. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
465 lines.append(BULLET_SECTION) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
466 lines.append('-' * len(BULLET_SECTION)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
467 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
468 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
469 for paragraphs in nontitled: |
40243
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
470 lines.extend(stringutil.wrap(' '.join(paragraphs[0]), |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
471 width=78, |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
472 initindent='* ', |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
473 hangindent=' ').splitlines()) |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
474 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
475 for para in paragraphs[1:]: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
476 lines.append('') |
40243
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
477 lines.extend(stringutil.wrap(' '.join(para), |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
478 width=78, |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
479 initindent=' ', |
96e50dfd8c94
releasenotes: use stringutil.wrap() instead of handcrafted TextWrapper wrapper
Yuya Nishihara <yuya@tcha.org>
parents:
40235
diff
changeset
|
480 hangindent=' ').splitlines()) |
32798
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('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
483 |
33805
589fda7895da
releasenotes: minor bug fix for index error while serializing
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33724
diff
changeset
|
484 if lines and lines[-1]: |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
485 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
486 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
487 return '\n'.join(lines) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
488 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
489 @command('releasenotes', |
33900
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
490 [('r', 'rev', '', _('revisions to process for release notes'), _('REV')), |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
491 ('c', 'check', False, _('checks for validity of admonitions (if any)'), |
33958
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
492 _('REV')), |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
493 ('l', 'list', False, _('list the available admonitions with their title'), |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
494 None)], |
33900
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
495 _('hg releasenotes [-r REV] [-c] FILE')) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
496 def releasenotes(ui, repo, file_=None, **opts): |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
497 """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
|
498 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
499 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
|
500 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
|
501 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
502 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
|
503 directives. These have the form:: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
504 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
505 .. directive:: title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
506 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
507 content |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
508 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
509 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
|
510 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
|
511 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
|
512 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
513 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
|
514 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
|
515 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
|
516 section. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
517 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
518 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
|
519 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
|
520 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
521 Section 1 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
522 ========= |
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 ... |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
525 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
526 Section 2 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
527 ========= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
528 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
529 ... |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
530 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
531 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
|
532 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
533 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
|
534 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
535 Section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
536 ======= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
537 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
538 * Release note 1 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
539 * Release note 2 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
540 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
541 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
|
542 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
543 Section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
544 ======= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
545 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
546 Note 1 Title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
547 ------------ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
548 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
549 Description of the first long-form note. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
550 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
551 Note 2 Title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
552 ------------ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
553 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
554 Description of the second long-form note. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
555 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
556 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
|
557 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
|
558 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
|
559 into this parsed set. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
560 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
561 During release notes merging: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
562 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
563 * Duplicate items are automatically ignored |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
564 * 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
|
565 greater than a threshold. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
566 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
567 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
|
568 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
|
569 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
|
570 release note after it has been added to the release notes file. |
34348
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34347
diff
changeset
|
571 |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34347
diff
changeset
|
572 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:
34347
diff
changeset
|
573 |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34347
diff
changeset
|
574 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:
34347
diff
changeset
|
575 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:
34347
diff
changeset
|
576 admonitions (if any). |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
577 """ |
35044
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
578 |
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
579 opts = pycompat.byteskwargs(opts) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
580 sections = releasenotessections(ui, repo) |
34347
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
581 |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
582 listflag = opts.get('list') |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
583 |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
584 if listflag and opts.get('rev'): |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
585 raise error.Abort(_('cannot use both \'--list\' and \'--rev\'')) |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
586 if listflag and opts.get('check'): |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
587 raise error.Abort(_('cannot use both \'--list\' and \'--check\'')) |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
588 |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33958
diff
changeset
|
589 if listflag: |
33958
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
590 return _getadmonitionlist(ui, sections) |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33900
diff
changeset
|
591 |
33900
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
592 rev = opts.get('rev') |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
593 revs = scmutil.revrange(repo, [rev or 'not public()']) |
33900
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
594 if opts.get('check'): |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33805
diff
changeset
|
595 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:
33805
diff
changeset
|
596 |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
597 incoming = parsenotesfromrevisions(repo, sections.names(), revs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
598 |
34405
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34348
diff
changeset
|
599 if file_ is None: |
34736
25b5787e8dde
releasenotes: add pager support when printing to the ui
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34405
diff
changeset
|
600 ui.pager('releasenotes') |
34405
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34348
diff
changeset
|
601 return ui.write(serializenotes(sections, incoming)) |
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34348
diff
changeset
|
602 |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
603 try: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
604 with open(file_, 'rb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
605 notes = parsereleasenotesfile(sections, fh.read()) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
606 except IOError as e: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
607 if e.errno != errno.ENOENT: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
608 raise |
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 notes = parsedreleasenotes() |
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 notes.merge(ui, incoming) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
613 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
614 with open(file_, 'wb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
615 fh.write(serializenotes(sections, notes)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
616 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
617 @command('debugparsereleasenotes', norepo=True) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
618 def debugparsereleasenotes(ui, path, repo=None): |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
619 """parse release notes and print resulting data structure""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
620 if path == '-': |
40235
a7cdd81f191b
releasenotes: fix remaining bytes/unicode issues caught by tests
Augie Fackler <augie@google.com>
parents:
40234
diff
changeset
|
621 text = pycompat.stdin.read() |
32798
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
622 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
623 with open(path, 'rb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
624 text = fh.read() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
625 |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33028
diff
changeset
|
626 sections = releasenotessections(ui, repo) |
32798
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 notes = parsereleasenotesfile(sections, text) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
629 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
630 for section in notes: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
631 ui.write(_('section: %s\n') % section) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
632 for title, paragraphs in notes.titledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
633 ui.write(_(' subsection: %s\n') % title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
634 for para in paragraphs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
635 ui.write(_(' paragraph: %s\n') % ' '.join(para)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
636 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
637 for paragraphs in notes.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
638 ui.write(_(' bullet point:\n')) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
639 for para in paragraphs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
640 ui.write(_(' paragraph: %s\n') % ' '.join(para)) |