[PATCH RFC] HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
Erik Zielke
ez at aragost.com
Tue Jan 4 10:55:02 CST 2011
Den 04-01-2011 14:21, Brodie Rao skrev:
> # HG changeset patch
> # User Brodie Rao<brodie at bitheap.org>
> # Date 1294147116 -39600
> # Node ID b653ec8e753a01653d46c70c56e72a37f5906f58
> # Parent f3058dd052819de75908599d93a29241ba69318f
> HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
>
> This makes it possible to gain the benefits of HGPLAIN for scripting
> while preserving different behaviors like internationalization.
I can definitiely see that people writing tools and scripts on top of
Mercurial can use feature like this.
> diff --git a/mercurial/help/environment.txt b/mercurial/help/environment.txt
> --- a/mercurial/help/environment.txt
> +++ b/mercurial/help/environment.txt
> @@ -59,6 +59,14 @@ HGPLAIN
> Equivalent options set via command line flags or environment
> variables are not overridden.
>
> +HGPLAINEXCEPT
> + This is a comma-separated list of features to preserve when
> + HGPLAIN is enabled. Currently the only value supported is "i18n",
> + which preserves internationalization in plain mode.
> +
> + Setting HGPLAINEXCEPT to anything (even an empty string) will
> + enable plain mode.
> +
Wouldn't it make sense to issue a warning, if an unsupported value is in
HGPLAINEXCEPT? This would of course mean that there should be a way of
specifying supported values.
> HGUSER
> This is the string used as the author of a commit. If not set,
> available values will be considered in this order:
> diff --git a/mercurial/i18n.py b/mercurial/i18n.py
> --- a/mercurial/i18n.py
> +++ b/mercurial/i18n.py
> @@ -51,7 +51,13 @@ def gettext(message):
> # An unknown encoding results in a LookupError.
> return message
>
> -if 'HGPLAIN' in os.environ:
> +def _plain():
> + if 'HGPLAIN' not in os.environ and 'HGPLAINEXCEPT' not in os.environ:
> + return False
> + exceptions = os.environ.get('HGPLAINEXCEPT', '').strip().split(',')
> + return 'i18n' not in exceptions
> +
> +if _plain():
> _ = lambda message: message
> else:
> _ = gettext
> diff --git a/mercurial/ui.py b/mercurial/ui.py
> --- a/mercurial/ui.py
> +++ b/mercurial/ui.py
> @@ -268,15 +268,22 @@ class ui(object):
> def plain(self):
> '''is plain mode active?
>
> - Plain mode means that all configuration variables which affect the
> - behavior and output of Mercurial should be ignored. Additionally, the
> - output should be stable, reproducible and suitable for use in scripts or
> - applications.
> + Plain mode means that all configuration variables which affect
> + the behavior and output of Mercurial should be
> + ignored. Additionally, the output should be stable,
> + reproducible and suitable for use in scripts or applications.
>
> - The only way to trigger plain mode is by setting the `HGPLAIN'
> - environment variable.
> + The only way to trigger plain mode is by setting either the
> + `HGPLAIN' or `HGPLAINEXCEPT' environment variables.
> +
> + The return value can either be False, True, or a list of
> + features that plain mode should not apply to (e.g., i18n,
> + progress, etc).
> '''
> - return 'HGPLAIN' in os.environ
> + if 'HGPLAIN' not in os.environ and 'HGPLAINEXCEPT' not in os.environ:
> + return False
> + exceptions = os.environ.get('HGPLAINEXCEPT', '').strip().split(',')
> + return exceptions or True
>
> def username(self):
> """Return default username to be used in commits.
> diff --git a/tests/test-hgrc.t b/tests/test-hgrc.t
> --- a/tests/test-hgrc.t
> +++ b/tests/test-hgrc.t
> @@ -133,3 +133,39 @@ plain hgrc
> none: ui.verbose=False
> none: ui.debug=True
> none: ui.quiet=False
> +
> +plain mode with exceptions
> +
> + $ cat> plain.py<<EOF
> +> def uisetup(ui):
> +> ui.write('plain: %r\n' % ui.plain())
> +> EOF
> + $ echo "[extensions]">> $HGRCPATH
> + $ echo "plain=./plain.py">> $HGRCPATH
> + $ HGPLAINEXCEPT=; export HGPLAINEXCEPT
> + $ hg showconfig --config ui.traceback=True --debug
> + plain: ['']
> + read config from: $TESTTMP/hgrc
> + $TESTTMP/hgrc:15: extensions.plain=./plain.py
> + none: ui.traceback=True
> + none: ui.verbose=False
> + none: ui.debug=True
> + none: ui.quiet=False
> + $ unset HGPLAIN
> + $ hg showconfig --config ui.traceback=True --debug
> + plain: ['']
> + read config from: $TESTTMP/hgrc
> + $TESTTMP/hgrc:15: extensions.plain=./plain.py
> + none: ui.traceback=True
> + none: ui.verbose=False
> + none: ui.debug=True
> + none: ui.quiet=False
> + $ HGPLAINEXCEPT=i18n; export HGPLAINEXCEPT
> + $ hg showconfig --config ui.traceback=True --debug
> + plain: ['i18n']
> + read config from: $TESTTMP/hgrc
> + $TESTTMP/hgrc:15: extensions.plain=./plain.py
> + none: ui.traceback=True
> + none: ui.verbose=False
> + none: ui.debug=True
> + none: ui.quiet=False
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
--
Erik Zielke
aragost Trifork ag
http://aragost.com/mercurial/
More information about the Mercurial-devel
mailing list