upgrade: move descriptions and selection logic in individual classes
Our goal here is to get top level definition for all the format variants. Having
them defined outside of the function enabled other users of that logic.
They are two keys components of a format variant:
1) the name and various descriptions of its effect,
2) the code that checks if the repo is using this variant and if the config
enables it.
That second items make us pick a class-based approach, since different variants
requires different code (even if in practice, many can reuse the same logic).
Each variants define its own class that is then used like a singleton. The
class-based approach also clarify the definitions part a bit since each are
simple assignment in an indented block.
The 'fromdefault' and 'fromconfig' are respectively replaced by a class
attribute and a method to be called at the one place where "fromconfig"
matters.
Overall, they are many viable approach for this, but this is the one I picked.
Test UI worker interaction
$ cat > t.py <<EOF
> from __future__ import absolute_import, print_function
> from mercurial import (
> cmdutil,
> ui as uimod,
> worker,
> )
> def runme(ui, args):
> for arg in args:
> ui.status('run\n')
> yield 1, arg
> cmdtable = {}
> command = cmdutil.command(cmdtable)
> @command('test', [], 'hg test [COST]')
> def t(ui, repo, cost=1.0):
> cost = float(cost)
> ui.status('start\n')
> runs = worker.worker(ui, cost, runme, (ui,), range(8))
> for n, i in runs:
> pass
> ui.status('done\n')
> EOF
$ abspath=`pwd`/t.py
$ hg init
Run tests with worker enable by forcing a heigh cost
$ hg --config "extensions.t=$abspath" test 100000.0
start
run
run
run
run
run
run
run
run
done
Run tests without worker by forcing a low cost
$ hg --config "extensions.t=$abspath" test 0.0000001
start
run
run
run
run
run
run
run
run
done