From 5045a8721a46e73e1b2252ff37e97c596bb9be4f Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Wed, 27 Jan 2010 14:37:58 -0800
Subject: [PATCH] scripts/runner.py: simplify David-Sarah's clever
 grouped-commands usage trick

---
 src/allmydata/scripts/runner.py | 43 +++++++++++++++------------------
 1 file changed, 19 insertions(+), 24 deletions(-)

diff --git a/src/allmydata/scripts/runner.py b/src/allmydata/scripts/runner.py
index 1ac8984e..ee8415d5 100644
--- a/src/allmydata/scripts/runner.py
+++ b/src/allmydata/scripts/runner.py
@@ -10,40 +10,35 @@ pkg_resources.require('allmydata-tahoe')
 from allmydata.scripts.common import BaseOptions
 import debug, create_node, startstop_node, cli, keygen, stats_gatherer
 
-def group(s):
-    return [["\n" + s, None, None, None]]
-
-_commandUsage = ( group("Administration")
-                +   create_node.subCommands
-                +   keygen.subCommands
-                +   stats_gatherer.subCommands
-                + group("Controlling a node")
-                +   startstop_node.subCommands
-                + group("Debugging")
-                +   debug.subCommands
-                + group("Using the filesystem")
-                +   cli.subCommands
-                )
-
-_subCommands = filter(lambda (a, b, c, d): not a.startswith("\n"), _commandUsage)
-_synopsis = "Usage:  tahoe <command> [command options]"
+def GROUP(s):
+    # Usage.parseOptions compares argv[1] against command[0], so it will
+    # effectively ignore any "subcommand" that starts with a newline. We use
+    # these to insert section headers into the --help output.
+    return [("\n" + s, None, None, None)]
+
 
 class Options(BaseOptions, usage.Options):
-    synopsis = _synopsis
-    subCommands = _subCommands
+    synopsis = "Usage:  tahoe <command> [command options]"
+    subCommands = ( GROUP("Administration")
+                    +   create_node.subCommands
+                    +   keygen.subCommands
+                    +   stats_gatherer.subCommands
+                    + GROUP("Controlling a node")
+                    +   startstop_node.subCommands
+                    + GROUP("Debugging")
+                    +   debug.subCommands
+                    + GROUP("Using the filesystem")
+                    +   cli.subCommands
+                    )
 
     def getUsage(self, **kwargs):
-        t = _Usage().getUsage(**kwargs)
+        t = usage.Options.getUsage(self, **kwargs)
         return t + "\nPlease run 'tahoe <command> --help' for more details on each command.\n"
 
     def postOptions(self):
         if not hasattr(self, 'subOptions'):
             raise usage.UsageError("must specify a command")
 
-class _Usage(BaseOptions, usage.Options):
-    synopsis = _synopsis
-    subCommands = _commandUsage
-
 def runner(argv,
            run_by_human=True,
            stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr,
-- 
2.45.2