diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2010-07-05 16:07:07 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2010-07-05 16:07:07 +0100 |
commit | 3ae7e6206f31167f8cd4cce35480cbe22e2c1e47 (patch) | |
tree | 6446c9063c2b56fbd3cd731ef5a8364b33c95fc6 /amqp_codegen.py | |
parent | 0dfdf80fd9eabfd71bf8c1ae27069b09fa814c78 (diff) | |
download | rabbitmq-codegen-3ae7e6206f31167f8cd4cce35480cbe22e2c1e47.tar.gz |
Always break when there's
- a domain defined with two different types
- a constant defined with two different values
- differences in properties signatures
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r-- | amqp_codegen.py | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py index 2ee9da5..6192f8c 100644 --- a/amqp_codegen.py +++ b/amqp_codegen.py @@ -76,34 +76,41 @@ def extension_info_merger(key, old, new, allow_overwrite): def domains_merger(key, old, new, allow_overwrite): o = dict((k, v) for [k, v] in old) + n = dict((k, v) for [k, v] in new) for [k, v] in new: if o.has_key(k): if not allow_overwrite: - raise AmqpSpecFileMergeConflict(key, old, new) + raise AmqpSpecFileMergeConflict(k, old, new) + if o[k] != n[k]: + raise AmqpSpecFileMergeConflict(k, o[k], n[k]) else: o[k] = v return [[k, v] for (k, v) in o.iteritems()] -def merge_dict_lists_by(dict_key, old, new, allow_overwrite): - old_index = set(v[dict_key] for v in old) +def merge_dict_lists_by(dict_key, old, new, allow_overwrite, check_fields): + old_index = dict((v[dict_key], v) for v in old) result = list(old) # shallow copy for v in new: - if v[dict_key] in old_index: + key = v[dict_key] + if key in old_index.iterkeys(): if not allow_overwrite: raise AmqpSpecFileMergeConflict(description, old, new) + for f in check_fields: + if old_index[key][f] != v[f]: + raise AmqpSpecFileMergeConflict(v[dict_key], old_index[key][f], v[f]) else: result.append(v) return result def constants_merger(key, old, new, allow_overwrite): - return merge_dict_lists_by("name", 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) + return merge_dict_lists_by("name", old, new, allow_overwrite, []) def properties_merger(classname, old, new, allow_overwrite): - return merge_dict_lists_by("name", old, new, allow_overwrite) + return merge_dict_lists_by("name", old, new, allow_overwrite, ["type"]) def class_merger(old, new, allow_overwrite): old["methods"] = methods_merger(old["name"], @@ -284,7 +291,6 @@ def do_main_dict(funcDict): parser = OptionParser() parser.add_option("--allow-overwrite", action="store_true", dest="allow_overwrite", default=False) (options, args) = parser.parse_args() - print args, len(args) if len(args) < 3: usage() |