aboutsummaryrefslogtreecommitdiffstats
path: root/libbe
diff options
context:
space:
mode:
Diffstat (limited to 'libbe')
-rw-r--r--libbe/bug.py35
-rw-r--r--libbe/bugdir.py24
-rw-r--r--libbe/diff.py17
3 files changed, 57 insertions, 19 deletions
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)