aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.be/settings20
-rw-r--r--becommands/merge.py2
-rw-r--r--becommands/new.py8
-rw-r--r--becommands/show.py1
-rw-r--r--libbe/bug.py2
-rw-r--r--libbe/bugdir.py4
-rw-r--r--libbe/mapfile.py59
7 files changed, 58 insertions, 38 deletions
diff --git a/.be/settings b/.be/settings
index 47dda13..331e353 100644
--- a/.be/settings
+++ b/.be/settings
@@ -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.
diff --git a/becommands/merge.py b/becommands/merge.py
index 9f324f7..927bb63 100644
--- a/becommands/merge.py
+++ b/becommands/merge.py
@@ -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
diff --git a/becommands/new.py b/becommands/new.py
index dec40cb..15ee4a9 100644
--- a/becommands/new.py
+++ b/becommands/new.py
@@ -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
"""
diff --git a/becommands/show.py b/becommands/show.py
index 37168c1..87b890f 100644
--- a/becommands/show.py
+++ b/becommands/show.py
@@ -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
diff --git a/libbe/bug.py b/libbe/bug.py
index 14f3db0..b98067f 100644
--- a/libbe/bug.py
+++ b/libbe/bug.py
@@ -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."),
diff --git a/libbe/bugdir.py b/libbe/bugdir.py
index f93576f..d554ebe 100644
--- a/libbe/bugdir.py
+++ b/libbe/bugdir.py
@@ -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,
diff --git a/libbe/mapfile.py b/libbe/mapfile.py
index 559d713..a84cca3 100644
--- a/libbe/mapfile.py
+++ b/libbe/mapfile.py
@@ -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"""