summaryrefslogtreecommitdiff
path: root/amqp_codegen.py
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2010-06-24 15:26:11 +0100
committerSimon MacMullen <simon@rabbitmq.com>2010-06-24 15:26:11 +0100
commite6472b90a4d9397828abbdd21d5e4873686119a8 (patch)
tree1efbbc4c6fee332d718f3de3946c81a10fec52e8 /amqp_codegen.py
parentb8faf322a26c1a5ced61323efb8a9e311f060cac (diff)
downloadrabbitmq-codegen-e6472b90a4d9397828abbdd21d5e4873686119a8.tar.gz
Merge everything, don't die on conflicts.
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r--amqp_codegen.py32
1 files changed, 13 insertions, 19 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py
index 9da1aca..307519a 100644
--- a/amqp_codegen.py
+++ b/amqp_codegen.py
@@ -59,12 +59,12 @@ def insert_base_types(d):
'longlong', 'bit', 'table', 'timestamp']:
d[t] = t
-class AmqpSpecFileMergeConflict(Exception): pass
-
+# In all mergers, old wins
def default_spec_value_merger(key, old, new):
- if old is None or old == new:
+ if old is None:
return new
- raise AmqpSpecFileMergeConflict(key, old, new)
+ else:
+ return old
def extension_info_merger(key, old, new):
return old + [new]
@@ -72,33 +72,26 @@ def extension_info_merger(key, old, new):
def domains_merger(key, old, new):
o = dict((k, v) for [k, v] in old)
for [k, v] in new:
- if o.has_key(k):
- raise AmqpSpecFileMergeConflict(key, old, new)
- o[k] = v
+ if not o.has_key(k):
+ o[k] = v
return [[k, v] for (k, v) in o.iteritems()]
-def merge_dict_lists_by(dict_key, old, new, description):
+def merge_dict_lists_by(dict_key, old, new):
old_index = set(v[dict_key] for v in old)
result = list(old) # shallow copy
for v in new:
- if v[dict_key] in old_index:
- raise AmqpSpecFileMergeConflict(description, old, new)
- result.append(v)
+ if v[dict_key] not in old_index:
+ result.append(v)
return result
def constants_merger(key, old, new):
- return merge_dict_lists_by("name", old, new, key)
+ return merge_dict_lists_by("name", old, new)
def methods_merger(classname, old, new):
- return merge_dict_lists_by("name", old, new, ("class-methods", classname))
+ return merge_dict_lists_by("name", old, new)
def properties_merger(classname, old, new):
- oldnames = set(v["name"] for v in old)
- newnames = set(v["name"] for v in new)
- clashes = oldnames.intersection(newnames)
- if clashes:
- raise AmqpSpecFileMergeConflict(("class-properties", classname), old, new)
- return old + new
+ return merge_dict_lists_by("name", old, new)
def class_merger(old, new):
old["methods"] = methods_merger(old["name"], old["methods"], new["methods"])
@@ -140,6 +133,7 @@ class AmqpSpec:
self.major = self.spec['major-version']
self.minor = self.spec['minor-version']
+ self.revision = self.spec.has_key('revision') and self.spec['revision'] or '0'
self.port = self.spec['port']
self.domains = {}