Mercurial > hg
view tests/test-releasenotes-formatting.t @ 34179:036d47d7cf39
copytrace: move fast heuristic copytracing algorithm to core
copytrace extension in fb-hgext has a heuristic implementation of copy tracing
which is faster than the current copy tracing. The heuristic limits the search
of copies to just files that are either:
1) Renames in the same directory
2) Moved to other directory with same name
The default copytrace implementation is very slow as it finds all the new files
that were added from merge base up to the head commit and for each file it
checks whether it this was copied or moved version of a different file.
Stash@fb did analysis for the above heuristics on the fb repo and found that
among 2,443,768 moves/copies there are only 32,234 moves/copies which does not
fall under the above heuristics which is approx. 0.013 of total copies.
This patch moves the heuristics algorithm under config
`experimental.copytrace=heuristics`.
While moving fbext to core, this patch removes couple of less useful config
options named `sourcecommitlimit` and `maxmovescandidatestocheck`.
Tests are also added for the heuristics algorithm, which are basically copied
from fbext/tests/test-copytrace.t. The tests follow a pattern creating a server
repo and then cloning to a local repo to create public and draft changesets, the
distinction which will be useful in upcoming patches.
After this patch `experimental.copytrace` has the following behaviour:
1) `off`: turns off copytracing
2) `heuristics`: use the heuristic algorithm added in this patch.
3) everything else: use the full copytracing algorithm
.. feature::
A new fast heuristic algorithm for copytracing which assumes that the files
moves are either::
1) Renames in the same directory
2) Moves in other directories with same names
You can use this algorithm by setting `experimental.copytrace=heuristics`.
Differential Revision: https://phab.mercurial-scm.org/D623
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Sun, 03 Sep 2017 03:49:15 +0530 |
parents | 2a37459aedf2 |
children | 741a511492d3 |
line wrap: on
line source
#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