diff options
-rw-r--r-- | .be/settings | 20 | ||||
-rw-r--r-- | becommands/merge.py | 2 | ||||
-rw-r--r-- | becommands/new.py | 8 | ||||
-rw-r--r-- | becommands/show.py | 1 | ||||
-rw-r--r-- | libbe/bug.py | 2 | ||||
-rw-r--r-- | libbe/bugdir.py | 4 | ||||
-rw-r--r-- | libbe/mapfile.py | 59 |
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""" |