From 21f2d032032a3a7112facd021b56f6b564290e43 Mon Sep 17 00:00:00 2001
From: robk-tahoe <robk-tahoe@allmydata.com>
Date: Tue, 19 Feb 2008 17:05:14 -0700
Subject: [PATCH] runner: tweaked runner to make it easier to extend with
 additional subcommands

runner provides the main point of entry for the 'tahoe' command, and
provides various subcommands by default. this provides a hook whereby
additional subcommands can be added in in other contexts, providing a
simple way to extend the (sub)commands space available through 'tahoe'
---
 src/allmydata/scripts/runner.py | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/allmydata/scripts/runner.py b/src/allmydata/scripts/runner.py
index fe51dc38..a77810b0 100644
--- a/src/allmydata/scripts/runner.py
+++ b/src/allmydata/scripts/runner.py
@@ -19,19 +19,19 @@ class Options(BaseOptions, usage.Options):
         if not hasattr(self, 'subOptions'):
             raise usage.UsageError("must specify a command")
 
-class OptionsNoNodeControl(Options):
-    synopsis = "Usage:  tahoe <command> [command options]"
+def runner(argv, run_by_human=True, stdout=sys.stdout, stderr=sys.stderr,
+                 install_node_control=True, additional_commands=None):
 
-    subCommands = []
-    subCommands += _general_commands
+    config = Options()
+    if install_node_control:
+        config.subCommands.extend(startstop_node.subCommands)
 
+    ac_dispatch = {}
+    if additional_commands:
+        for ac in additional_commands:
+            config.subCommands.extend(ac.subCommands)
+            ac_dispatch.update(ac.dispatch)
 
-def runner(argv, run_by_human=True, stdout=sys.stdout, stderr=sys.stderr,
-                 install_node_control=True):
-    if install_node_control:
-        config = Options()
-    else:
-        config = OptionsNoNodeControl()
     try:
         config.parseOptions(argv)
     except usage.error, e:
@@ -60,6 +60,8 @@ def runner(argv, run_by_human=True, stdout=sys.stdout, stderr=sys.stderr,
         rc = debug.dispatch[command](so, stdout, stderr)
     elif command in cli.dispatch:
         rc = cli.dispatch[command](so, stdout, stderr)
+    elif command in ac_dispatch:
+        rc = ac_dispatch[command](so, stdout, stderr)
     else:
         raise usage.UsageError()
 
-- 
2.45.2