typing: make `bundlerepository` subclass `localrepository` while type checking
Currently, `mercurial/bundlerepo.py` is excluded from pytype, mostly because it
complains that various `ui` and `vfs` fields in `localrepository` are missing.
(`bundlerepository` dynamically subclasses `localrepository` when it is
instantiated, so it works at runtime.) This makes that class hierarchy known to
pytype.
Having a protocol for `Repository` is probably the right thing to do, but that
will be a lot of work and this still reflects the class at runtime. Subclassing
also has the benefit of making sure any method overrides have a matching
signature, so maybe this is a situation where we do both of these things. (I'm
not sure how clear the diagnostics are if a class *almost* implements a
protocol, but is missing a method argument or similar.) The subclassing is not
done outside of type checking runs to avoid any side effects on already complex
code.
#require fuzzywuzzy
$ cat >> $HGRCPATH << EOF
> [extensions]
> releasenotes=
> EOF
Bullet point with a single item spanning a single line
$ hg debugparsereleasenotes - << EOF
> New Features
> ============
>
> * Bullet point item with a single line
> EOF
section: feature
bullet point:
paragraph: Bullet point item with a single line
Bullet point that spans multiple lines.
$ hg debugparsereleasenotes - << EOF
> New Features
> ============
>
> * Bullet point with a paragraph
> that spans multiple lines.
> EOF
section: feature
bullet point:
paragraph: Bullet point with a paragraph that spans multiple lines.
$ hg debugparsereleasenotes - << EOF
> New Features
> ============
>
> * Bullet point with a paragraph
> that spans multiple lines.
>
> And has an empty line between lines too.
> With a line cuddling that.
> EOF
section: feature
bullet point:
paragraph: Bullet point with a paragraph that spans multiple lines.
paragraph: And has an empty line between lines too. With a line cuddling that.
Multiple bullet points. With some entries being multiple lines.
$ hg debugparsereleasenotes - << EOF
> New Features
> ============
>
> * First bullet point. It has a single line.
>
> * Second bullet point.
> It consists of multiple lines.
>
> * Third bullet point. It has a single line.
> EOF
section: feature
bullet point:
paragraph: First bullet point. It has a single line.
bullet point:
paragraph: Second bullet point. It consists of multiple lines.
bullet point:
paragraph: Third bullet point. It has a single line.
Bullet point without newline between items
$ hg debugparsereleasenotes - << EOF
> New Features
> ============
>
> * First bullet point
> * Second bullet point
> And it has multiple lines
> * Third bullet point
> * Fourth bullet point
> EOF
section: feature
bullet point:
paragraph: First bullet point
bullet point:
paragraph: Second bullet point And it has multiple lines
bullet point:
paragraph: Third bullet point
bullet point:
paragraph: Fourth bullet point
Sub-section contents are read
$ hg debugparsereleasenotes - << EOF
> New Features
> ============
>
> First Feature
> -------------
>
> This is the first new feature that was implemented.
>
> And a second paragraph about it.
>
> Second Feature
> --------------
>
> This is the second new feature that was implemented.
>
> Paragraph two.
>
> Paragraph three.
> EOF
section: feature
subsection: First Feature
paragraph: This is the first new feature that was implemented.
paragraph: And a second paragraph about it.
subsection: Second Feature
paragraph: This is the second new feature that was implemented.
paragraph: Paragraph two.
paragraph: Paragraph three.
Multiple sections are read
$ hg debugparsereleasenotes - << EOF
> New Features
> ============
>
> * Feature 1
> * Feature 2
>
> Bug Fixes
> =========
>
> * Fix 1
> * Fix 2
> EOF
section: feature
bullet point:
paragraph: Feature 1
bullet point:
paragraph: Feature 2
section: fix
bullet point:
paragraph: Fix 1
bullet point:
paragraph: Fix 2
Mixed sub-sections and bullet list
$ hg debugparsereleasenotes - << EOF
> New Features
> ============
>
> Feature 1
> ---------
>
> Some words about the first feature.
>
> Feature 2
> ---------
>
> Some words about the second feature.
> That span multiple lines.
>
> Other Changes
> -------------
>
> * Bullet item 1
> * Bullet item 2
> EOF
section: feature
subsection: Feature 1
paragraph: Some words about the first feature.
subsection: Feature 2
paragraph: Some words about the second feature. That span multiple lines.
bullet point:
paragraph: Bullet item 1
bullet point:
paragraph: Bullet item 2
Warn user in case of unexpected block while parsing
$ hg init relnotes-warn
$ cd relnotes-warn
$ touch feature1
$ hg -q commit -A -l - << EOF
> commit 1
>
> .. feature::
>
> new feature added.
> some words about the feature.
> EOF
$ hg releasenote -r .
changeset a4251905c440: unexpected block in release notes directive feature
New Features
============
* new feature added. some words about the feature.
$ cd ..