aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libbe/command/set.py160
-rw-r--r--libbe/command/target.py7
2 files changed, 87 insertions, 80 deletions
diff --git a/libbe/command/set.py b/libbe/command/set.py
index 4d54a59..cea6fb9 100644
--- a/libbe/command/set.py
+++ b/libbe/command/set.py
@@ -17,90 +17,96 @@
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-"""Change tree settings"""
+
+
import textwrap
-from libbe import cmdutil, bugdir, vcs, settings_object
-__desc__ = __doc__
-
-def _value_string(bd, setting):
- val = bd.settings.get(setting, settings_object.EMPTY)
- if val == settings_object.EMPTY:
- default = getattr(bd, bd._setting_name_to_attr_name(setting))
- if default not in [None, settings_object.EMPTY]:
- val = "None (%s)" % default
- else:
- val = None
- return str(val)
-def execute(args, manipulate_encodings=True, restrict_file_access=False,
- dir="."):
- """
- >>> import os
- >>> bd = bugdir.SimpleBugDir()
- >>> os.chdir(bd.root)
- >>> execute(["target"], manipulate_encodings=False)
+import libbe
+import libbe.bugdir
+import libbe.command
+import libbe.command.util
+from libbe.storage.util.settings_object import EMPTY
+
+
+class Set (libbe.command.Command):
+ """Change bug directory settings
+
+ >>> import sys
+ >>> import libbe.bugdir
+ >>> bd = libbe.bugdir.SimpleBugDir(memory=False)
+ >>> cmd = Set()
+ >>> cmd._storage = bd.storage
+ >>> cmd._setup_io = lambda i_enc,o_enc : None
+ >>> cmd.stdout = sys.stdout
+
+ >>> ret = cmd.run(args=['target'])
None
- >>> execute(["target", "tomorrow"], manipulate_encodings=False)
- >>> execute(["target"], manipulate_encodings=False)
- tomorrow
- >>> execute(["target", "none"], manipulate_encodings=False)
- >>> execute(["target"], manipulate_encodings=False)
+ >>> ret = cmd.run(args=['target', 'abcdefg'])
+ >>> ret = cmd.run(args=['target'])
+ abcdefg
+ >>> ret = cmd.run(args=['target', 'none'])
+ >>> ret = cmd.run(args=['target'])
None
>>> bd.cleanup()
"""
- parser = get_parser()
- options, args = parser.parse_args(args)
- complete(options, args, parser)
- if len(args) > 2:
- raise cmdutil.UsageError, "Too many arguments"
- bd = bugdir.BugDir(from_disk=True,
- manipulate_encodings=manipulate_encodings,
- root=dir)
- if len(args) == 0:
- keys = bd.settings_properties
- keys.sort()
- for key in keys:
- print "%16s: %s" % (key, _value_string(bd, key))
- elif len(args) == 1:
- print _value_string(bd, args[0])
- else:
- if args[1] == "none":
- setattr(bd, args[0], settings_object.EMPTY)
+ name = 'set'
+
+ def __init__(self, *args, **kwargs):
+ libbe.command.Command.__init__(self, *args, **kwargs)
+ self.args.extend([
+ libbe.command.Argument(
+ name='setting', metavar='SETTING', optional=True,
+ completion_callback=complete_bugdir_settings),
+ libbe.command.Argument(
+ name='value', metavar='VALUE', optional=True)
+ ])
+
+ def _run(self, **params):
+ bugdir = self._get_bugdir()
+ if params['setting'] == None:
+ keys = bugdir.settings_properties
+ keys.sort()
+ for key in keys:
+ print >> self.stdout, \
+ '%16s: %s' % (key, _value_string(bugdir, key))
+ return 0
+ if params['setting'] not in bugdir.settings_properties:
+ msg = 'Invalid setting %s\n' % params['setting']
+ msg += 'Allowed settings:\n '
+ msg += '\n '.join(bugdir.settings_properties)
+ raise libbe.command.UserError(msg)
+ if params['value'] == None:
+ print _value_string(bugdir, params['setting'])
else:
- if args[0] not in bd.settings_properties:
- msg = "Invalid setting %s\n" % args[0]
- msg += 'Allowed settings:\n '
- msg += '\n '.join(bd.settings_properties)
- raise cmdutil.UserError(msg)
- old_setting = bd.settings.get(args[0])
- setattr(bd, args[0], args[1])
-
-def get_parser():
- parser = cmdutil.CmdOptionParser("be set [NAME] [VALUE]")
- return parser
+ if params['value'] == 'none':
+ params['value'] = EMPTY
+ old_setting = bugdir.settings.get(params['setting'])
+ attr = bugdir._setting_name_to_attr_name(params['setting'])
+ setattr(bugdir, attr, params['value'])
+ return 0
def get_bugdir_settings():
settings = []
- for s in bugdir.BugDir.settings_properties:
+ for s in libbe.bugdir.BugDir.settings_properties:
settings.append(s)
settings.sort()
documented_settings = []
for s in settings:
- set = getattr(bugdir.BugDir, s)
+ set = getattr(libbe.bugdir.BugDir, s)
dstr = set.__doc__.strip()
# per-setting comment adjustments
- if s == "vcs_name":
+ if s == 'vcs_name':
lines = dstr.split('\n')
- while lines[0].startswith("This property defaults to") == False:
+ while lines[0].startswith('This property defaults to') == False:
lines.pop(0)
assert len(lines) != None, \
- "Unexpected vcs_name docstring:\n '%s'" % dstr
+ 'Unexpected vcs_name docstring:\n "%s"' % dstr
lines.insert(
- 0, "The name of the revision control system to use.\n")
+ 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)))
+ documented_settings.append('%s\n%s' % (s, '\n'.join(doc)))
return documented_settings
longhelp="""
@@ -116,17 +122,21 @@ Allowed settings are:
%s""" % ('\n'.join(get_bugdir_settings()),)
-def help():
- return get_parser().help_str() + longhelp
-
-def complete(options, args, parser):
- for option, value in cmdutil.option_value_pairs(options, parser):
- if value == "--complete":
- # no argument-options at the moment, so this is future-proofing
- raise cmdutil.GetCompletions()
- for pos,value in enumerate(args):
- if value == "--complete":
- if pos == 0: # first positional argument is a setting name
- props = bugdir.BugDir.settings_properties
- raise cmdutil.GetCompletions(props)
- raise cmdutil.GetCompletions() # no positional arguments for list
+
+def _value_string(bugdir, setting):
+ val = bugdir.settings.get(setting, EMPTY)
+ if val == EMPTY:
+ default = getattr(bugdir, bugdir._setting_name_to_attr_name(setting))
+ if default not in [None, EMPTY]:
+ val = 'None (%s)' % default
+ else:
+ val = None
+ return str(val)
+
+def complete_bugdir_settings(command, argument, fragment=None):
+ """
+ List possible command completions for fragment.
+
+ Neither the command nor argument arguments are used.
+ """
+ return libbe.bugdir.BugDir.settings_properties
diff --git a/libbe/command/target.py b/libbe/command/target.py
index 39e12b2..034c532 100644
--- a/libbe/command/target.py
+++ b/libbe/command/target.py
@@ -25,7 +25,6 @@ import libbe.command.util
import libbe.command.depend
-
class Target (libbe.command.Command):
"""Assorted bug target manipulations and queries
@@ -70,12 +69,10 @@ class Target (libbe.command.Command):
])
self.args.extend([
libbe.command.Argument(
- name='id', metavar='BUG-ID', default=None,
- optional=True,
+ name='id', metavar='BUG-ID', optional=True,
completion_callback=libbe.command.util.complete_bug_id),
libbe.command.Argument(
- name='target', metavar='TARGET', default=None,
- optional=True,
+ name='target', metavar='TARGET', optional=True,
completion_callback=complete_target),
])