author | Matt Harbison <matt_harbison@yahoo.com> |
Sun, 28 Jan 2018 14:08:59 -0500 | |
branch | stable |
changeset 35816 | f6ca1e11d8b4 |
parent 35003 | e68dd1909af3 |
child 36768 | 658ed9c7442b |
permissions | -rw-r--r-- |
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, |
35003
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
28 |
pycompat, |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
29 |
registrar, |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
30 |
scmutil, |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
31 |
util, |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
32 |
) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
33 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 |
cmdtable = {} |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 |
command = registrar.command(cmdtable) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
36 |
|
34812
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
37 |
try: |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
38 |
import fuzzywuzzy.fuzz as fuzz |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
39 |
fuzz.token_set_ratio |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
40 |
except ImportError: |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
41 |
fuzz = None |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
42 |
|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
43 |
# 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
|
44 |
# 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
|
45 |
# 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
|
46 |
# leave the attribute unspecified. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
47 |
testedwith = 'ships-with-hg-core' |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
48 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
49 |
DEFAULT_SECTIONS = [ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 |
('feature', _('New Features')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
51 |
('bc', _('Backwards Compatibility Changes')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
52 |
('fix', _('Bug Fixes')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 |
('perf', _('Performance Improvements')), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 |
('api', _('API Changes')), |
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 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
57 |
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
|
58 |
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
|
59 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 |
BULLET_SECTION = _('Other Changes') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 |
class parsedreleasenotes(object): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 |
def __init__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 |
self.sections = {} |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 |
def __contains__(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 |
return section in self.sections |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 |
def __iter__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
70 |
return iter(sorted(self.sections)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
71 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 |
def addtitleditem(self, section, title, paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 |
"""Add a titled release note entry.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 |
self.sections.setdefault(section, ([], [])) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 |
self.sections[section][0].append((title, paragraphs)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
76 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 |
def addnontitleditem(self, section, paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 |
"""Adds a non-titled release note entry. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 |
Will be rendered as a bullet point. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
81 |
""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
82 |
self.sections.setdefault(section, ([], [])) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 |
self.sections[section][1].append(paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 |
def titledforsection(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 |
"""Returns titled entries in a section. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 |
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
|
89 |
""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
90 |
return self.sections.get(section, ([], []))[0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
91 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 |
def nontitledforsection(self, section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
93 |
"""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
|
94 |
return self.sections.get(section, ([], []))[1] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 |
def hastitledinsection(self, section, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 |
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
|
98 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 |
def merge(self, ui, other): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 |
"""Merge another instance into this one. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 |
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
|
103 |
""" |
34813
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
104 |
if not fuzz: |
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
105 |
ui.warn(_("module 'fuzzywuzzy' not found, merging of similar " |
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
106 |
"releasenotes is disabled\n")) |
288fad8c55f9
releasenotes: show a warning if fuzzywuzzy is not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34812
diff
changeset
|
107 |
|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 |
for section in other: |
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
109 |
existingnotes = converttitled(self.titledforsection(section)) + \ |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
110 |
convertnontitled(self.nontitledforsection(section)) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
111 |
for title, paragraphs in other.titledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
112 |
if self.hastitledinsection(section, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
113 |
# 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
|
114 |
# interactive mode. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 |
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
|
116 |
(title, section)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
117 |
continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
118 |
|
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
119 |
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
|
120 |
if section == 'fix': |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
121 |
issue = getissuenum(incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
122 |
if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
123 |
if findissue(ui, existingnotes, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
124 |
continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
125 |
|
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
126 |
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
|
127 |
continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
128 |
|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
129 |
self.addtitleditem(section, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
130 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
131 |
for paragraphs in other.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 |
if paragraphs in self.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
133 |
continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
134 |
|
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
135 |
incoming_str = convertnontitled([paragraphs])[0] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
136 |
if section == 'fix': |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
137 |
issue = getissuenum(incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
138 |
if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
139 |
if findissue(ui, existingnotes, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
140 |
continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
141 |
|
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
142 |
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
|
143 |
continue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
144 |
|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
145 |
self.addnontitleditem(section, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
146 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
147 |
class releasenotessections(object): |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
148 |
def __init__(self, ui, repo=None): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
149 |
if repo: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
150 |
sections = util.sortdict(DEFAULT_SECTIONS) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
151 |
custom_sections = getcustomadmonitions(repo) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
152 |
if custom_sections: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
153 |
sections.update(custom_sections) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
154 |
self._sections = list(sections.iteritems()) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
155 |
else: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
156 |
self._sections = list(DEFAULT_SECTIONS) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 |
def __iter__(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 |
return iter(self._sections) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
161 |
def names(self): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
162 |
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
|
163 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
164 |
def sectionfromtitle(self, title): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
165 |
for name, value in self._sections: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
166 |
if value == title: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
167 |
return name |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
168 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
169 |
return None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
170 |
|
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
171 |
def converttitled(titledparagraphs): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
172 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
173 |
Convert titled paragraphs to strings |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
174 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
175 |
string_list = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
176 |
for title, paragraphs in titledparagraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
177 |
lines = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
178 |
for para in paragraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
179 |
lines.extend(para) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
180 |
string_list.append(' '.join(lines)) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
181 |
return string_list |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
182 |
|
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
183 |
def convertnontitled(nontitledparagraphs): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
184 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
185 |
Convert non-titled bullets to strings |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
186 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
187 |
string_list = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
188 |
for paragraphs in nontitledparagraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
189 |
lines = [] |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
190 |
for para in paragraphs: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
191 |
lines.extend(para) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
192 |
string_list.append(' '.join(lines)) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
193 |
return string_list |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
194 |
|
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
195 |
def getissuenum(incoming_str): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
196 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
197 |
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
|
198 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
199 |
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
|
200 |
if issue: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
201 |
issue = issue.group() |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
202 |
return issue |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
203 |
|
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
204 |
def findissue(ui, existing, issue): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
205 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
206 |
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
|
207 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
208 |
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
|
209 |
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
|
210 |
return True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
211 |
else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
212 |
return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
213 |
|
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
214 |
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
|
215 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
216 |
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
|
217 |
""" |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
218 |
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
|
219 |
merge = similaritycheck(incoming_str, existing) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
220 |
if not merge: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
221 |
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
|
222 |
% incoming_str) |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
223 |
return True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
224 |
else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
225 |
return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
226 |
else: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
227 |
return False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
228 |
|
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
229 |
def similaritycheck(incoming_str, existingnotes): |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
230 |
""" |
34780
070ba789f4d0
releasenotes: fix documentation of similaritycheck()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34736
diff
changeset
|
231 |
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
|
232 |
""" |
34812
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
233 |
# fuzzywuzzy not present |
bc2caa4b4480
releasenotes: move import of fuzzywuzzy to import level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34811
diff
changeset
|
234 |
if not fuzz: |
34810
44bd29168d14
releasenotes: make the import of fuzzywuzzy optional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34780
diff
changeset
|
235 |
return True |
44bd29168d14
releasenotes: make the import of fuzzywuzzy optional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34780
diff
changeset
|
236 |
|
33698
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
237 |
merge = True |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
238 |
for bullet in existingnotes: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
239 |
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
|
240 |
if score > 75: |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
241 |
merge = False |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
242 |
break |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
243 |
return merge |
3748098d072a
releasenotes: add similarity check function to compare incoming notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33571
diff
changeset
|
244 |
|
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
245 |
def getcustomadmonitions(repo): |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
246 |
ctx = repo['.'] |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
247 |
p = config.config() |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
248 |
|
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
249 |
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
|
250 |
if f in ctx: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
251 |
data = ctx[f].data() |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
252 |
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
|
253 |
else: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
254 |
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
|
255 |
repo.pathto(f)) |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
256 |
|
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
257 |
if '.hgreleasenotes' in ctx: |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
258 |
read('.hgreleasenotes') |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
259 |
return p['sections'] |
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
260 |
|
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
261 |
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
|
262 |
""" |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
263 |
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
|
264 |
|
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
265 |
.. abcd:: |
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 |
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
|
268 |
|
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
269 |
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
|
270 |
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
|
271 |
|
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
272 |
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
|
273 |
""" |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
274 |
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
|
275 |
ctx = repo[rev] |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
276 |
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
|
277 |
if admonition: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
278 |
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
|
279 |
continue |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
280 |
else: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
281 |
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
|
282 |
"\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
|
283 |
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
|
284 |
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
|
285 |
|
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
286 |
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
|
287 |
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
|
288 |
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
|
289 |
elif similar: |
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
290 |
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
|
291 |
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
|
292 |
|
33940
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
293 |
def _getadmonitionlist(ui, sections): |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
294 |
for section in sections: |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
295 |
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
|
296 |
|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
297 |
def parsenotesfromrevisions(repo, directives, revs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
298 |
notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
299 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
300 |
for rev in revs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
301 |
ctx = repo[rev] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
302 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
303 |
blocks, pruned = minirst.parse(ctx.description(), |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
304 |
admonitions=directives) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
305 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
306 |
for i, block in enumerate(blocks): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
307 |
if block['type'] != 'admonition': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
308 |
continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
309 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
310 |
directive = block['admonitiontitle'] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
311 |
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
|
312 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
313 |
if i + 1 == len(blocks): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
314 |
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
|
315 |
% directive) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
316 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
317 |
# 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
|
318 |
# admonition. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
319 |
paragraphs = [] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
320 |
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
|
321 |
pblock = blocks[j] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
322 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
323 |
# 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
|
324 |
if pblock['type'] == 'margin': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
325 |
continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 |
if pblock['type'] != 'paragraph': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
328 |
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
|
329 |
'directive %s') % directive) |
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 |
if pblock['indent'] > 0: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
332 |
paragraphs.append(pblock['lines']) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
333 |
else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
334 |
break |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
335 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
336 |
# 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
|
337 |
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
|
338 |
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
|
339 |
"'%s'\n") % node.hex(ctx.node())) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
340 |
if title: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
341 |
notes.addtitleditem(directive, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
342 |
else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
343 |
notes.addnontitleditem(directive, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
344 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
345 |
return notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
346 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
347 |
def parsereleasenotesfile(sections, text): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
348 |
"""Parse text content containing generated release notes.""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
349 |
notes = parsedreleasenotes() |
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 |
blocks = minirst.parse(text)[0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
352 |
|
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
353 |
def gatherparagraphsbullets(offset, title=False): |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
354 |
notefragment = [] |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
356 |
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
|
357 |
block = blocks[i] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
358 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 |
if block['type'] == 'margin': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
360 |
continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
361 |
elif block['type'] == 'section': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
362 |
break |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
363 |
elif block['type'] == 'bullet': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
364 |
if block['indent'] != 0: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
365 |
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
|
366 |
if title: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
367 |
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
|
368 |
notefragment.append(lines) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
369 |
continue |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
370 |
else: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
371 |
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
|
372 |
|
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
373 |
for block in blocks[i + 1:]: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
374 |
if block['type'] in ('bullet', 'section'): |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
375 |
break |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
376 |
if block['type'] == 'paragraph': |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
377 |
lines.append(block['lines']) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
378 |
notefragment.append(lines) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
379 |
continue |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
380 |
elif block['type'] != 'paragraph': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
381 |
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
|
382 |
'%s') % block['type']) |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
383 |
if title: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
384 |
notefragment.append(block['lines']) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 |
|
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
386 |
return notefragment |
32778
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 |
currentsection = None |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 |
for i, block in enumerate(blocks): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
390 |
if block['type'] != 'section': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
391 |
continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
392 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 |
title = block['lines'][0] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 |
# 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
|
396 |
# work. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
397 |
if block['underline'] == '=': # main section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
398 |
name = sections.sectionfromtitle(title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
399 |
if not name: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
400 |
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
|
401 |
title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
402 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
403 |
currentsection = name |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
404 |
bullet_points = gatherparagraphsbullets(i) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
405 |
if bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
406 |
for para in bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
407 |
notes.addnontitleditem(currentsection, para) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
408 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
409 |
elif block['underline'] == '-': # sub-section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
410 |
if title == BULLET_SECTION: |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
411 |
bullet_points = gatherparagraphsbullets(i) |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
412 |
for para in bullet_points: |
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
413 |
notes.addnontitleditem(currentsection, para) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
414 |
else: |
33012
5814db57941c
releasenotes: improve parsing around bullet points
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
32778
diff
changeset
|
415 |
paragraphs = gatherparagraphsbullets(i, True) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
416 |
notes.addtitleditem(currentsection, title, paragraphs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
417 |
else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
418 |
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
|
419 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
420 |
return notes |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
421 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
422 |
def serializenotes(sections, notes): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
423 |
"""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
|
424 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
425 |
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
|
426 |
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
|
427 |
""" |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
428 |
lines = [] |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
429 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
430 |
for sectionname, sectiontitle in sections: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
431 |
if sectionname not in notes: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
432 |
continue |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
433 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
434 |
lines.append(sectiontitle) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
435 |
lines.append('=' * len(sectiontitle)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
436 |
lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
437 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
438 |
# First pass to emit sub-sections. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
439 |
for title, paragraphs in notes.titledforsection(sectionname): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
440 |
lines.append(title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
441 |
lines.append('-' * len(title)) |
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 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
444 |
wrapper = textwrap.TextWrapper(width=78) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
445 |
for i, para in enumerate(paragraphs): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
446 |
if i: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
447 |
lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
448 |
lines.extend(wrapper.wrap(' '.join(para))) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
449 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
450 |
lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
451 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
452 |
# Second pass to emit bullet list items. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
453 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
454 |
# 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
|
455 |
# 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
|
456 |
# 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
|
457 |
# for the non-titled items. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
458 |
nontitled = notes.nontitledforsection(sectionname) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
459 |
if notes.titledforsection(sectionname) and nontitled: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
460 |
# TODO make configurable. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
461 |
lines.append(BULLET_SECTION) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
462 |
lines.append('-' * len(BULLET_SECTION)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
463 |
lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
464 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
465 |
for paragraphs in nontitled: |
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 |
lines.extend(wrapper.wrap(' '.join(paragraphs[0]))) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
470 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
471 |
wrapper = textwrap.TextWrapper(initial_indent=' ', |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
472 |
subsequent_indent=' ', |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
473 |
width=78) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
474 |
for para in paragraphs[1:]: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
475 |
lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
476 |
lines.extend(wrapper.wrap(' '.join(para))) |
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 |
lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
479 |
|
33784
589fda7895da
releasenotes: minor bug fix for index error while serializing
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33698
diff
changeset
|
480 |
if lines and lines[-1]: |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
481 |
lines.append('') |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
482 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
483 |
return '\n'.join(lines) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
484 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
485 |
@command('releasenotes', |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
486 |
[('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
|
487 |
('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
|
488 |
_('REV')), |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
489 |
('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
|
490 |
None)], |
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
491 |
_('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
|
492 |
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
|
493 |
"""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
|
494 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
495 |
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
|
496 |
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
|
497 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
498 |
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
|
499 |
directives. These have the form:: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
500 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
501 |
.. directive:: title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
502 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
503 |
content |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
504 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
505 |
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
|
506 |
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
|
507 |
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
|
508 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
509 |
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
|
510 |
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
|
511 |
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
|
512 |
section. |
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 |
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
|
515 |
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
|
516 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
517 |
Section 1 |
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 |
Section 2 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
523 |
========= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
524 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
525 |
... |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
526 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
527 |
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
|
528 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
529 |
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
|
530 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
531 |
Section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
532 |
======= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
533 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
534 |
* Release note 1 |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
535 |
* Release note 2 |
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 |
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
|
538 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
539 |
Section |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
540 |
======= |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
541 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
542 |
Note 1 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 first 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 |
Note 2 Title |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
548 |
------------ |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
549 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
550 |
Description of the second long-form note. |
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 |
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
|
553 |
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
|
554 |
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
|
555 |
into this parsed set. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
556 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
557 |
During release notes merging: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
558 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
559 |
* Duplicate items are automatically ignored |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
560 |
* 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
|
561 |
greater than a threshold. |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
562 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
563 |
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
|
564 |
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
|
565 |
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
|
566 |
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
|
567 |
|
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
568 |
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
|
569 |
|
01e8ab4b6573
releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34340
diff
changeset
|
570 |
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
|
571 |
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
|
572 |
admonitions (if any). |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
573 |
""" |
35003
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
574 |
|
e68dd1909af3
py3: handle keyword arguments in hgext/releasenotes.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34813
diff
changeset
|
575 |
opts = pycompat.byteskwargs(opts) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
576 |
sections = releasenotessections(ui, repo) |
34340
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 |
listflag = opts.get('list') |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
579 |
|
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
580 |
if listflag and opts.get('rev'): |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
581 |
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
|
582 |
if listflag and opts.get('check'): |
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
583 |
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
|
584 |
|
741a511492d3
releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33940
diff
changeset
|
585 |
if listflag: |
33940
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
586 |
return _getadmonitionlist(ui, sections) |
2a37459aedf2
releasenotes: view admonition titles using -l flag
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33881
diff
changeset
|
587 |
|
33881
6a49c74b1e8f
releasenotes: add check flag for use of admonitions and its validity
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33784
diff
changeset
|
588 |
rev = opts.get('rev') |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
589 |
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
|
590 |
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
|
591 |
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
|
592 |
|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
593 |
incoming = parsenotesfromrevisions(repo, sections.names(), revs) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
594 |
|
34404
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34341
diff
changeset
|
595 |
if file_ is None: |
34736
25b5787e8dde
releasenotes: add pager support when printing to the ui
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34404
diff
changeset
|
596 |
ui.pager('releasenotes') |
34404
159a6f7e09a9
releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
34341
diff
changeset
|
597 |
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
|
598 |
|
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
599 |
try: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
600 |
with open(file_, 'rb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
601 |
notes = parsereleasenotesfile(sections, fh.read()) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
602 |
except IOError as e: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
603 |
if e.errno != errno.ENOENT: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
604 |
raise |
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 |
notes = parsedreleasenotes() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
607 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
608 |
notes.merge(ui, incoming) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
609 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
610 |
with open(file_, 'wb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
611 |
fh.write(serializenotes(sections, notes)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
612 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
613 |
@command('debugparsereleasenotes', norepo=True) |
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
614 |
def debugparsereleasenotes(ui, path, repo=None): |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
615 |
"""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
|
616 |
if path == '-': |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
617 |
text = sys.stdin.read() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
618 |
else: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
619 |
with open(path, 'rb') as fh: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
620 |
text = fh.read() |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
621 |
|
33571
9a944e908ecf
releasenotes: add custom admonitions support for release notes
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33012
diff
changeset
|
622 |
sections = releasenotessections(ui, repo) |
32778
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
623 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
624 |
notes = parsereleasenotesfile(sections, text) |
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 section in notes: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
627 |
ui.write(_('section: %s\n') % section) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
628 |
for title, paragraphs in notes.titledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
629 |
ui.write(_(' subsection: %s\n') % title) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
630 |
for para in paragraphs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
631 |
ui.write(_(' paragraph: %s\n') % ' '.join(para)) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
632 |
|
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
633 |
for paragraphs in notes.nontitledforsection(section): |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
634 |
ui.write(_(' bullet point:\n')) |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
635 |
for para in paragraphs: |
91e355a0408b
releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
636 |
ui.write(_(' paragraph: %s\n') % ' '.join(para)) |