Updating "be set --help" and "be status --help".
authorW. Trevor King <wking@drexel.edu>
Sat, 11 Jul 2009 13:46:38 +0000 (09:46 -0400)
committerW. Trevor King <wking@drexel.edu>
Sat, 11 Jul 2009 13:46:38 +0000 (09:46 -0400)
I don't really like the "defaults to None" for the settings that have
funky initialization procedures (most of them :p), but I'm not sure
how to handle that cleanly yet.  Perhaps
  be set --current
I also need to find a method of adding complicated settings like the
nested lists for severities, etc from the "be set" commandline.

becommands/set.py
becommands/status.py
libbe/bugdir.py
libbe/settings_object.py

index a7a47ccd890a4407d3f98ced37c69b4b8e843a40..b050b35ae37dd3a4f367e71c705aefc3db93e4de 100644 (file)
@@ -18,7 +18,8 @@
 #    along with this program; if not, write to the Free Software
 #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 """Change tree settings"""
-from libbe import cmdutil, bugdir, settings_object
+import textwrap
+from libbe import cmdutil, bugdir, rcs, settings_object
 __desc__ = __doc__
 
 def _value_string(bd, setting):
@@ -75,6 +76,30 @@ def get_parser():
     parser = cmdutil.CmdOptionParser("be set [NAME] [VALUE]")
     return parser
 
+def get_bugdir_settings():
+    settings = []
+    for s in bugdir.BugDir.settings_properties:
+        settings.append(s)
+    settings.sort()
+    documented_settings = []
+    for s in settings:
+        set = getattr(bugdir.BugDir, s)
+        dstr = set.__doc__.strip()
+        # per-setting comment adjustments
+        if s == "rcs_name":
+            lines = dstr.split('\n')
+            while lines[0].startswith("This property defaults to") == False:
+                lines.pop(0)
+            assert len(lines) != None, \
+                "Unexpected rcs_name docstring:\n  '%s'" % dstr
+            lines.insert(
+                0, "The name of the revision control system to use.\n")
+            dstr = '\n'.join(lines)
+        doc = textwrap.wrap(dstr, width=70, initial_indent='  ',
+                            subsequent_indent='  ')
+        documented_settings.append("%s\n%s" % (s, '\n'.join(doc)))
+    return documented_settings
+
 longhelp="""
 Show or change per-tree settings. 
 
@@ -82,14 +107,11 @@ If name and value are supplied, the name is set to a new value.
 If no value is specified, the current value is printed.
 If no arguments are provided, all names and values are listed. 
 
-Interesting settings are:
-rcs_name
-  The name of the revision control system.  "Arch" and "None" are supported.
-target
-  The current development goal 
-
 To unset a setting, set it to "none".
-"""
+
+Allowed settings are:
+
+%s""" % ('\n'.join(get_bugdir_settings()),)
 
 def help():
     return get_parser().help_str() + longhelp
index 7413136f42d09840b63b125df3e00487055043f1..882f7b3895cbd3abc35c70c2dbc797110f4c2b78 100644 (file)
@@ -55,24 +55,39 @@ def get_parser():
 
 
 def help():
-    longhelp=["""
-Show or change a bug's status.
-
-If no status is specified, the current value is printed.  If a status
-is specified, it will be assigned to the bug.
-
-Status levels are:
-"""]
     try: # See if there are any per-tree status configurations
         bd = bugdir.BugDir(from_disk=True, manipulate_encodings=False)
     except bugdir.NoBugDir, e:
         pass # No tree, just show the defaults
     longest_status_len = max([len(s) for s in bug.status_values])
-    for status in bug.status_values :
+    active_statuses = []
+    for status in bug.active_status_values :
+        description = bug.status_description[status]
+        s = "%*s : %s" % (longest_status_len, status, description)
+        active_statuses.append(s)
+    inactive_statuses = []
+    for status in bug.inactive_status_values :
         description = bug.status_description[status]
-        s = "%*s : %s\n" % (longest_status_len, status, description)
-        longhelp.append(s)
-    longhelp = ''.join(longhelp)
+        s = "%*s : %s" % (longest_status_len, status, description)
+        inactive_statuses.append(s)
+    longhelp="""
+Show or change a bug's status.
+
+If no status is specified, the current value is printed.  If a status
+is specified, it will be assigned to the bug.
+
+There are two classes of statuses, active and inactive, which are only
+important for commands like "be list" that show only active bugs by
+default.
+
+Active status levels are:
+  %s
+Inactive status levels are:
+  %s
+
+You can overide the list of allowed statuses on a per-repository basis.
+See "be set --help" for more details.
+""" % ('\n  '.join(active_statuses), '\n  '.join(inactive_statuses))
     return get_parser().help_str() + longhelp
 
 def complete(options, args, parser):
index 67ff074e1e11fbad892abed1d1b27b176ce8ecbd..fed9aa3402c289a6ed0cde8d79651aa2111d2306 100644 (file)
@@ -135,7 +135,7 @@ class BugDir (list, settings_object.SavedSettingsObject):
         return settings_object.versioned_property(**kwargs)
 
     @_versioned_property(name="target",
-                         doc="The current project development target")
+                         doc="The current project development target.")
     def target(): return {}
 
     def _guess_encoding(self):
index d362bf9209067a779fda1cd944724dade798a9a6..1dadd0a3170d579b173fcd058df3951fee54407f 100644 (file)
@@ -128,14 +128,14 @@ def versioned_property(name, doc,
         if default != None or generator == None:
             defaulting  = defaulting_property(default=default, null=EMPTY,
                                               default_mutable=mutable)
-            fulldoc += "\n\nThis property defaults to %s" % default
+            fulldoc += "\n\nThis property defaults to %s." % default
         if generator != None:
             cached = cached_property(generator=generator, initVal=EMPTY,
                                      mutable=mutable)
-            fulldoc += "\n\nThis property is generated with %s" % generator
+            fulldoc += "\n\nThis property is generated with %s." % generator
         if check_fn != None:
             fn_checked = fn_checked_property(value_allowed_fn=check_fn)
-            fulldoc += "\n\nThis property is checked with %s" % check_fn
+            fulldoc += "\n\nThis property is checked with %s." % check_fn
         if allowed != None:
             checked = checked_property(allowed=allowed)
             fulldoc += "\n\nThe allowed values for this property are: %s." \