sidedatacopies: directly fetch copies information from sidedata
When using the sidedata mode, we don't need a complicated and expensive
`context` object. Instead we directly fetch copies information from the
sidedata (through a changelogrevision object). More optimisations coming.
revision: large amount; added files: large amount; rename small amount; c3b14617fbd7 9ba6ab77fd29
filelog: ! wall 3.679613 comb 3.680000 user 3.580000 sys 0.100000 (median of 3)
base: ! wall 8.884369 comb 8.880000 user 8.850000 sys 0.030000 (median of 3)
before: ! wall 4.681985 comb 4.680000 user 4.640000 sys 0.040000 (median of 3)
after: ! wall 3.955894 comb 3.950000 user 3.940000 sys 0.010000 (median of 3)
revision: large amount; added files: small amount; rename small amount; c3b14617fbd7 f650a9b140d2
filelog: ! wall 0.003357 comb 0.010000 user 0.010000 sys 0.000000 (median of 781)
base: ! wall 12.398524 comb 12.400000 user 12.330000 sys 0.070000 (median of 3)
before: ! wall 6.459592 comb 6.470000 user 6.390000 sys 0.080000 (median of 3)
after: ! wall 5.505774 comb 5.500000 user 5.410000 sys 0.090000 (median of 3)
revision: large amount; added files: large amount; rename large amount; 08ea3258278e d9fa043f30c0
filelog: ! wall 2.754687 comb 2.760000 user 2.650000 sys 0.110000 (median of 4)
base: ! wall 1.423166 comb 1.420000 user 1.400000 sys 0.020000 (median of 8)
before: ! wall 0.961048 comb 0.960000 user 0.940000 sys 0.020000 (median of 11)
after: ! wall 0.882950 comb 0.880000 user 0.880000 sys 0.000000 (median of 11)
revision: small amount; added files: large amount; rename large amount; df6f7a526b60 a83dc6a2d56f
filelog: ! wall 1.552293 comb 1.550000 user 1.510000 sys 0.040000 (median of 6
base: ! wall 0.022662 comb 0.020000 user 0.020000 sys 0.000000 (median of 128)
before: ! wall 0.021649 comb 0.020000 user 0.020000 sys 0.000000 (median of 135)
after: ! wall 0.020951 comb 0.020000 user 0.020000 sys 0.000000 (median of 141)
revision: small amount; added files: large amount; rename small amount; 4aa4e1f8e19a 169138063d63
filelog: ! wall 1.500983 comb 1.500000 user 1.420000 sys 0.080000 (median of 7)
base: ! wall 0.006956 comb 0.010000 user 0.010000 sys 0.000000 (median of 392)
before: ! wall 0.004022 comb 0.000000 user 0.000000 sys 0.000000 (median of 735)
after: ! wall 0.003988 comb 0.000000 user 0.000000 sys 0.000000 (median of 736)
revision: small amount; added files: small amount; rename small amount; 4bc173b045a6 964879152e2e
filelog: ! wall 0.011745 comb 0.020000 user 0.020000 sys 0.000000 (median of 250)
base: ! wall 0.000156 comb 0.000000 user 0.000000 sys 0.000000 (median of 17180)
before: ! wall 0.000118 comb 0.000000 user 0.000000 sys 0.000000 (median of 19170)
after: ! wall 0.000097 comb 0.000000 user 0.000000 sys 0.000000 (median of 27276)
revision: medium amount; added files: large amount; rename medium amount; c95f1ced15f2 2c68e87c3efe
filelog: ! wall 3.228230 comb 3.230000 user 3.110000 sys 0.120000 (median of 4)
base: ! wall 0.997640 comb 1.000000 user 0.980000 sys 0.020000 (median of 10)
before: ! wall 0.679500 comb 0.680000 user 0.680000 sys 0.000000 (median of 15)
after: ! wall 0.596779 comb 0.600000 user 0.600000 sys 0.000000 (median of 17)
revision: medium amount; added files: medium amount; rename small amount; d343da0c55a8 d7746d32bf9d
filelog: ! wall 1.052501 comb 1.060000 user 1.040000 sys 0.020000 (median of 10
base: ! wall 0.214519 comb 0.220000 user 0.220000 sys 0.000000 (median of 45)
before: ! wall 0.149675 comb 0.150000 user 0.150000 sys 0.000000 (median of 66)
after: ! wall 0.130786 comb 0.130000 user 0.130000 sys 0.000000 (median of 75)
Differential Revision: https://phab.mercurial-scm.org/D7072
#require fuzzywuzzy
$ cat >> $HGRCPATH << EOF
> [extensions]
> releasenotes=
> EOF
$ hg init simple-repo
$ cd simple-repo
A fix with a single line results in a bullet point in the appropriate section
$ touch fix1
$ hg -q commit -A -l - << EOF
> single line fix
>
> .. fix::
>
> Simple fix with a single line content entry.
> EOF
$ hg releasenotes -r . $TESTTMP/relnotes-single-line
$ cat $TESTTMP/relnotes-single-line
Bug Fixes
=========
* Simple fix with a single line content entry.
A fix with multiple lines is handled correctly
$ touch fix2
$ hg -q commit -A -l - << EOF
> multi line fix
>
> .. fix::
>
> First line of fix entry.
> A line after it without a space.
>
> A new paragraph in the fix entry. And this is a really long line. It goes on for a while.
> And it wraps around to a new paragraph.
> EOF
$ hg releasenotes -r . $TESTTMP/relnotes-multi-line
$ cat $TESTTMP/relnotes-multi-line
Bug Fixes
=========
* First line of fix entry. A line after it without a space.
A new paragraph in the fix entry. And this is a really long line. It goes on
for a while. And it wraps around to a new paragraph.
A release note with a title results in a sub-section being written
$ touch fix3
$ hg -q commit -A -l - << EOF
> fix with title
>
> .. fix:: Fix Title
>
> First line of fix with title.
>
> Another paragraph of fix with title. But this is a paragraph
> with multiple lines.
> EOF
$ hg releasenotes -r . $TESTTMP/relnotes-fix-with-title
$ cat $TESTTMP/relnotes-fix-with-title
Bug Fixes
=========
Fix Title
---------
First line of fix with title.
Another paragraph of fix with title. But this is a paragraph with multiple
lines.
$ cd ..
Formatting of multiple bullet points works
$ hg init multiple-bullets
$ cd multiple-bullets
$ touch fix1
$ hg -q commit -A -l - << EOF
> commit 1
>
> .. fix::
>
> first fix
> EOF
$ touch fix2
$ hg -q commit -A -l - << EOF
> commit 2
>
> .. fix::
>
> second fix
>
> Second paragraph of second fix.
> EOF
$ touch fix3
$ hg -q commit -A -l - << EOF
> commit 3
>
> .. fix::
>
> third fix
> EOF
$ hg releasenotes -r 'all()' $TESTTMP/relnotes-multiple-bullets
$ cat $TESTTMP/relnotes-multiple-bullets
Bug Fixes
=========
* first fix
* second fix
Second paragraph of second fix.
* third fix
$ cd ..
Formatting of multiple sections works
$ hg init multiple-sections
$ cd multiple-sections
$ touch fix1
$ hg -q commit -A -l - << EOF
> commit 1
>
> .. fix::
>
> first fix
> EOF
$ touch feature1
$ hg -q commit -A -l - << EOF
> commit 2
>
> .. feature::
>
> description of the new feature
> EOF
$ touch fix2
$ hg -q commit -A -l - << EOF
> commit 3
>
> .. fix::
>
> second fix
> EOF
$ hg releasenotes -r 'all()' $TESTTMP/relnotes-multiple-sections
$ cat $TESTTMP/relnotes-multiple-sections
New Features
============
* description of the new feature
Bug Fixes
=========
* first fix
* second fix
$ cd ..
Section with subsections and bullets
$ hg init multiple-subsections
$ cd multiple-subsections
$ touch fix1
$ hg -q commit -A -l - << EOF
> commit 1
>
> .. fix:: Title of First Fix
>
> First paragraph of first fix.
>
> Second paragraph of first fix.
> EOF
$ touch fix2
$ hg -q commit -A -l - << EOF
> commit 2
>
> .. fix:: Title of Second Fix
>
> First paragraph of second fix.
>
> Second paragraph of second fix.
> EOF
$ hg releasenotes -r 'all()' $TESTTMP/relnotes-multiple-subsections
$ cat $TESTTMP/relnotes-multiple-subsections
Bug Fixes
=========
Title of First Fix
------------------
First paragraph of first fix.
Second paragraph of first fix.
Title of Second Fix
-------------------
First paragraph of second fix.
Second paragraph of second fix.
Now add bullet points to sections having sub-sections
$ touch fix3
$ hg -q commit -A -l - << EOF
> commit 3
>
> .. fix::
>
> Short summary of fix 3
> EOF
$ hg releasenotes -r 'all()' $TESTTMP/relnotes-multiple-subsections-with-bullets
$ cat $TESTTMP/relnotes-multiple-subsections-with-bullets
Bug Fixes
=========
Title of First Fix
------------------
First paragraph of first fix.
Second paragraph of first fix.
Title of Second Fix
-------------------
First paragraph of second fix.
Second paragraph of second fix.
Other Changes
-------------
* Short summary of fix 3
$ cd ..
Multiple 'Other Changes' sub-sections for every section
$ hg init multiple-otherchanges
$ cd multiple-otherchanges
$ touch fix1
$ hg -q commit -A -l - << EOF
> commit 1
>
> .. fix:: Title of First Fix
>
> First paragraph of fix 1.
> EOF
$ touch feature1
$ hg -q commit -A -l - << EOF
> commit 2
>
> .. feature:: Title of First Feature
>
> First paragraph of feature 1.
> EOF
$ touch feature2
$ hg -q commit -A -l - << EOF
> commit 3
>
> .. feature::
>
> Short summary of feature 2.
> EOF
$ touch fix2
$ hg -q commit -A -l - << EOF
> commit 4
>
> .. fix::
>
> Short summary of fix 2
> EOF
$ hg releasenotes -r 'all()' $TESTTMP/relnotes-multiple-otherchanges
$ cat $TESTTMP/relnotes-multiple-otherchanges
New Features
============
Title of First Feature
----------------------
First paragraph of feature 1.
Other Changes
-------------
* Short summary of feature 2.
Bug Fixes
=========
Title of First Fix
------------------
First paragraph of fix 1.
Other Changes
-------------
* Short summary of fix 2
$ cd ..
Using custom sections in notes
$ hg init custom-section
$ cd custom-section
$ cat >> .hgreleasenotes << EOF
> [sections]
> testsection=Name of Section
> EOF
$ touch a
$ hg -q commit -A -l - << EOF
> commit 1
>
> .. testsection::
>
> First paragraph under this admonition.
> EOF
$ hg releasenotes -r . $TESTTMP/relnotes-custom-section
$ cat $TESTTMP/relnotes-custom-section
Name of Section
===============
* First paragraph under this admonition.
Overriding default sections (For eg. by default feature = New Features)
$ cat >> .hgreleasenotes << EOF
> [sections]
> feature=Feature Additions
> EOF
$ touch b
$ hg -q commit -A -l - << EOF
> commit 2
>
> .. feature::
>
> Adds a new feature.
> EOF
$ hg releasenotes -r . $TESTTMP/relnotes-override-section
$ cat $TESTTMP/relnotes-override-section
Feature Additions
=================
* Adds a new feature.
$ cd ..
Testing output for the --check (-c) flag
$ hg init check-flag
$ cd check-flag
$ touch a
$ hg -q commit -A -l - << EOF
> .. asf::
>
> First paragraph under this admonition.
> EOF
Suggest similar admonition in place of the invalid one.
$ hg releasenotes -r . -c
Invalid admonition 'asf' present in changeset 4026fe9e1c20
$ touch b
$ hg -q commit -A -l - << EOF
> .. fixes::
>
> First paragraph under this admonition.
> EOF
$ hg releasenotes -r . -c
Invalid admonition 'fixes' present in changeset 0e7130d2705c
(did you mean fix?)
$ cd ..
Usage of --list flag
$ hg init relnotes-list
$ cd relnotes-list
$ hg releasenotes -l
feature: New Features
bc: Backwards Compatibility Changes
fix: Bug Fixes
perf: Performance Improvements
api: API Changes
$ cd ..
Raise error on simultaneous usage of flags
$ hg init relnotes-raise-error
$ cd relnotes-raise-error
$ hg releasenotes -r . -l
abort: cannot use both '--list' and '--rev'
[255]
$ hg releasenotes -l -c
abort: cannot use both '--list' and '--check'
[255]
Display release notes for specified revs if no file is mentioned
$ hg init relnotes-nofile
$ cd relnotes-nofile
$ touch fix1
$ hg -q commit -A -l - << EOF
> commit 1
>
> .. fix:: Title of First Fix
>
> First paragraph of fix 1.
> EOF
$ hg releasenote -r .
Bug Fixes
=========
Title of First Fix
------------------
First paragraph of fix 1.
$ cd ..
Using multiple admonitions in same changeset
$ hg init relnotes-multiadmon
$ cd relnotes-multiadmon
$ touch file1
$ hg -q commit -A -l - << EOF
> commit 1
>
> .. feature::
>
> Details about new feature.
>
> .. perf::
>
> Improves the execution by 2x
> EOF
$ hg releasenotes -r . $TESTTMP/relnotes-multiple-admonitions
$ cat $TESTTMP/relnotes-multiple-admonitions
New Features
============
* Details about new feature.
Performance Improvements
========================
* Improves the execution by 2x