[PATCH 7 of 7 v3 flags] help: mark boolean flags with [?] and explain that they can be negated (RFC)

Augie Fackler raf at durin42.com
Tue Sep 13 23:11:23 EDT 2016


# HG changeset patch
# User Augie Fackler <augie at google.com>
# Date 1473821892 14400
#      Tue Sep 13 22:58:12 2016 -0400
# Node ID 03685e9da0e6085ef1feff99a1c6fd994f41b620
# Parent  e6d239fd14a1065f9cf05dc0b45be41408b306a4
help: mark boolean flags with [?] and explain that they can be negated (RFC)

This is an RFC because I'm still not crazy about how this is
documented - perhaps we should add some text discussing what it means
for a flag to be a boolean flag and be negatable?

diff --git a/mercurial/help.py b/mercurial/help.py
--- a/mercurial/help.py
+++ b/mercurial/help.py
@@ -20,6 +20,7 @@ from . import (
     encoding,
     error,
     extensions,
+    fancyopts,
     filemerge,
     fileset,
     minirst,
@@ -87,11 +88,16 @@ def optrst(header, options, verbose):
             multioccur = True
         elif (default is not None) and not isinstance(default, bool):
             lo += " %s" % optlabel
+        elif longopt not in fancyopts.nevernegate:
+            lo += '[?]'
+            multioccur = True
 
         data.append((so, lo, desc))
 
     if multioccur:
-        header += (_(" ([+] can be repeated)"))
+        m = _(
+            " ([+] can be repeated, options marked [?] are boolean flags)")
+        header += (m)
 
     rst = ['\n%s:\n\n' % header]
     rst.extend(minirst.maketable(data, 1))
diff --git a/tests/test-help.t b/tests/test-help.t
--- a/tests/test-help.t
+++ b/tests/test-help.t
@@ -311,26 +311,26 @@ Test short command list with verbose opt
    update, up, checkout, co
                  update working directory (or switch revisions)
   
-  global options ([+] can be repeated):
+  global options ([+] can be repeated, options marked [?] are boolean flags):
   
    -R --repository REPO   repository root directory or name of overlay bundle
                           file
       --cwd DIR           change working directory
    -y --noninteractive    do not prompt, automatically pick the first choice for
                           all prompts
-   -q --quiet             suppress output
-   -v --verbose           enable additional output
+   -q --quiet[?]          suppress output
+   -v --verbose[?]        enable additional output
       --config CONFIG [+] set/override config option (use 'section.name=value')
-      --debug             enable debugging output
-      --debugger          start debugger
+      --debug[?]          enable debugging output
+      --debugger[?]       start debugger
       --encoding ENCODE   set the charset encoding (default: ascii)
       --encodingmode MODE set the charset encoding mode (default: strict)
-      --traceback         always print a traceback on exception
-      --time              time how long the command takes
-      --profile           print command execution profile
+      --traceback[?]      always print a traceback on exception
+      --time[?]           time how long the command takes
+      --profile[?]        print command execution profile
       --version           output version information and exit
    -h --help              display help and exit
-      --hidden            consider hidden changesets
+      --hidden[?]         consider hidden changesets
   
   (use "hg help" for the full list of commands)
 
@@ -349,12 +349,12 @@ Test short command list with verbose opt
   
       Returns 0 if all files are successfully added.
   
-  options ([+] can be repeated):
+  options ([+] can be repeated, options marked [?] are boolean flags):
   
    -I --include PATTERN [+] include names matching the given patterns
    -X --exclude PATTERN [+] exclude names matching the given patterns
-   -S --subrepos            recurse into subrepositories
-   -n --dry-run             do not perform actions, just print output
+   -S --subrepos[?]         recurse into subrepositories
+   -n --dry-run[?]          do not perform actions, just print output
   
   (some details hidden, use --verbose to show complete help)
 
@@ -400,33 +400,33 @@ Verbose help for add
   
       Returns 0 if all files are successfully added.
   
-  options ([+] can be repeated):
+  options ([+] can be repeated, options marked [?] are boolean flags):
   
    -I --include PATTERN [+] include names matching the given patterns
    -X --exclude PATTERN [+] exclude names matching the given patterns
-   -S --subrepos            recurse into subrepositories
-   -n --dry-run             do not perform actions, just print output
-  
-  global options ([+] can be repeated):
+   -S --subrepos[?]         recurse into subrepositories
+   -n --dry-run[?]          do not perform actions, just print output
+  
+  global options ([+] can be repeated, options marked [?] are boolean flags):
   
    -R --repository REPO   repository root directory or name of overlay bundle
                           file
       --cwd DIR           change working directory
    -y --noninteractive    do not prompt, automatically pick the first choice for
                           all prompts
-   -q --quiet             suppress output
-   -v --verbose           enable additional output
+   -q --quiet[?]          suppress output
+   -v --verbose[?]        enable additional output
       --config CONFIG [+] set/override config option (use 'section.name=value')
-      --debug             enable debugging output
-      --debugger          start debugger
+      --debug[?]          enable debugging output
+      --debugger[?]       start debugger
       --encoding ENCODE   set the charset encoding (default: ascii)
       --encodingmode MODE set the charset encoding mode (default: strict)
-      --traceback         always print a traceback on exception
-      --time              time how long the command takes
-      --profile           print command execution profile
+      --traceback[?]      always print a traceback on exception
+      --time[?]           time how long the command takes
+      --profile[?]        print command execution profile
       --version           output version information and exit
    -h --help              display help and exit
-      --hidden            consider hidden changesets
+      --hidden[?]         consider hidden changesets
 
 Test the textwidth config option
 
@@ -460,12 +460,12 @@ Test help option with version option
   
   add the specified files on the next commit
   
-  options ([+] can be repeated):
+  options ([+] can be repeated, options marked [?] are boolean flags):
   
    -I --include PATTERN [+] include names matching the given patterns
    -X --exclude PATTERN [+] exclude names matching the given patterns
-   -S --subrepos            recurse into subrepositories
-   -n --dry-run             do not perform actions, just print output
+   -S --subrepos[?]         recurse into subrepositories
+   -n --dry-run[?]          do not perform actions, just print output
   
   (use "hg add -h" to show more help)
   [255]
@@ -532,25 +532,25 @@ Test command without options
   
       Returns 0 on success.
   
-  options ([+] can be repeated):
-  
-   -r --rev REV [+]         revision
-   -c --change REV          change made by revision
-   -a --text                treat all files as text
-   -g --git                 use git extended diff format
-      --nodates             omit dates from diff headers
-      --noprefix            omit a/ and b/ prefixes from filenames
-   -p --show-function       show which function each change is in
-      --reverse             produce a diff that undoes the changes
-   -w --ignore-all-space    ignore white space when comparing lines
-   -b --ignore-space-change ignore changes in the amount of white space
-   -B --ignore-blank-lines  ignore changes whose lines are all blank
-   -U --unified NUM         number of lines of context to show
-      --stat                output diffstat-style summary of changes
-      --root DIR            produce diffs relative to subdirectory
-   -I --include PATTERN [+] include names matching the given patterns
-   -X --exclude PATTERN [+] exclude names matching the given patterns
-   -S --subrepos            recurse into subrepositories
+  options ([+] can be repeated, options marked [?] are boolean flags):
+  
+   -r --rev REV [+]            revision
+   -c --change REV             change made by revision
+   -a --text[?]                treat all files as text
+   -g --git[?]                 use git extended diff format
+      --nodates[?]             omit dates from diff headers
+      --noprefix[?]            omit a/ and b/ prefixes from filenames
+   -p --show-function[?]       show which function each change is in
+      --reverse[?]             produce a diff that undoes the changes
+   -w --ignore-all-space[?]    ignore white space when comparing lines
+   -b --ignore-space-change[?] ignore changes in the amount of white space
+   -B --ignore-blank-lines[?]  ignore changes whose lines are all blank
+   -U --unified NUM            number of lines of context to show
+      --stat[?]                output diffstat-style summary of changes
+      --root DIR               produce diffs relative to subdirectory
+   -I --include PATTERN [+]    include names matching the given patterns
+   -X --exclude PATTERN [+]    exclude names matching the given patterns
+   -S --subrepos[?]            recurse into subrepositories
   
   (some details hidden, use --verbose to show complete help)
 
@@ -594,24 +594,24 @@ Test command without options
   
       Returns 0 on success.
   
-  options ([+] can be repeated):
-  
-   -A --all                 show status of all files
-   -m --modified            show only modified files
-   -a --added               show only added files
-   -r --removed             show only removed files
-   -d --deleted             show only deleted (but tracked) files
-   -c --clean               show only files without changes
-   -u --unknown             show only unknown (not tracked) files
-   -i --ignored             show only ignored files
-   -n --no-status           hide status prefix
-   -C --copies              show source of copied files
-   -0 --print0              end filenames with NUL, for use with xargs
+  options ([+] can be repeated, options marked [?] are boolean flags):
+  
+   -A --all[?]              show status of all files
+   -m --modified[?]         show only modified files
+   -a --added[?]            show only added files
+   -r --removed[?]          show only removed files
+   -d --deleted[?]          show only deleted (but tracked) files
+   -c --clean[?]            show only files without changes
+   -u --unknown[?]          show only unknown (not tracked) files
+   -i --ignored[?]          show only ignored files
+   -n --no-status[?]        hide status prefix
+   -C --copies[?]           show source of copied files
+   -0 --print0[?]           end filenames with NUL, for use with xargs
       --rev REV [+]         show difference from revision
       --change REV          list the changed files of a revision
    -I --include PATTERN [+] include names matching the given patterns
    -X --exclude PATTERN [+] exclude names matching the given patterns
-   -S --subrepos            recurse into subrepositories
+   -S --subrepos[?]         recurse into subrepositories
   
   (some details hidden, use --verbose to show complete help)
 
@@ -715,9 +715,9 @@ Test for aliases
   
   defined by: helpext
   
-  options:
-  
-    --remote check for push and pull
+  options ([+] can be repeated, options marked [?] are boolean flags):
+  
+    --remote[?] check for push and pull
   
   (some details hidden, use --verbose to show complete help)
 
@@ -739,11 +739,11 @@ Test command with no help text
   
   (no help text available)
   
-  options:
+  options ([+] can be repeated, options marked [?] are boolean flags):
   
       --longdesc VALUE xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (default: 3)
-   -n --               normal desc
+   -n --[?]            normal desc
       --newline VALUE  line1 line2
   
   (some details hidden, use --verbose to show complete help)
@@ -1128,9 +1128,9 @@ test deprecated and experimental options
 
 test deprecated and experimental options is shown with -v
   $ hg help -v debugoptDEP | grep dopt
-    --dopt option is (DEPRECATED)
+    --dopt[?] option is (DEPRECATED)
   $ hg help -v debugoptEXP | grep eopt
-    --eopt option is (EXPERIMENTAL)
+    --eopt[?] option is (EXPERIMENTAL)
 
 #if gettext
 test deprecated option is hidden with translation with untranslated description
@@ -2461,7 +2461,7 @@ Dish up an empty repo; serve it cold.
   Returns 0 if all files are successfully added.
   </p>
   <p>
-  options ([+] can be repeated):
+  options ([+] can be repeated, options marked [?] are boolean flags):
   </p>
   <table>
   <tr><td>-I</td>
@@ -2471,14 +2471,14 @@ Dish up an empty repo; serve it cold.
   <td>--exclude PATTERN [+]</td>
   <td>exclude names matching the given patterns</td></tr>
   <tr><td>-S</td>
-  <td>--subrepos</td>
+  <td>--subrepos[?]</td>
   <td>recurse into subrepositories</td></tr>
   <tr><td>-n</td>
-  <td>--dry-run</td>
+  <td>--dry-run[?]</td>
   <td>do not perform actions, just print output</td></tr>
   </table>
   <p>
-  global options ([+] can be repeated):
+  global options ([+] can be repeated, options marked [?] are boolean flags):
   </p>
   <table>
   <tr><td>-R</td>
@@ -2491,19 +2491,19 @@ Dish up an empty repo; serve it cold.
   <td>--noninteractive</td>
   <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
   <tr><td>-q</td>
-  <td>--quiet</td>
+  <td>--quiet[?]</td>
   <td>suppress output</td></tr>
   <tr><td>-v</td>
-  <td>--verbose</td>
+  <td>--verbose[?]</td>
   <td>enable additional output</td></tr>
   <tr><td></td>
   <td>--config CONFIG [+]</td>
   <td>set/override config option (use 'section.name=value')</td></tr>
   <tr><td></td>
-  <td>--debug</td>
+  <td>--debug[?]</td>
   <td>enable debugging output</td></tr>
   <tr><td></td>
-  <td>--debugger</td>
+  <td>--debugger[?]</td>
   <td>start debugger</td></tr>
   <tr><td></td>
   <td>--encoding ENCODE</td>
@@ -2512,13 +2512,13 @@ Dish up an empty repo; serve it cold.
   <td>--encodingmode MODE</td>
   <td>set the charset encoding mode (default: strict)</td></tr>
   <tr><td></td>
-  <td>--traceback</td>
+  <td>--traceback[?]</td>
   <td>always print a traceback on exception</td></tr>
   <tr><td></td>
-  <td>--time</td>
+  <td>--time[?]</td>
   <td>time how long the command takes</td></tr>
   <tr><td></td>
-  <td>--profile</td>
+  <td>--profile[?]</td>
   <td>print command execution profile</td></tr>
   <tr><td></td>
   <td>--version</td>
@@ -2527,7 +2527,7 @@ Dish up an empty repo; serve it cold.
   <td>--help</td>
   <td>display help and exit</td></tr>
   <tr><td></td>
-  <td>--hidden</td>
+  <td>--hidden[?]</td>
   <td>consider hidden changesets</td></tr>
   </table>
   
@@ -2654,17 +2654,17 @@ Dish up an empty repo; serve it cold.
   Returns 0 on success, 1 if any warnings encountered.
   </p>
   <p>
-  options ([+] can be repeated):
+  options ([+] can be repeated, options marked [?] are boolean flags):
   </p>
   <table>
   <tr><td>-A</td>
-  <td>--after</td>
+  <td>--after[?]</td>
   <td>record delete for missing files</td></tr>
   <tr><td>-f</td>
-  <td>--force</td>
+  <td>--force[?]</td>
   <td>forget added files, delete modified files</td></tr>
   <tr><td>-S</td>
-  <td>--subrepos</td>
+  <td>--subrepos[?]</td>
   <td>recurse into subrepositories</td></tr>
   <tr><td>-I</td>
   <td>--include PATTERN [+]</td>
@@ -2674,7 +2674,7 @@ Dish up an empty repo; serve it cold.
   <td>exclude names matching the given patterns</td></tr>
   </table>
   <p>
-  global options ([+] can be repeated):
+  global options ([+] can be repeated, options marked [?] are boolean flags):
   </p>
   <table>
   <tr><td>-R</td>
@@ -2687,19 +2687,19 @@ Dish up an empty repo; serve it cold.
   <td>--noninteractive</td>
   <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
   <tr><td>-q</td>
-  <td>--quiet</td>
+  <td>--quiet[?]</td>
   <td>suppress output</td></tr>
   <tr><td>-v</td>
-  <td>--verbose</td>
+  <td>--verbose[?]</td>
   <td>enable additional output</td></tr>
   <tr><td></td>
   <td>--config CONFIG [+]</td>
   <td>set/override config option (use 'section.name=value')</td></tr>
   <tr><td></td>
-  <td>--debug</td>
+  <td>--debug[?]</td>
   <td>enable debugging output</td></tr>
   <tr><td></td>
-  <td>--debugger</td>
+  <td>--debugger[?]</td>
   <td>start debugger</td></tr>
   <tr><td></td>
   <td>--encoding ENCODE</td>
@@ -2708,13 +2708,13 @@ Dish up an empty repo; serve it cold.
   <td>--encodingmode MODE</td>
   <td>set the charset encoding mode (default: strict)</td></tr>
   <tr><td></td>
-  <td>--traceback</td>
+  <td>--traceback[?]</td>
   <td>always print a traceback on exception</td></tr>
   <tr><td></td>
-  <td>--time</td>
+  <td>--time[?]</td>
   <td>time how long the command takes</td></tr>
   <tr><td></td>
-  <td>--profile</td>
+  <td>--profile[?]</td>
   <td>print command execution profile</td></tr>
   <tr><td></td>
   <td>--version</td>
@@ -2723,7 +2723,7 @@ Dish up an empty repo; serve it cold.
   <td>--help</td>
   <td>display help and exit</td></tr>
   <tr><td></td>
-  <td>--hidden</td>
+  <td>--hidden[?]</td>
   <td>consider hidden changesets</td></tr>
   </table>
   


More information about the Mercurial-devel mailing list