[tor-commits] [arm/release] Covering tor config options with /help

atagar at torproject.org atagar at torproject.org
Sun Sep 25 21:38:29 UTC 2011


commit aa7fee5d5d92e33e81a169c254c4fc80a3ce0947
Author: Damian Johnson <atagar at torproject.org>
Date:   Wed Sep 14 09:56:04 2011 -0700

    Covering tor config options with /help
    
    Issuing '/help [tor config option]' (for instance '/help exitpolicy') will
    provide usage information and the man page description for the option.
---
 src/util/torConfig.py      |   14 +++++++-------
 src/util/torInterpretor.py |   24 ++++++++++++++++++++++--
 2 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/src/util/torConfig.py b/src/util/torConfig.py
index 557dc09..b2cf345 100644
--- a/src/util/torConfig.py
+++ b/src/util/torConfig.py
@@ -77,7 +77,8 @@ class ManPageEntry:
   Information provided about a tor configuration option in its man page entry.
   """
   
-  def __init__(self, index, category, argUsage, description):
+  def __init__(self, option, index, category, argUsage, description):
+    self.option = option
     self.index = index
     self.category = category
     self.argUsage = argUsage
@@ -168,7 +169,7 @@ def loadOptionDescriptions(loadPath = None, checkVersion = True):
             if inputFileContents: loadedLine = inputFileContents.pop(0)
             else: break
           
-          CONFIG_DESCRIPTIONS[option.lower()] = ManPageEntry(indexArg, category, argument, description.rstrip())
+          CONFIG_DESCRIPTIONS[option.lower()] = ManPageEntry(option, indexArg, category, argument, description.rstrip())
       except IndexError:
         CONFIG_DESCRIPTIONS.clear()
         raise IOError("input file format is invalid")
@@ -209,7 +210,7 @@ def loadOptionDescriptions(loadPath = None, checkVersion = True):
           # noise).
           strippedDescription = lastDescription.strip()
           if lastOption and (not validOptions or lastOption.lower() in validOptions):
-            CONFIG_DESCRIPTIONS[lastOption.lower()] = ManPageEntry(optionCount, lastCategory, lastArg, strippedDescription)
+            CONFIG_DESCRIPTIONS[lastOption.lower()] = ManPageEntry(lastOption, optionCount, lastCategory, lastArg, strippedDescription)
             optionCount += 1
           lastDescription = ""
           
@@ -271,9 +272,8 @@ def saveOptionDescriptions(path):
   torVersion = torTools.getConn().getInfo("version", "")
   outputFile.write("Tor Version %s\n" % torVersion)
   for i in range(len(sortedOptions)):
-    option = sortedOptions[i]
-    manEntry = getConfigDescription(option)
-    outputFile.write("%s\nindex: %i\n%s\n%s\n%s\n" % (manEntry.category, manEntry.index, option, manEntry.argUsage, manEntry.description))
+    manEntry = getConfigDescription(sortedOptions[i])
+    outputFile.write("%s\nindex: %i\n%s\n%s\n%s\n" % (manEntry.category, manEntry.index, manEntry.option, manEntry.argUsage, manEntry.description))
     if i != len(sortedOptions) - 1: outputFile.write(PERSIST_ENTRY_DIVIDER)
   
   outputFile.close()
@@ -281,7 +281,7 @@ def saveOptionDescriptions(path):
 
 def getConfigSummary(option):
   """
-  Provides a short summary description of th configuration option. If none is
+  Provides a short summary description of the configuration option. If none is
   known then this proivdes None.
   
   Arguments:
diff --git a/src/util/torInterpretor.py b/src/util/torInterpretor.py
index 3908d6e..5733f8a 100644
--- a/src/util/torInterpretor.py
+++ b/src/util/torInterpretor.py
@@ -9,7 +9,7 @@ import readline
 
 import version
 
-from util import connections, enum, hostnames, torTools
+from util import connections, enum, hostnames, torConfig, torTools, uiTools
 
 COLOR_PROMPT = True     # provides a colored interpretor prompt
 INFO_HOSTNAMES = False  # hostname lookups in /info results
@@ -300,7 +300,27 @@ class ControlInterpretor:
         for line in description.split("\n"):
           outputEntry.append(("  " + line + "\n", OUTPUT_FORMAT))
       else:
-        outputEntry.append(("No help information for '%s'..." % arg, ERROR_FORMAT))
+        # check if this is a configuration option
+        manEntry = torConfig.getConfigDescription(arg)
+        
+        if manEntry:
+          # provides basic usage information in bold, followed an indented
+          # copy of the man page description (wrapped to eighty characters)
+          
+          helpTitle = "%s %s (category: %s)\n" % (manEntry.option, manEntry.argUsage, manEntry.category)
+          outputEntry.append((helpTitle, OUTPUT_FORMAT + (Attr.BOLD, )))
+          
+          descLines = manEntry.description.split("\n")
+          
+          for line in descLines:
+            if not line:
+              outputEntry.append(("\n", OUTPUT_FORMAT))
+            else:
+              while line:
+                drawPortion, line = uiTools.cropStr(line, 88, 4, 4, uiTools.Ending.HYPHEN, True)
+                outputEntry.append(("  %s\n" % drawPortion.strip(), OUTPUT_FORMAT))
+        else:
+          outputEntry.append(("No help information for '%s'..." % arg, ERROR_FORMAT))
     else:
       # provides the GENERAL_HELP with everything bolded except descriptions
       for line in GENERAL_HELP.split("\n"):





More information about the tor-commits mailing list