# Copyright (C) 2005 Aaron Bentley and Panometrics, Inc. # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import bugdir import plugin import locale import os import optparse from textwrap import TextWrapper from StringIO import StringIO import utility import doctest class UserError(Exception): def __init__(self, msg): Exception.__init__(self, msg) class UserErrorWrap(UserError): def __init__(self, exception): UserError.__init__(self, str(exception)) self.exception = exception def get_bug(spec, bug_dir=None): """ >>> bd = bugdir.simple_bug_dir() >>> bug_a = get_bug('a', bd) >>> print type(bug_a) >>> print bug_a a:om: Bug A >>> print bd.get_bug('a') a:om: Bug A >>> bug_a == bd.get_bug('a') True """ matches = [] try: if bug_dir is None: bug_dir = bugdir.tree_root('.') except bugdir.NoBugDir, e: raise UserErrorWrap(e) bugs = list(bug_dir.list()) for bug in bugs: if bug.uuid.startswith(spec): matches.append(bug) if len(matches) > 1: raise UserError("More than one bug matches %s. Please be more" " specific." % spec) if len(matches) == 1: return matches[0] matches = [] if len(matches) == 0: raise UserError("No bug matches %s" % spec) return matches[0] def iter_commands(): for name, module in plugin.iter_plugins("becommands"): yield name.replace("_", "-"), module def get_command(command_name): """Retrieves the module for a user command >>> get_command("asdf") Traceback (most recent call last): UserError: Unknown command asdf >>> repr(get_command("list")).startswith("> s, "--------- Comment ---------" print >> s, "Name: %s" % name_map[comment.uuid] print >> s, "From: %s" % comment.From print >> s, "Date: %s\n" % utility.time_to_str(comment.time) print >> s, comment.body.rstrip('\n') s.seek(0) for line in s: print tw.fill(line).rstrip('\n') print_threaded_comments(children, name_map, indent=indent+" ") def bug_tree(dir=None): """Retrieve the bug tree specified by the user. If no directory is specified, the current working directory is used. :param dir: The directory to search for the bug tree in. >>> bug_tree() is not None True >>> bug_tree("/") Traceback (most recent call last): UserErrorWrap: The directory "/" has no bug directory. """ if dir is None: dir = os.getcwd() try: return bugdir.tree_root(dir) except bugdir.NoBugDir, e: raise UserErrorWrap(e) def _test(): import doctest import sys doctest.testmod() if __name__ == "__main__": _test() suite = doctest.DocTestSuite()