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