From b5b8d7214b24338ba5c97287810a4a67e61c3c06 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 4 Dec 2008 11:32:57 -0500 Subject: [PATCH] Per-tree status levels working. --- .be/settings | 21 +++++++++------------ becommands/severity.py | 4 ++-- becommands/status.py | 25 ++++++++++++++----------- libbe/bug.py | 35 ++++++++++++++++++++++++++--------- libbe/bugdir.py | 24 +++++++++++++++++++++++- libbe/diff.py | 17 ++++++++--------- 6 files changed, 82 insertions(+), 44 deletions(-) diff --git a/.be/settings b/.be/settings index 6a8d2f3..44c2cd5 100644 --- a/.be/settings +++ b/.be/settings @@ -1,15 +1,12 @@ rcs_name: bzr -severities: -- - wishlist - - A feature that could improve usefulness, but not a bug. -- - minor - - The standard bug level. -- - serious - - A bug that requires workarounds. -- - critical - - A bug that prevents some features from working at all. -- - fatal - - A bug that makes the package unusable. - +inactive_status: +- - closed + - The bug is no longer relevant. +- - fixed + - The bug should no longer occur. +- - wontfix + - It's not a bug, it's a feature. +- - disabled + - Unknown meaning. For backwards compatibility with old BE bugs. diff --git a/becommands/severity.py b/becommands/severity.py index 92f31e8..c44d8ed 100644 --- a/becommands/severity.py +++ b/becommands/severity.py @@ -64,10 +64,10 @@ is specified, it will be assigned to the bug. Severity levels are: """] - try: + try: # See if there are any per-tree severity configurations bd = bugdir.BugDir(from_disk=True, manipulate_encodings=False) except bugdir.NoBugDir, e: - pass + pass # No tree, just show the defaults longest_severity_len = max([len(s) for s in bug.severity_values]) for severity in bug.severity_values : description = bug.severity_description[severity] diff --git a/becommands/status.py b/becommands/status.py index 5ff824e..b781a2a 100644 --- a/becommands/status.py +++ b/becommands/status.py @@ -15,8 +15,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """Show or change a bug's status""" -from libbe import cmdutil, bugdir -from libbe.bug import status_values, status_description +from libbe import cmdutil, bugdir, bug __desc__ = __doc__ def execute(args, test=False): @@ -56,7 +55,9 @@ def get_parser(): parser = cmdutil.CmdOptionParser("be status BUG-ID [STATUS]") return parser -longhelp=[""" + +def help(): + longhelp=[""" Show or change a bug's severity level. If no severity is specified, the current value is printed. If a severity level @@ -64,12 +65,14 @@ is specified, it will be assigned to the bug. Severity levels are: """] -longest_status_len = max([len(s) for s in status_values]) -for status in status_values : - description = status_description[status] - s = "%*s : %s\n" % (longest_status_len, status, description) - longhelp.append(s) -longhelp = ''.join(longhelp) - -def help(): + 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 : + description = bug.status_description[status] + s = "%*s : %s\n" % (longest_status_len, status, description) + longhelp.append(s) + longhelp = ''.join(longhelp) return get_parser().help_str() + longhelp diff --git a/libbe/bug.py b/libbe/bug.py index 2cd05e3..f871c7a 100644 --- a/libbe/bug.py +++ b/libbe/bug.py @@ -52,8 +52,7 @@ active_status_def = ( inactive_status_def = ( ("closed", "The bug is no longer relevant."), ("fixed", "The bug should no longer occur."), - ("wontfix","It's not a bug, it's a feature."), - ("disabled", "?")) + ("wontfix","It's not a bug, it's a feature.")) ### Convert the description tuples to more useful formats @@ -65,6 +64,8 @@ def load_severities(severity_def): global severity_values global severity_description global severity_index + if severity_def == settings_object.EMPTY: + return severity_values = tuple([val for val,description in severity_def]) severity_description = dict(severity_def) severity_index = {} @@ -72,13 +73,29 @@ def load_severities(severity_def): severity_index[severity] = i load_severities(severity_def) -active_status_values = tuple(val for val,description in active_status_def) -inactive_status_values = tuple(val for val,description in inactive_status_def) -status_values = active_status_values + inactive_status_values -status_description = dict(active_status_def+inactive_status_def) +active_status_values = [] +inactive_status_values = [] +status_values = [] +status_description = {} status_index = {} -for i in range(len(status_values)): - status_index[status_values[i]] = i +def load_status(active_status_def, inactive_status_def): + global active_status_values + global inactive_status_values + global status_values + global status_description + global status_index + if active_status_def == settings_object.EMPTY: + active_status_def = globals()["active_status_def"] + if inactive_status_def == settings_object.EMPTY: + inactive_status_def = globals()["inactive_status_def"] + active_status_values = tuple([val for val,description in active_status_def]) + inactive_status_values = tuple([val for val,description in inactive_status_def]) + status_values = active_status_values + inactive_status_values + status_description = dict(tuple(active_status_def) + tuple(inactive_status_def)) + status_index = {} + for i,status in enumerate(status_values): + status_index[status] = i +load_status(active_status_def, inactive_status_def) class Bug(settings_object.SavedSettingsObject): @@ -128,7 +145,7 @@ class Bug(settings_object.SavedSettingsObject): @_versioned_property(name="status", doc="The bug's current status", default="open", - allowed=status_values, + check_fn=lambda s: s in status_values, require_save=True) def status(): return {} diff --git a/libbe/bugdir.py b/libbe/bugdir.py index cdb4cf5..443dfc5 100644 --- a/libbe/bugdir.py +++ b/libbe/bugdir.py @@ -229,6 +229,24 @@ settings easy. Don't set this attribute. Set .rcs instead, and change_hook=_set_severities) def severities(): return {} + def _setup_status(self, active_status, inactive_status): + bug.load_status(active_status, inactive_status) + def _set_active_status(self, old_active_status, new_active_status): + self._setup_status(new_active_status, self.inactive_status) + self._prop_save_settings(old_active_status, new_active_status) + @_versioned_property(name="active_status", + doc="The allowed active bug states and their descriptions.", + change_hook=_set_active_status) + def active_status(): return {} + + def _set_inactive_status(self, old_inactive_status, new_inactive_status): + self._setup_status(self.active_status, new_inactive_status) + self._prop_save_settings(old_inactive_status, new_inactive_status) + @_versioned_property(name="inactive_status", + doc="The allowed inactive bug states and their descriptions.", + change_hook=_set_inactive_status) + def inactive_status(): return {} + def __init__(self, root=None, sink_to_existing_root=True, assert_new_BugDir=False, allow_rcs_init=False, @@ -330,6 +348,7 @@ settings easy. Don't set this attribute. Set .rcs instead, and self.rcs = rcs.rcs_by_name(self.rcs_name) self._setup_encoding(self.encoding) self._setup_severities(self.severities) + self._setup_status(self.active_status, self.inactive_status) def load_all_bugs(self): "Warning: this could take a while." @@ -381,7 +400,10 @@ settings easy. Don't set this attribute. Set .rcs instead, and if "rcs_name" in duplicate_settings: duplicate_settings["rcs_name"] = "None" duplicate_settings["user_id"] = self.user_id - self._save_settings(duplicate_settings_path, duplicate_settings) + if "disabled" in bug.status_values: + # Hack to support old versions of BE bugs + duplicate_settings["inactive_status"] = self.inactive_status + self._save_settings(duplicate_settings_path, duplicate_settings) return BugDir(duplicate_path, from_disk=True, manipulate_encodings=self._manipulate_encodings) diff --git a/libbe/diff.py b/libbe/diff.py index 5fc0166..17d6c50 100644 --- a/libbe/diff.py +++ b/libbe/diff.py @@ -15,9 +15,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """Compare two bug trees""" -from libbe import cmdutil, bugdir +from libbe import cmdutil, bugdir, bug from libbe.utility import time_to_str -from libbe.bug import cmp_severity import doctest def diff(old_bugdir, new_bugdir): @@ -41,17 +40,17 @@ def diff(old_bugdir, new_bugdir): def diff_report(diff_data, bug_dir): (removed, modified, added) = diff_data def modified_cmp(left, right): - return cmp_severity(left[1], right[1]) + return bug.cmp_severity(left[1], right[1]) - added.sort(cmp_severity) - removed.sort(cmp_severity) + added.sort(bug.cmp_severity) + removed.sort(bug.cmp_severity) modified.sort(modified_cmp) lines = [] if len(added) > 0: lines.append("New bug reports:") - for bug in added: - lines.extend(bug.string(shortlist=True).splitlines()) + for bg in added: + lines.extend(bg.string(shortlist=True).splitlines()) lines.append("") if len(modified) > 0: @@ -69,8 +68,8 @@ def diff_report(diff_data, bug_dir): if len(removed) > 0: lines.append("Removed bug reports:") - for bug in removed: - lines.extend(bug.string(shortlist=True).splitlines()) + for bg in removed: + lines.extend(bg.string(shortlist=True).splitlines()) lines.append("") return '\n'.join(lines) -- 2.26.2