From 6a293fd1351280741e7a867761e85c9a7ebc25cf Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 10 Sep 2019 11:49:27 +0930 Subject: [PATCH] tools/generate-wire.py: accept multiple comma-separated options. Somehow this change got lost, but it's needed for option_static_remotekey, to quote gen_peer_wire_csv: msgtype,channel_reestablish,136 msgdata,channel_reestablish,channel_id,channel_id, msgdata,channel_reestablish,next_commitment_number,u64, msgdata,channel_reestablish,next_revocation_number,u64, msgdata,channel_reestablish,your_last_per_commitment_secret,byte,32,option_data_loss_protect,option_static_remotekey msgdata,channel_reestablish,my_current_per_commitment_point,point,,option_data_loss_protect Signed-off-by: Rusty Russell --- tools/generate-wire.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/tools/generate-wire.py b/tools/generate-wire.py index 8382940f0..b1856b95a 100755 --- a/tools/generate-wire.py +++ b/tools/generate-wire.py @@ -577,6 +577,11 @@ def main(options, args=None, output=sys.stdout, lines=None): raise ValueError('Unknown message type {}. {}:{}'.format(tokens[1], ln, line)) type_obj, collapse, optional = master.add_type(tokens[3], tokens[2], tokens[1]) + if collapse: + count = 1 + else: + count = tokens[4] + # if this is an 'extension' field*, we want to add a new 'message' type # in the future, extensions will be handled as TLV's # @@ -585,18 +590,24 @@ def main(options, args=None, output=sys.stdout, lines=None): # differently. for the sake of clarity here, for bolt-wire messages, # we'll refer to 'optional' message fields as 'extensions') # - if bool(tokens[5:]): # is an extension field + if tokens[5:] == []: + msg.add_data_field(tokens[2], type_obj, count, comments=list(comment_set), + optional=optional) + else: # is one or more extension fields if optional: raise ValueError("Extension fields cannot be optional. {}:{}" .format(ln, line)) - extension_name = "{}_{}".format(tokens[1], tokens[5]) orig_msg = msg - msg = master.find_message(extension_name) - if not msg: - msg = copy.deepcopy(orig_msg) - msg.enumname = msg.name - msg.name = extension_name - master.add_extension_msg(msg.name, msg) + for extension in tokens[5:]: + extension_name = "{}_{}".format(tokens[1], extension) + msg = master.find_message(extension_name) + if not msg: + msg = copy.deepcopy(orig_msg) + msg.enumname = msg.name + msg.name = extension_name + master.add_extension_msg(msg.name, msg) + msg.add_data_field(tokens[2], type_obj, count, comments=list(comment_set), optional=optional) + # If this is a print_wire page, add the extension fields to the # original message, so we can print them if present. if options.print_wire: @@ -605,14 +616,6 @@ def main(options, args=None, output=sys.stdout, lines=None): comments=list(comment_set), optional=optional) - if collapse: - count = 1 - else: - count = tokens[4] - - msg.add_data_field(tokens[2], type_obj, count, comments=list(comment_set), - optional=optional) - comment_set = [] elif token_type.startswith('#include'): master.add_include(token_type)