From: Tim Peters Date: Wed, 10 May 2006 02:46:48 +0000 (+0000) Subject: Merge rev 45944 from trunk. X-Git-Tag: v2.4.4c1~228 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38e726d7da3ae47343acdd90eb34635201f96095;p=thirdparty%2FPython%2Fcpython.git Merge rev 45944 from trunk. Variant of patch #1478292. doctest.register_optionflag(name) shouldn't create a new flag when `name` is already the name of an option flag. --- diff --git a/Lib/doctest.py b/Lib/doctest.py index 642b5223b906..d146a83459d5 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -128,9 +128,8 @@ warnings.filterwarnings("ignore", "is_private", DeprecationWarning, OPTIONFLAGS_BY_NAME = {} def register_optionflag(name): - flag = 1 << len(OPTIONFLAGS_BY_NAME) - OPTIONFLAGS_BY_NAME[name] = flag - return flag + # Create a new flag unless `name` is already known. + return OPTIONFLAGS_BY_NAME.setdefault(name, 1 << len(OPTIONFLAGS_BY_NAME)) DONT_ACCEPT_TRUE_FOR_1 = register_optionflag('DONT_ACCEPT_TRUE_FOR_1') DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE') diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 1665c05414e2..36ffec906f99 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -1281,6 +1281,26 @@ count as failures: ValueError: 2 (3, 5) +New option flags can also be registered, via register_optionflag(). Here +we reach into doctest's internals a bit. + + >>> unlikely = "UNLIKELY_OPTION_NAME" + >>> unlikely in doctest.OPTIONFLAGS_BY_NAME + False + >>> new_flag_value = doctest.register_optionflag(unlikely) + >>> unlikely in doctest.OPTIONFLAGS_BY_NAME + True + +Before 2.4.4/2.5, registering a name more than once erroneously created +more than one flag value. Here we verify that's fixed: + + >>> redundant_flag_value = doctest.register_optionflag(unlikely) + >>> redundant_flag_value == new_flag_value + True + +Clean up. + >>> del doctest.OPTIONFLAGS_BY_NAME[unlikely] + """ def option_directives(): r""" diff --git a/Misc/NEWS b/Misc/NEWS index 593a881df604..5adfc1178741 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -32,6 +32,9 @@ Extension Modules Library ------- +- Patch #1478292. ``doctest.register_optionflag(name)`` shouldn't create a + new flag when ``name`` is already the name of an option flag. + - Bug #1473760: ``tempfile.TemporaryFile()`` could hang on Windows, when called from a thread spawned as a side effect of importing a module.