Added per-tree configurable severities.
authorW. Trevor King <wking@drexel.edu>
Thu, 4 Dec 2008 14:14:01 +0000 (09:14 -0500)
committerW. Trevor King <wking@drexel.edu>
Thu, 4 Dec 2008 14:14:01 +0000 (09:14 -0500)
They currently have no effect, but you can see them with
  $ be set
There's a lot of information in this one 'settings' variable.  I think
set will have to be specialized to handle arrays smoothly...

.be/settings
becommands/merge.py
becommands/new.py
becommands/show.py
libbe/bug.py
libbe/bugdir.py
libbe/mapfile.py

index 47dda1383ab404afc76513a7095c8f55e58197da..331e353d9e4c3dcb3643e949ef9f0eeb0254745b 100644 (file)
@@ -1,7 +1,13 @@
-
-
-
-rcs_name=bzr
-
-
-
+rcs_name: bzr
+
+severities:
+- name: wishlist
+  description: A feature that could improve usefulness, but not a bug.
+- name: minor
+  description: The standard bug level.
+- name: serious
+  description: A bug that requires workarounds.
+- name: critical
+  description: A bug that prevents some features from working at all.
+- name: fatal
+  description: A bug that makes the package unusable.
index 9f324f716620683a383059b2028d9417d40d6b9d..927bb63e271e49d8ce8d844973451c8ad26f4cef 100644 (file)
@@ -52,6 +52,7 @@ def execute(args, test=False):
           Status : open
         Assigned : 
           Target : 
+        Reporter : 
          Creator : John Doe <jdoe@example.com>
          Created : Wed, 31 Dec 1969 19:00 (Thu, 01 Jan 1970 00:00:00 +0000)
     Bug A
@@ -96,6 +97,7 @@ def execute(args, test=False):
           Status : closed
         Assigned : 
           Target : 
+        Reporter : 
          Creator : Jane Doe <jdoe@example.com>
          Created : Wed, 31 Dec 1969 19:00 (Thu, 01 Jan 1970 00:00:00 +0000)
     Bug B
index dec40cb25030c6b928a3fd4e81c2473967abf16d..15ee4a90f8052f3939f884b8163f10a7f0b62fd1 100644 (file)
@@ -29,12 +29,12 @@ def execute(args, test=False):
     Created bug with ID X
     >>> bd.load()
     >>> bug = bd.bug_from_uuid("X")
-    >>> bug.summary
-    u'this is a test'
+    >>> print bug.summary
+    this is a test
     >>> bug.time <= int(time.time())
     True
