diff options
author | Tony Garnock-Jones <tonyg@lshift.net> | 2010-05-23 22:55:52 +1200 |
---|---|---|
committer | Tony Garnock-Jones <tonyg@lshift.net> | 2010-05-23 22:55:52 +1200 |
commit | becc3b0b7580c0c08105ec208ea590dc27972bce (patch) | |
tree | 8e231c529765a20ab6f72c1df67c8a008244a9cb /amqp_codegen.py | |
parent | 50af2cc41ccb589331113b34b11fd3bc37bca06d (diff) | |
download | rabbitmq-codegen-becc3b0b7580c0c08105ec208ea590dc27972bce.tar.gz |
Check for duplicate properties.
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r-- | amqp_codegen.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py index 1ade01f..2fcf9b6 100644 --- a/amqp_codegen.py +++ b/amqp_codegen.py @@ -64,7 +64,7 @@ class AmqpSpecFileMergeConflict(Exception): pass def default_spec_value_merger(key, old, new): if old is None or old == new: return new - raise AmqpSpecFileMergeConflict((key, old, new)) + raise AmqpSpecFileMergeConflict(key, old, new) def extension_info_merger(key, old, new): return old + [new] @@ -89,13 +89,23 @@ def methods_merger(classname, old, new): o = dict((v["name"], v) for v in old) for v in new: if o.has_key(v["name"]): - raise AmqpSpecFileMergeConflict(("class", classname), old, new) + raise AmqpSpecFileMergeConflict(("class-methods", classname), old, new) o[v["name"]] = v return list(o.values()) +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 + def class_merger(old, new): old["methods"] = methods_merger(old["name"], old["methods"], new["methods"]) - old["properties"] = old.get("properties", []) + new.get("properties", []) + old["properties"] = properties_merger(old["name"], + old.get("properties", []), + new.get("properties", [])) return old def classes_merger(key, old, new): |