diff options
author | Tony Garnock-Jones <tonyg@lshift.net> | 2010-06-21 14:44:33 +1200 |
---|---|---|
committer | Tony Garnock-Jones <tonyg@lshift.net> | 2010-06-21 14:44:33 +1200 |
commit | 5d34d17f9cc2dccf2ad5477b0f1d1ca882697d72 (patch) | |
tree | d8cb6bab6e91d18cfe041aaeedb3abc5b7517233 /amqp_codegen.py | |
parent | e6d80604e3f55b5d126bd8551a0d9bc6e54740ef (diff) | |
download | rabbitmq-codegen-5d34d17f9cc2dccf2ad5477b0f1d1ca882697d72.tar.gz |
Preserve ordering of constants, methods and classes
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r-- | amqp_codegen.py | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py index f2df2ad..a1eeeb3 100644 --- a/amqp_codegen.py +++ b/amqp_codegen.py @@ -77,21 +77,20 @@ def domains_merger(key, old, new): o[k] = v return [[k, v] for (k, v) in o.iteritems()] -def constants_merger(key, old, new): - o = dict((v["name"], v) for v in old) +def merge_dict_lists_by(dict_key, old, new, description): + old_index = set(v[dict_key] for v in old) + result = list(old) # shallow copy for v in new: - if o.has_key(v["name"]): - raise AmqpSpecFileMergeConflict(key, old, new) - o[v["name"]] = v - return list(o.values()) + if v[dict_key] in old_index: + raise AmqpSpecFileMergeConflict(description, old, new) + result.append(v) + return result + +def constants_merger(key, old, new): + return merge_dict_lists_by("name", old, new, key) 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-methods", classname), old, new) - o[v["name"]] = v - return list(o.values()) + return merge_dict_lists_by("name", old, new, ("class-methods", classname)) def properties_merger(classname, old, new): oldnames = set(v["name"] for v in old) @@ -109,13 +108,15 @@ def class_merger(old, new): return old def classes_merger(key, old, new): - o = dict((v["name"], v) for v in old) + old_index = dict(zip((v["name"] for v in old), range(len(old)))) + result = list(old) # shallow copy for v in new: - if o.has_key(v["name"]): - o[v["name"]] = class_merger(o[v["name"]], v) + if v["name"] in old_index: + pos = old_index[v["name"]] + result[pos] = class_merger(result[pos], v) else: - o[v["name"]] = v - return list(o.values()) + result.append(v) + return result mergers = { "extension": (extension_info_merger, []), |