diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2010-07-05 16:30:28 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2010-07-05 16:30:28 +0100 |
commit | 42d4ec18b07c4186731cc65f16b89b83b1aec43c (patch) | |
tree | 119d9b7d8dad5dccc0e24251f623be7d6a4f72d8 /amqp_codegen.py | |
parent | 515b4168a0480e3cae0ee80fa36999c8bcdb2f88 (diff) | |
download | rabbitmq-codegen-42d4ec18b07c4186731cc65f16b89b83b1aec43c.tar.gz |
Always break when there's
- a method argument defined with two different types or default values
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r-- | amqp_codegen.py | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py index b24a7e1..683270c 100644 --- a/amqp_codegen.py +++ b/amqp_codegen.py @@ -88,7 +88,7 @@ def domains_merger(key, old, new, allow_overwrite): return [[k, v] for (k, v) in o.iteritems()] -def merge_dict_lists_by(dict_key, old, new, allow_overwrite, check_fields): +def merge_dict_lists_by(dict_key, old, new, allow_overwrite, check_fields, **kwargs): old_index = dict((v[dict_key], v) for v in old) result = list(old) # shallow copy for v in new: @@ -101,6 +101,8 @@ def merge_dict_lists_by(dict_key, old, new, allow_overwrite, check_fields): new_val = v.get(f, None) if old_val != new_val: raise AmqpSpecFileMergeConflict(key, f, old_val, new_val) + if kwargs.has_key("sub_merge"): + kwargs["sub_merge"](old_index[key], v) else: result.append(v) return result @@ -109,11 +111,15 @@ def constants_merger(key, old, new, allow_overwrite): return merge_dict_lists_by("name", old, new, allow_overwrite, ["value"]) def methods_merger(classname, old, new, allow_overwrite): - return merge_dict_lists_by("name", old, new, allow_overwrite, ["synchronous"]) + return merge_dict_lists_by("name", old, new, allow_overwrite, ["synchronous"], + sub_merge=lambda old, new: arguments_merger("name", old["arguments"], new["arguments"], allow_overwrite)) def properties_merger(classname, old, new, allow_overwrite): return merge_dict_lists_by("name", old, new, allow_overwrite, ["type"]) +def arguments_merger(classname, old, new, allow_overwrite): + return merge_dict_lists_by("name", old, new, allow_overwrite, ["type", "default-value"]) + def class_merger(old, new, allow_overwrite): old["methods"] = methods_merger(old["name"], old["methods"], |