Mercurial > public > mercurial-scm > hg
annotate hgext/releasenotes.py @ 34812:bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
This will help us in determining easily that whether fuzzywuzzy is loaded or not
loaded in any of the function.
Differential Revision: https://phab.mercurial-scm.org/D1120
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Mon, 16 Oct 2017 22:46:11 +0530 |
parents | a542ad320adb |
children | 288fad8c55f9 |
rev | line source |
---|---|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 # Copyright 2017-present Gregory Szorc <gregory.szorc@gmail.com> |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 # |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 # GNU General Public License version 2 or any later version. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 """generate release notes from commit messages (EXPERIMENTAL) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
8 It is common to maintain files detailing changes in a project between |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
9 releases. Maintaining these files can be difficult and time consuming. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
10 The :hg:`releasenotes` command provided by this extension makes the |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
11 process simpler by automating it. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
12 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
13 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
14 from __future__ import absolute_import |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
15 |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
16 import difflib |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
17 import errno |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
18 import re |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
19 import sys |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
20 import textwrap |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
21 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 from mercurial.i18n import _ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
23 from mercurial import ( |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
24 config, |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
25 error, |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
26 minirst, |
34811
a542ad320adb
releasenotes: don't abort is there is a bad formatted entry for releasenotes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34810
diff
changeset
|
27 node, |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
28 registrar, |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
29 scmutil, |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
30 util, |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
31 ) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
32 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
33 cmdtable = {} |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 command = registrar.command(cmdtable) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 |
34812
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
36 try: |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
37 import fuzzywuzzy.fuzz as fuzz |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
38 fuzz.token_set_ratio |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
39 except ImportError: |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
40 fuzz = None |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
41 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
42 # 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
|
43 # 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
|
44 # 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
|
45 # leave the attribute unspecified. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
46 testedwith = 'ships-with-hg-core' |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
47 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
48 DEFAULT_SECTIONS = [ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
49 ('feature', _('New Features')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 ('bc', _('Backwards Compatibility Changes')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
51 ('fix', _('Bug Fixes')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
52 ('perf', _('Performance Improvements')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 ('api', _('API Changes')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 ] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
55 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
56 RE_DIRECTIVE = re.compile('^\.\. ([a-zA-Z0-9_]+)::\s*([^$]+)?$') |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
57 RE_ISSUE = r'\bissue ?[0-9]{4,6}(?![0-9])\b' |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 BULLET_SECTION = _('Other Changes') |
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 class parsedreleasenotes(object): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 def __init__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 self.sections = {} |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 def __contains__(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 return section in self.sections |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 def __iter__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 return iter(sorted(self.sections)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
70 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
71 def addtitleditem(self, section, title, paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 """Add a titled release note entry.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 self.sections.setdefault(section, ([], [])) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 self.sections[section][0].append((title, paragraphs)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
76 def addnontitleditem(self, section, paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 """Adds a non-titled release note entry. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 Will be rendered as a bullet point. |
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 self.sections.setdefault(section, ([], [])) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
82 self.sections[section][1].append(paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 def titledforsection(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 """Returns titled entries in a section. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 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
|
88 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 return self.sections.get(section, ([], []))[0] |
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 def nontitledforsection(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 """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
|
93 return self.sections.get(section, ([], []))[1] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
94 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 def hastitledinsection(self, section, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 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
|
97 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 def merge(self, ui, other): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 """Merge another instance into this one. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 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
|
102 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 for section in other: |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
104 existingnotes = converttitled(self.titledforsection(section)) + \ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
105 convertnontitled(self.nontitledforsection(section)) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 for title, paragraphs in other.titledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 if self.hastitledinsection(section, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 # 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
|
109 # interactive mode. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
110 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
|
111 (title, section)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
112 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
113 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
114 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
|
115 if section == 'fix': |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
116 issue = getissuenum(incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
117 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
118 if findissue(ui, existingnotes, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
119 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
120 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
121 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
|
122 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
123 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
124 self.addtitleditem(section, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
125 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
126 for paragraphs in other.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 if paragraphs in self.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
129 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
130 incoming_str = convertnontitled([paragraphs])[0] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
131 if section == 'fix': |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
132 issue = getissuenum(incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
133 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
134 if findissue(ui, existingnotes, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
135 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
136 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
137 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
|
138 continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
139 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
140 self.addnontitleditem(section, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
141 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
142 class releasenotessections(object): |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
143 def __init__(self, ui, repo=None): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
144 if repo: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
145 sections = util.sortdict(DEFAULT_SECTIONS) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
146 custom_sections = getcustomadmonitions(repo) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
147 if custom_sections: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
148 sections.update(custom_sections) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
149 self._sections = list(sections.iteritems()) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
150 else: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
151 self._sections = list(DEFAULT_SECTIONS) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
152 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
153 def __iter__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
154 return iter(self._sections) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
155 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
156 def names(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 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
|
158 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 def sectionfromtitle(self, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 for name, value in self._sections: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
161 if value == title: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
162 return name |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
163 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
164 return None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
165 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
166 def converttitled(titledparagraphs): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
167 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
168 Convert titled paragraphs to strings |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
169 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
170 string_list = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
171 for title, paragraphs in titledparagraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
172 lines = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
173 for para in paragraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
174 lines.extend(para) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
175 string_list.append(' '.join(lines)) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
176 return string_list |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
177 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
178 def convertnontitled(nontitledparagraphs): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
179 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
180 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
|
181 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
182 string_list = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
183 for paragraphs in nontitledparagraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
184 lines = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
185 for para in paragraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
186 lines.extend(para) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
187 string_list.append(' '.join(lines)) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
188 return string_list |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
189 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
190 def getissuenum(incoming_str): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
191 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
192 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
|
193 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
194 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
|
195 if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
196 issue = issue.group() |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
197 return issue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
198 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
199 def findissue(ui, existing, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
200 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
201 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
|
202 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
203 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
|
204 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
|
205 return True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
206 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
207 return False |
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 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
|
210 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
211 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
|
212 """ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
213 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
|
214 merge = similaritycheck(incoming_str, existing) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
215 if not merge: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
216 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
|
217 % incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
218 return True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
219 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
220 return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
221 else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
222 return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
223 |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
224 def similaritycheck(incoming_str, existingnotes): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
225 """ |
34780
070ba789f4d0
releasenotes: fix documentation of similaritycheck()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34736
diff
changeset
|
226 Returns false when note fragment can be merged to existing notes. |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
227 """ |
34812
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
228 # fuzzywuzzy not present |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
229 if not fuzz: |
34810
44bd29168d14
releasenotes: make the import of fuzzywuzzy optional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34780
diff
changeset
|
230 return True |
44bd29168d14
releasenotes: make the import of fuzzywuzzy optional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34780
diff
changeset
|
231 |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
232 merge = True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
233 for bullet in existingnotes: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
234 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
|
235 if score > 75: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
236 merge = False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
237 break |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
238 return merge |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
239 |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
240 def getcustomadmonitions(repo): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
241 ctx = repo['.'] |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
242 p = config.config() |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
243 |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
244 def read(f, sections=None, remap=None): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
245 if f in ctx: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
246 data = ctx[f].data() |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
247 p.parse(f, data, sections, remap, read) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
248 else: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
249 raise error.Abort(_(".hgreleasenotes file \'%s\' not found") % |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
250 repo.pathto(f)) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
251 |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
252 if '.hgreleasenotes' in ctx: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
253 read('.hgreleasenotes') |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
254 return p['sections'] |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
255 |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
256 def checkadmonitions(ui, repo, directives, revs): |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
257 """ |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
258 Checks the commit messages for admonitions and their validity. |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
259 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
260 .. abcd:: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
261 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
262 First paragraph under this admonition |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
263 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
264 For this commit message, using `hg releasenotes -r . --check` |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
265 returns: Invalid admonition 'abcd' present in changeset 3ea92981e103 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
266 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
267 As admonition 'abcd' is neither present in default nor custom admonitions |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
268 """ |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
269 for rev in revs: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
270 ctx = repo[rev] |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
271 admonition = re.search(RE_DIRECTIVE, ctx.description()) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
272 if admonition: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
273 if admonition.group(1) in directives: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
274 continue |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
275 else: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
276 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:
33784
diff
changeset
|
277 "\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:
33784
diff
changeset
|
278 sim = lambda x: difflib.SequenceMatcher(None, |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
279 admonition.group(1), x).ratio() |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
280 |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
281 similar = [s for s in directives if sim(s) > 0.6] |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
282 if len(similar) == 1: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
283 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:
33784
diff
changeset
|
284 elif similar: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
285 ss = ", ".join(sorted(similar)) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
286 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:
33784
diff
changeset
|
287 |
33940
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
288 def _getadmonitionlist(ui, sections): |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
289 for section in sections: |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
290 ui.write("%s: %s\n" % (section[0], section[1])) |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
291 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
292 def parsenotesfromrevisions(repo, directives, revs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
293 notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
294 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
295 for rev in revs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
296 ctx = repo[rev] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
297 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
298 blocks, pruned = minirst.parse(ctx.description(), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
299 admonitions=directives) |
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 i, block in enumerate(blocks): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
302 if block['type'] != 'admonition': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
303 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
304 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
305 directive = block['admonitiontitle'] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
306 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
|
307 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
308 if i + 1 == len(blocks): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
309 raise error.Abort(_('release notes directive %s lacks content') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
310 % directive) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
311 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
312 # 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
|
313 # admonition. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
314 paragraphs = [] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
315 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
|
316 pblock = blocks[j] |
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 # 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
|
319 if pblock['type'] == 'margin': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
320 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
321 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
322 if pblock['type'] != 'paragraph': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
323 raise error.Abort(_('unexpected block in release notes ' |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
324 'directive %s') % directive) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
325 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 if pblock['indent'] > 0: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 paragraphs.append(pblock['lines']) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
328 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
329 break |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
330 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
331 # 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
|
332 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
|
333 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
|
334 "'%s'\n") % node.hex(ctx.node())) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
335 if title: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
336 notes.addtitleditem(directive, title, paragraphs) |
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 notes.addnontitleditem(directive, paragraphs) |
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 return notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
341 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
342 def parsereleasenotesfile(sections, text): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
343 """Parse text content containing generated release notes.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
344 notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
345 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
346 blocks = minirst.parse(text)[0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
347 |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
348 def gatherparagraphsbullets(offset, title=False): |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
349 notefragment = [] |
32778
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 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
|
352 block = blocks[i] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
353 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
354 if block['type'] == 'margin': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
356 elif block['type'] == 'section': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
357 break |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
358 elif block['type'] == 'bullet': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 if block['indent'] != 0: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
360 raise error.Abort(_('indented bullet lists not supported')) |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
361 if title: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
362 lines = [l[1:].strip() for l in block['lines']] |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
363 notefragment.append(lines) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
364 continue |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
365 else: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
366 lines = [[l[1:].strip() for l in block['lines']]] |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
367 |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
368 for block in blocks[i + 1:]: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
369 if block['type'] in ('bullet', 'section'): |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
370 break |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
371 if block['type'] == 'paragraph': |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
372 lines.append(block['lines']) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
373 notefragment.append(lines) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
374 continue |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
375 elif block['type'] != 'paragraph': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
376 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
|
377 '%s') % block['type']) |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
378 if title: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
379 notefragment.append(block['lines']) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
380 |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
381 return notefragment |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
382 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
383 currentsection = None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
384 for i, block in enumerate(blocks): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 if block['type'] != 'section': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
386 continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
387 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
388 title = block['lines'][0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
390 # 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
|
391 # work. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
392 if block['underline'] == '=': # main section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 name = sections.sectionfromtitle(title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 if not name: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 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
|
396 title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
397 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
398 currentsection = name |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
399 bullet_points = gatherparagraphsbullets(i) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
400 if bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
401 for para in bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
402 notes.addnontitleditem(currentsection, para) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
403 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
404 elif block['underline'] == '-': # sub-section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
405 if title == BULLET_SECTION: |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
406 bullet_points = gatherparagraphsbullets(i) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
407 for para in bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
408 notes.addnontitleditem(currentsection, para) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
409 else: |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
410 paragraphs = gatherparagraphsbullets(i, True) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
411 notes.addtitleditem(currentsection, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
412 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
413 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
|
414 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
415 return notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
416 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
417 def serializenotes(sections, notes): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
418 """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
|
419 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
420 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
|
421 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
|
422 """ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
423 lines = [] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
424 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
425 for sectionname, sectiontitle in sections: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
426 if sectionname not in notes: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
427 continue |
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 lines.append(sectiontitle) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
430 lines.append('=' * len(sectiontitle)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
431 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
432 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
433 # First pass to emit sub-sections. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
434 for title, paragraphs in notes.titledforsection(sectionname): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
435 lines.append(title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
436 lines.append('-' * len(title)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
437 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
438 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
439 wrapper = textwrap.TextWrapper(width=78) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
440 for i, para in enumerate(paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
441 if i: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
442 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
443 lines.extend(wrapper.wrap(' '.join(para))) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
444 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
445 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
446 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
447 # Second pass to emit bullet list items. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
448 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
449 # 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
|
450 # 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
|
451 # 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
|
452 # for the non-titled items. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
453 nontitled = notes.nontitledforsection(sectionname) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
454 if notes.titledforsection(sectionname) and nontitled: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
455 # TODO make configurable. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
456 lines.append(BULLET_SECTION) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
457 lines.append('-' * len(BULLET_SECTION)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
458 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
459 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
460 for paragraphs in nontitled: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
461 wrapper = textwrap.TextWrapper(initial_indent='* ', |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
462 subsequent_indent=' ', |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
463 width=78) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
464 lines.extend(wrapper.wrap(' '.join(paragraphs[0]))) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
465 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
466 wrapper = textwrap.TextWrapper(initial_indent=' ', |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
467 subsequent_indent=' ', |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
468 width=78) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
469 for para in paragraphs[1:]: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
470 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
471 lines.extend(wrapper.wrap(' '.join(para))) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
472 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
473 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
474 |
33784
589fda7895da
releasenotes: minor bug fix for index error while serializing
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33698
diff
changeset
|
475 if lines and lines[-1]: |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
476 lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
477 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
478 return '\n'.join(lines) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
479 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
480 @command('releasenotes', |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
481 [('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:
33784
diff
changeset
|
482 ('c', 'check', False, _('checks for validity of admonitions (if any)'), |
33940
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
483 _('REV')), |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
484 ('l', 'list', False, _('list the available admonitions with their title'), |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
485 None)], |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
486 _('hg releasenotes [-r REV] [-c] FILE')) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
487 def releasenotes(ui, repo, file_=None, **opts): |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
488 """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
|
489 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
490 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
|
491 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
|
492 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
493 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
|
494 directives. These have the form:: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
495 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
496 .. directive:: title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
497 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
498 content |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
499 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
500 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
|
501 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
|
502 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
|
503 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
504 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
|
505 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
|
506 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
|
507 section. |
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 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
|
510 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
|
511 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
512 Section 1 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
513 ========= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
514 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
515 ... |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
516 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
517 Section 2 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
518 ========= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
519 |
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 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
522 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
|
523 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
524 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
|
525 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
526 Section |
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 * Release note 1 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
530 * Release note 2 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
531 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
532 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
|
533 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
534 Section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
535 ======= |
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 Note 1 Title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
538 ------------ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
539 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
540 Description of the first long-form note. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
541 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
542 Note 2 Title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
543 ------------ |
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 Description of the second long-form note. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
546 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
547 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
|
548 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
|
549 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
|
550 into this parsed set. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
551 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
552 During release notes merging: |
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 * Duplicate items are automatically ignored |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
555 * 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
|
556 greater than a threshold. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
557 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
558 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
|
559 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
|
560 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
|
561 release note after it has been added to the release notes file. |
34341
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
562 |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
563 The -c/--check option checks the commit message for invalid admonitions. |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
564 |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
565 The -l/--list option, presents the user with a list of existing available |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
566 admonitions along with their title. This also includes the custom |
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
567 admonitions (if any). |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
568 """ |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
569 sections = releasenotessections(ui, repo) |
34340
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
570 |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
571 listflag = opts.get('list') |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
572 |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
573 if listflag and opts.get('rev'): |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
574 raise error.Abort(_('cannot use both \'--list\' and \'--rev\'')) |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
575 if listflag and opts.get('check'): |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
576 raise error.Abort(_('cannot use both \'--list\' and \'--check\'')) |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
577 |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
578 if listflag: |
33940
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
579 return _getadmonitionlist(ui, sections) |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
580 |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
581 rev = opts.get('rev') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
582 revs = scmutil.revrange(repo, [rev or 'not public()']) |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
583 if opts.get('check'): |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
584 return checkadmonitions(ui, repo, sections.names(), revs) |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
585 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
586 incoming = parsenotesfromrevisions(repo, sections.names(), revs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
587 |
34404
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34341
diff
changeset
|
588 if file_ is None: |
34736
25b5787e8dde
releasenotes: add pager support when printing to the ui
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34404
diff
changeset
|
589 ui.pager('releasenotes') |
34404
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34341
diff
changeset
|
590 return ui.write(serializenotes(sections, incoming)) |
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34341
diff
changeset
|
591 |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
592 try: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
593 with open(file_, 'rb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
594 notes = parsereleasenotesfile(sections, fh.read()) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
595 except IOError as e: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
596 if e.errno != errno.ENOENT: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
597 raise |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
598 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
599 notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
600 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
601 notes.merge(ui, incoming) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
602 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
603 with open(file_, 'wb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
604 fh.write(serializenotes(sections, notes)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
605 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
606 @command('debugparsereleasenotes', norepo=True) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
607 def debugparsereleasenotes(ui, path, repo=None): |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
608 """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
|
609 if path == '-': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
610 text = sys.stdin.read() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
611 else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
612 with open(path, 'rb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
613 text = fh.read() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
614 |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
615 sections = releasenotessections(ui, repo) |
32778
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 notes = parsereleasenotesfile(sections, text) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
618 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
619 for section in notes: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
620 ui.write(_('section: %s\n') % section) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
621 for title, paragraphs in notes.titledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
622 ui.write(_(' subsection: %s\n') % title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
623 for para in paragraphs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
624 ui.write(_(' paragraph: %s\n') % ' '.join(para)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
625 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
626 for paragraphs in notes.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
627 ui.write(_(' bullet point:\n')) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
628 for para in paragraphs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
629 ui.write(_(' paragraph: %s\n') % ' '.join(para)) |