Mercurial > hg
diff tests/test-copytrace-heuristics.t @ 34846:f05a6e015ecc
copies: add a config to limit the number of candidates to check in heuristics
The heuristics algorithm find possible candidates for move/copy and then check
whether they are actually a copy or move. In some cases, there can be lot of
candidates possible which can actually slow down the algorithm.
This patch introduces a config option
`experimental.copytrace.movecandidateslimit` using which one can limit the
candidates to check. The limit defaults to 100.
Thanks to Yuya for suggesting to skip copytracing for that file with a
warning.
Differential Revision: https://phab.mercurial-scm.org/D987
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Tue, 10 Oct 2017 02:25:03 +0530 |
parents | 1b261be2033b |
children | 4441705b7111 |
line wrap: on
line diff
--- a/tests/test-copytrace-heuristics.t Tue Oct 17 10:31:44 2017 -0700 +++ b/tests/test-copytrace-heuristics.t Tue Oct 10 02:25:03 2017 +0530 @@ -201,6 +201,65 @@ $ cd .. $ rm -rf repo +Test the copytrace.movecandidateslimit with many move candidates +---------------------------------------------------------------- + + $ hg init repo + $ initclient repo + $ cd repo + $ echo a > a + $ hg add a + $ hg ci -m initial + $ hg mv a foo + $ echo a > b + $ echo a > c + $ echo a > d + $ echo a > e + $ echo a > f + $ echo a > g + $ hg add b + $ hg add c + $ hg add d + $ hg add e + $ hg add f + $ hg add g + $ hg ci -m 'mv a foo, add many files' + $ hg up -q ".^" + $ echo b > a + $ hg ci -m 'mod a' + created new head + + $ hg log -G -T 'changeset: {node}\n desc: {desc}\n' + @ changeset: ef716627c70bf4ca0bdb623cfb0d6fe5b9acc51e + | desc: mod a + | o changeset: 8329d5c6bf479ec5ca59b9864f3f45d07213f5a4 + |/ desc: mv a foo, add many files + o changeset: 1451231c87572a7d3f92fc210b4b35711c949a98 + desc: initial + +With small limit + + $ hg rebase -s 2 -d 1 --config experimental.copytrace.movecandidateslimit=0 + rebasing 2:ef716627c70b "mod a" (tip) + skipping copytracing for 'a', more candidates than the limit: 7 + other [source] changed a which local [dest] deleted + use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u + unresolved conflicts (see hg resolve, then hg rebase --continue) + [1] + + $ hg rebase --abort + rebase aborted + +With default limit which is 100 + + $ hg rebase -s 2 -d 1 + rebasing 2:ef716627c70b "mod a" (tip) + merging foo and a to foo + saved backup bundle to $TESTTMP/repo/.hg/strip-backup/ef716627c70b-24681561-rebase.hg (glob) + + $ cd .. + $ rm -rf repo + Move file in one branch and delete it in another -----------------------------------------------