Patchwork [5,of,7,v3,flags] fancyopts: notice default of false and rewrite it to None (API)

login
register
mail settings
Submitter Augie Fackler
Date Sept. 14, 2016, 3:11 a.m.
Message ID <944e174886bc83d50e69.1473822681@augie-macbookair2.roam.corp.google.com>
Download mbox | patch
Permalink /patch/16618/
State Changes Requested
Headers show

Comments

Augie Fackler - Sept. 14, 2016, 3:11 a.m.
# HG changeset patch
# User Augie Fackler <augie@google.com>
# Date 1472583470 14400
#      Tue Aug 30 14:57:50 2016 -0400
# Node ID 944e174886bc83d50e6995bafa6017c02305aead
# Parent  5c886401f3ae369de5cc2583fb46d065ae4d673f
fancyopts: notice default of false and rewrite it to None (API)

This opens the door to noticing the difference between "flag not
specified false" and "explicitly false" in an upcoming patch. Marked
as an internal API change since I did have to tweak a couple of spots
in our code that were making assumptions about the nature of falseness.

Patch

diff --git a/mercurial/fancyopts.py b/mercurial/fancyopts.py
--- a/mercurial/fancyopts.py
+++ b/mercurial/fancyopts.py
@@ -92,9 +92,15 @@  def fancyopts(args, options, state, gnu=
             short, name, default, comment, dummy = option
         else:
             short, name, default, comment = option
-        if default is True and not boolok:
-            raise ValueError('fancyopts does not support default-true '
-                             'boolean flags: %r' % name)
+        if not boolok:
+            if default is True:
+                raise ValueError('fancyopts does not support default-true '
+                                 'boolean flags: %r' % name)
+            if default is False:
+                # So higher layers of hg can identify the difference
+                # between unspecified and explicitly-false, set this to
+                # None here.
+                default = None
         # convert opts to getopt format
         oname = name
         name = name.replace('-', '_')