)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"00ecf2363f9303bce46981a4b83d814ea789e9da","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Closed Bug: #1395819"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"(Co-)Author: Chris Hoge \u003cchris@openstack.org\u003e"},{"line_number":18,"context_line":"Cherry-picked from commit c99822795c5c97864492ad04c77c6b79801c1e1f"},{"line_number":19,"context_line":"and slightly changed."},{"line_number":20,"context_line":"Change-Id: I3cbdaa7e5dfb75d4c9eb687e68d3a35e61550d1b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da85f559_ad224650","line":18,"updated":"2015-11-11 19:09:23.000000000","message":"rather than cherry-pick and start a new review, restore the original review and update that one.","commit_id":"ad739a4c0958601e2117ba90fe4d758d2950e5ba"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"ae6febcd1ded7f10a1e00ce800b1cf8bbf4ae043","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Closed Bug: #1395819"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"(Co-)Author: Chris Hoge \u003cchris@openstack.org\u003e"},{"line_number":18,"context_line":"Cherry-picked from commit c99822795c5c97864492ad04c77c6b79801c1e1f"},{"line_number":19,"context_line":"and slightly changed."},{"line_number":20,"context_line":"Change-Id: I3cbdaa7e5dfb75d4c9eb687e68d3a35e61550d1b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da85f559_863aa597","line":18,"in_reply_to":"da85f559_ad224650","updated":"2015-11-12 09:20:29.000000000","message":"@Brant: Oh, it didn\u0027t occur to me that this would also be a possibility. So we wouldn\u0027t lose the previous review history. I\u0027ll do that next time when I have such a case, thanks for the reminder/info.","commit_id":"ad739a4c0958601e2117ba90fe4d758d2950e5ba"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"27fbb2955c7b69f998297c109fc43c7abfa0626e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Closed Bug: #1395819"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"(Co-)Author: Chris Hoge \u003cchris@openstack.org\u003e"},{"line_number":18,"context_line":"Cherry-picked from commit c99822795c5c97864492ad04c77c6b79801c1e1f"},{"line_number":19,"context_line":"and slightly changed."},{"line_number":20,"context_line":"Change-Id: I3cbdaa7e5dfb75d4c9eb687e68d3a35e61550d1b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da85f559_df9e4b62","line":18,"in_reply_to":"da85f559_ad224650","updated":"2015-11-11 21:47:53.000000000","message":"As the original author, I have no problem with just sticking with this review (if that makes an difference).","commit_id":"ad739a4c0958601e2117ba90fe4d758d2950e5ba"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"ae6febcd1ded7f10a1e00ce800b1cf8bbf4ae043","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Closed Bug: #1395819"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"(Co-)Author: Chris Hoge \u003cchris@openstack.org\u003e"},{"line_number":18,"context_line":"Cherry-picked from commit c99822795c5c97864492ad04c77c6b79801c1e1f"},{"line_number":19,"context_line":"and slightly changed."},{"line_number":20,"context_line":"Change-Id: I3cbdaa7e5dfb75d4c9eb687e68d3a35e61550d1b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da85f559_a63249a5","line":18,"in_reply_to":"da85f559_df9e4b62","updated":"2015-11-12 09:20:29.000000000","message":"@Chris: I think I can change the author in the git commit itself if you like to have it.","commit_id":"ad739a4c0958601e2117ba90fe4d758d2950e5ba"}],"oslo_config/cfg.py":[{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"b623b5b608b39d3c401defe514818837a0ee3caa","unresolved":false,"context_lines":[{"line_number":2499,"context_line":""},{"line_number":2500,"context_line":"        return self._groups[group_name]"},{"line_number":2501,"context_line":""},{"line_number":2502,"context_line":"    def get_group(self, group_or_name):"},{"line_number":2503,"context_line":"        \"\"\"Looks up an OptGroup object."},{"line_number":2504,"context_line":""},{"line_number":2505,"context_line":"        Public accessor to get an existing OptGroup by name. The OptGroup"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_efcd1db8","line":2502,"updated":"2015-11-09 17:28:06.000000000","message":"This method presumes that the namespace in question has registered the groups with the global configuration object. While this may be true in some instances, it may not be true in all (Tempest for example, does not immediately register the group objects).\n\noslo.config provides an API for discovering options that does not depend on registration:\n\nhttp://docs.openstack.org/developer/oslo.config/generator.html#defining-option-discovery-entry-points\n\nWhile this approach works for some instances, we need to decide as a matter of policy how groups are discovered in a way that does not break existing code.","commit_id":"645315f864e102359ceed6aa289fae364aa334dc"}],"oslo_config/generator.py":[{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"cf49b6b29a40f99e9772fa5d7bb5d94fb12b8bb9","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def _list_opts(namespaces):"},{"line_number":227,"context_line":"    \"\"\"List the options available via the given namespaces."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    :param namespaces: a list of namespaces registered under \u0027oslo.config.opts\u0027"},{"line_number":230,"context_line":"    :returns: a list of (namespace, [(group, [opt_1, opt_2])]) tuples"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_401798ed","line":227,"updated":"2015-11-07 00:03:58.000000000","message":"The key is here. list_opts is pulling the options from the list_opts functions in the namespace, which is where the actual group option objects are being pulled out of the namespaces. The options themselves aren\u0027t being registered with the conf object. The group is a string name. The solution is to allow the group to be a string or a configuration group object, then test in generate and use the object properties (such as help) if they are available. Then in http://git.openstack.org/cgit/openstack/nova/tree/nova/compute/opts.py send back an OptGroup object rather than a string in the list_opts method.","commit_id":"645315f864e102359ceed6aa289fae364aa334dc"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"cf49b6b29a40f99e9772fa5d7bb5d94fb12b8bb9","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def _list_opts(namespaces):"},{"line_number":227,"context_line":"    \"\"\"List the options available via the given namespaces."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    :param namespaces: a list of namespaces registered under \u0027oslo.config.opts\u0027"},{"line_number":230,"context_line":"    :returns: a list of (namespace, [(group, [opt_1, opt_2])]) tuples"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_e0d24c34","line":227,"updated":"2015-11-07 00:03:58.000000000","message":"The key is here. list_opts is pulling the options from the list_opts functions in the namespace, which is where the actual group option objects are being pulled out of the namespaces. The options themselves aren\u0027t being registered with the conf object. The group is a string name. The solution is to allow the group to be a string or a configuration group object, then test in generate and use the object properties (such as help) if they are available. Then in http://git.openstack.org/cgit/openstack/nova/tree/nova/compute/opts.py send back an OptGroup object rather than a string in the list_opts method.","commit_id":"645315f864e102359ceed6aa289fae364aa334dc"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"cf49b6b29a40f99e9772fa5d7bb5d94fb12b8bb9","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        names\u003dnamespaces,"},{"line_number":235,"context_line":"        on_load_failure_callback\u003don_load_failure_callback,"},{"line_number":236,"context_line":"        invoke_on_load\u003dTrue)"},{"line_number":237,"context_line":"    return [(ep.name, ep.obj) for ep in mgr]"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def on_load_failure_callback(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_a0dc4447","line":237,"updated":"2015-11-07 00:03:58.000000000","message":"The key is here. list_opts is pulling the options from the list_opts functions in the namespace, which is where the actual group option objects are being pulled out of the namespaces. The options themselves aren\u0027t being registered with the conf object. The group is a string name. The solution is to allow the group to be a string or a configuration group object, then test the type in the generate function and use the object properties (such as help) if they are available. Then in http://git.openstack.org/cgit/openstack/nova/tree/nova/compute/opts.py send back an OptGroup object rather than a string in the list_opts method.","commit_id":"645315f864e102359ceed6aa289fae364aa334dc"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"bf5fb6791ae58d0a8e8f91f70dccfbe6e6af59c2","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        names\u003dnamespaces,"},{"line_number":235,"context_line":"        on_load_failure_callback\u003don_load_failure_callback,"},{"line_number":236,"context_line":"        invoke_on_load\u003dTrue)"},{"line_number":237,"context_line":"    return [(ep.name, ep.obj) for ep in mgr]"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def on_load_failure_callback(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_8c6276d7","line":237,"in_reply_to":"da85f559_a0dc4447","updated":"2015-11-09 10:30:30.000000000","message":"@Chris Hoge: I tested it with Nova and did the following changes there\nto generate a \"sample.conf\" file which contained the group help text:\nhttp://paste.openstack.org/show/478295/","commit_id":"645315f864e102359ceed6aa289fae364aa334dc"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"cf49b6b29a40f99e9772fa5d7bb5d94fb12b8bb9","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    _output_opts(formatter, default_group, groups.pop(\u0027DEFAULT\u0027))"},{"line_number":296,"context_line":"    for group, namespaces in sorted(groups.items(), key\u003d_get_group_name):"},{"line_number":297,"context_line":"        formatter.write(\u0027\\n\\n\u0027)"},{"line_number":298,"context_line":"        _output_opts(formatter, conf.get_group(group), namespaces)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"def main(args\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_40e4783a","line":298,"updated":"2015-11-07 00:03:58.000000000","message":"This won\u0027t work, as the configuration groups aren\u0027t actually registered with the conf object.","commit_id":"645315f864e102359ceed6aa289fae364aa334dc"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"bf5fb6791ae58d0a8e8f91f70dccfbe6e6af59c2","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    _output_opts(formatter, default_group, groups.pop(\u0027DEFAULT\u0027))"},{"line_number":296,"context_line":"    for group, namespaces in sorted(groups.items(), key\u003d_get_group_name):"},{"line_number":297,"context_line":"        formatter.write(\u0027\\n\\n\u0027)"},{"line_number":298,"context_line":"        _output_opts(formatter, conf.get_group(group), namespaces)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"def main(args\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_2c5caa24","line":298,"in_reply_to":"da85f559_40e4783a","updated":"2015-11-09 10:30:30.000000000","message":"OK. I thought \"CONF.register_group\" does this, but it seems this is not the case. I\u0027m going to push another patch set.","commit_id":"645315f864e102359ceed6aa289fae364aa334dc"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"6021dd9d2cf6fb22a01c1515994d9671ebe7f3e1","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _get_group_name(item):"},{"line_number":283,"context_line":"        group \u003d item[0]"},{"line_number":284,"context_line":"        # The key of that dictionary could be an OptGroup. Otherwise the"},{"line_number":285,"context_line":"        # help text of an OptGroup wouldn\u0027t be part of the generated sample"},{"line_number":286,"context_line":"        # file. It could also be just a plain group name without any further"},{"line_number":287,"context_line":"        # attributes. That\u0027s the reason why we have to distinct this here."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_40b45af1","line":284,"updated":"2015-11-16 20:40:34.000000000","message":"This comment is a little confusing because it refers to a dictionary not present inside this function only via a pronoun (\"that\").","commit_id":"ad739a4c0958601e2117ba90fe4d758d2950e5ba"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"44c76d320b1019228919910d284ccaf2f03488a6","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _get_group_name(item):"},{"line_number":283,"context_line":"        group \u003d item[0]"},{"line_number":284,"context_line":"        # The key of that dictionary could be an OptGroup. Otherwise the"},{"line_number":285,"context_line":"        # help text of an OptGroup wouldn\u0027t be part of the generated sample"},{"line_number":286,"context_line":"        # file. It could also be just a plain group name without any further"},{"line_number":287,"context_line":"        # attributes. That\u0027s the reason why we have to distinct this here."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_197d561c","line":284,"in_reply_to":"ba8a016a_40b45af1","updated":"2015-11-17 08:28:08.000000000","message":"@Doug: Yeah, after a few days not being in touch with the code I see that \"that\" can be confusing. Using pronouns in documentation is a bad habit I still try to break with. Thanks for your following patch which solves this.","commit_id":"ad739a4c0958601e2117ba90fe4d758d2950e5ba"}]}
