From 6f6648e436d02bce0e49ba82f4377c0d2f586f0f Mon Sep 17 00:00:00 2001
From: "Miss Islington (bot)"
 <31488909+miss-islington@users.noreply.github.com>
Date: Tue, 17 Aug 2021 02:40:41 -0700
Subject: bpo-38956: don't print BooleanOptionalAction's default twice
 (GH-27672)

Co-authored-by: Micky Yun Chan <michan@redhat.com>
(cherry picked from commit 1512bc21d60f098a9e9f37b44a2f6a9b49a3fd4f)

Co-authored-by: Maximilian Hils <git@maximilianhils.com>
---
 Lib/argparse.py                                     |  2 +-
 Lib/test/test_argparse.py                           | 21 ++++++++++++++-------
 .../2021-08-09-13-17-10.bpo-38956.owWLNv.rst        |  1 +
 3 files changed, 16 insertions(+), 8 deletions(-)
 create mode 100644 Misc/NEWS.d/next/Library/2021-08-09-13-17-10.bpo-38956.owWLNv.rst

diff --git a/Lib/argparse.py b/Lib/argparse.py
index e3a49e7..2ded39a 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -875,7 +875,7 @@ class BooleanOptionalAction(Action):
                 _option_strings.append(option_string)
 
         if help is not None and default is not None:
-            help += f" (default: {default})"
+            help += " (default: %(default)s)"
 
         super().__init__(
             option_strings=_option_strings,
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 0994e70..f453f60 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -4262,6 +4262,9 @@ class TestHelpArgumentDefaults(HelpTestCase):
     argument_signatures = [
         Sig('--foo', help='foo help - oh and by the way, %(default)s'),
         Sig('--bar', action='store_true', help='bar help'),
+        Sig('--taz', action=argparse.BooleanOptionalAction,
+            help='Whether to taz it', default=True),
+        Sig('--quux', help="Set the quux", default=42),
         Sig('spam', help='spam help'),
         Sig('badger', nargs='?', default='wooden', help='badger help'),
     ]
@@ -4270,25 +4273,29 @@ class TestHelpArgumentDefaults(HelpTestCase):
          [Sig('--baz', type=int, default=42, help='baz help')]),
     ]
     usage = '''\
-        usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger]
+        usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--quux QUUX]
+                    [--baz BAZ]
+                    spam [badger]
         '''
     help = usage + '''\
 
         description
 
         positional arguments:
-          spam        spam help
-          badger      badger help (default: wooden)
+          spam             spam help
+          badger           badger help (default: wooden)
 
         options:
-          -h, --help  show this help message and exit
-          --foo FOO   foo help - oh and by the way, None
-          --bar       bar help (default: False)
+          -h, --help       show this help message and exit
+          --foo FOO        foo help - oh and by the way, None
+          --bar            bar help (default: False)
+          --taz, --no-taz  Whether to taz it (default: True)
+          --quux QUUX      Set the quux (default: 42)
 
         title:
           description
 
-          --baz BAZ   baz help (default: 42)
+          --baz BAZ        baz help (default: 42)
         '''
     version = ''
 
diff --git a/Misc/NEWS.d/next/Library/2021-08-09-13-17-10.bpo-38956.owWLNv.rst b/Misc/NEWS.d/next/Library/2021-08-09-13-17-10.bpo-38956.owWLNv.rst
new file mode 100644
index 0000000..3f57c0e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-08-09-13-17-10.bpo-38956.owWLNv.rst
@@ -0,0 +1 @@
+:class:`argparse.BooleanOptionalAction`'s default value is no longer printed twice when used with :class:`argparse.ArgumentDefaultsHelpFormatter`.
-- 
cgit v0.12