diff options
Diffstat (limited to 'libbe/command/set.py')
-rw-r--r-- | libbe/command/set.py | 160 |
1 files changed, 85 insertions, 75 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 |