aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.be/settings21
-rw-r--r--becommands/severity.py4
-rw-r--r--becommands/status.py25
-rw-r--r--libbe/bug.py35
-rw-r--r--libbe/bugdir.py24
-rw-r--r--libbe/diff.py17
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)