-    >>> bug.severity
-    u'minor'
+    >>> print bug.severity
+    minor
     >>> bug.target == settings_object.EMPTY
     True
     """
index 37168c170b544b0ff9ac677459bc936b5d68169e..87b890f4fa94bcb57b8b62b9e2d02eb3ca5461b9 100644 (file)
@@ -30,6 +30,7 @@ def execute(args, test=False):
           Status : open
         Assigned : 
           Target : 
+        Reporter : 
          Creator : John Doe <jdoe@example.com>
          Created : Wed, 31 Dec 1969 19:00 (Thu, 01 Jan 1970 00:00:00 +0000)
     Bug A
index 14f3db0785d25a025c55283dbe1b2bdb7dcd469f..b98067f7f60c895985596f20bc2f04bf5cf72dee 100644 (file)
@@ -36,7 +36,7 @@ import utility
 
 # in order of increasing severity
 severity_level_def = (
-  ("wishlist","A feature that could improve usefullness, but not a bug."),
+  ("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."),
index f93576f7ef6dd3cb7d2b9e5acf03dce564c49e79..d554ebe274234b3286aff2705698ba4ca3321e5d 100644 (file)
@@ -218,6 +218,10 @@ settings easy.  Don't set this attribute.  Set .rcs instead, and
     @doc_property(doc="A dict of (bug-uuid, bug-instance) pairs.")
     def _bug_map(): return {}
 
+    @_versioned_property(name="severities",
+                         doc="The allowed bug severities and their descriptions.")
+    def severities(): return {}
+
 
     def __init__(self, root=None, sink_to_existing_root=True,
                  assert_new_BugDir=False, allow_rcs_init=False,
index 559d7134445dd4a7f0b0f4f8c11f4f4201690746..a84cca3ae332555f092405b93fd8dc52beb92b86 100644 (file)
@@ -14,6 +14,7 @@
 #    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 yaml
 import os.path
 import errno
 import utility
@@ -29,17 +30,16 @@ class IllegalValue(Exception):
         Exception.__init__(self, 'Illegal value "%s"' % value)
         self.value = value 
 
-def generate(map, context=3):
-    """Generate a format-2 mapfile content string.  This is a simpler
-    format, but should merge better, because there's no chance of
-    confusion for appends, and lines are unique for both key and
-    value.
-
+def generate(map):
+    """Generate a YAML mapfile content string.
     >>> generate({"q":"p"})
-    '\\n\\n\\nq=p\\n\\n\\n\\n'
+    'q: p\\n\\n'
     >>> generate({"q=":"p"})
     Traceback (most recent call last):
     IllegalKey: Illegal key "q="
+    >>> generate({"q:":"p"})
+    Traceback (most recent call last):
+    IllegalKey: Illegal key "q:"
     >>> generate({"q\\n":"p"})
     Traceback (most recent call last):
     IllegalKey: Illegal key "q\\n"
@@ -53,7 +53,6 @@ def generate(map, context=3):
     Traceback (most recent call last):
     IllegalValue: Illegal value "p\\n"
     """
-    assert(context > 0)
     keys = map.keys()
     keys.sort()
     for key in keys:
@@ -61,6 +60,7 @@ def generate(map, context=3):
             assert not key.startswith('>')
             assert('\n' not in key)
             assert('=' not in key)
+            assert(':' not in key)
             assert(len(key) > 0)
         except AssertionError:
             raise IllegalKey(key.encode('string_escape'))
@@ -69,20 +69,17 @@ def generate(map, context=3):
 
     lines = []
     for key in keys:
-        for i in range(context):
-            lines.append("")
-        lines.append("%s=%s" % (key, map[key]))
-        for i in range(context):
-            lines.append("")
-    return '\n'.join(lines) + '\n'
+        lines.append(yaml.dump({key: map[key]}, default_flow_style=False))
+        lines.append("")
+    return '\n'.join(lines)
 
 def parse(contents):
     """
-    Parse a format-2 mapfile string.
-    >>> parse('\\n\\n\\nq=p\\n\\n\\n\\n')['q']
+    Parse a YAML mapfile string.
+    >>> parse('q: p\\n\\n')['q']
+    'p'
+    >>> parse('q: \\'p\\'\\n\\n')['q']
     'p'
-    >>> parse('\\n\\nq=\\'p\\'\\n\\n\\n\\n')['q']
-    "\'p\'"
     >>> contents = generate({"a":"b", "c":"d", "e":"f"})
     >>> dict = parse(contents)
     >>> dict["a"]
@@ -92,15 +89,25 @@ def parse(contents):
     >>> dict["e"]
     'f'
     """
-    result = {}
+    old_format = False
     for line in contents.splitlines():
-        line = line.rstrip('\n')
-        if len(line) == 0:
-            continue
-        name,value = [field for field in line.split('=', 1)]
-        assert not result.has_key(name)
-        result[name] = value
-    return result
+        if len(line.split("=")) == 2:
+            old_format = True
+            break
+    if old_format: # translate to YAML
+        newlines = []
+        for line in contents.splitlines():
+            line = line.rstrip('\n')
+            if len(line) == 0:
+                continue
+            fields = line.split("=")
+            if len(fields) == 2:
+                key,value = fields
+                newlines.append('%s: "%s"' % (key, value.replace('"','\\"')))
+            else:
+                newlines.append(line)
+        contents = '\n'.join(newlines)
+    return yaml.load(contents)
 
 def map_save(rcs, path, map, allow_no_rcs=False):
     """Save the map as a mapfile to the specified path"""