)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"99abb789215a7a5ddfbcc0cd7be377e3e5608c8d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"      a fresh opts.py without a sample file when necessary."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Closes-Bug: 1501820"},{"line_number":34,"context_line":"Co-Author: Jay Bryant \u003cjsbryant@us.ibm.com\u003e"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Change-Id: I1f5494ebb19d5f4e8c651cbeef0acad07ad96829"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"da85f559_eac65015","line":34,"updated":"2015-11-16 03:45:49.000000000","message":"I think the correct format is this:\n\nCo-Authored-By:\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"2f9e4163f42ae5246fd997b9f35e16d3d97be54f"}],"cinder/config/generate_cinder_opts.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d7a9b74796669fd88e31c781339d5a2507e38b2e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    REGISTER_OPTS_STR \u003d \"CONF.register_opts(\""},{"line_number":23,"context_line":"    REGISTER_OPT_STR \u003d \"CONF.register_opt(\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    license_str \u003d (\u0027# Licensed under the Apache License, Version 2.0 (the \u0027"},{"line_number":26,"context_line":"                   \u0027\"License\");\\n\u0027"},{"line_number":27,"context_line":"                   \u0027# you may not use this file except in compliance with \u0027"},{"line_number":28,"context_line":"                   \u0027the License.\\n\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_a6ae9c7f","line":25,"updated":"2015-11-12 22:12:31.000000000","message":"This is the hard way to do this... see follow-up review.","commit_id":"9a257d56b6e2b4d33fc205edb6800d6d49b5a654"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"616366a81e456b74253c64eb4a4ebf785cbb810a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    REGISTER_OPTS_STR \u003d \"CONF.register_opts(\""},{"line_number":23,"context_line":"    REGISTER_OPT_STR \u003d \"CONF.register_opt(\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    license_str \u003d (\u0027# Licensed under the Apache License, Version 2.0 (the \u0027"},{"line_number":26,"context_line":"                   \u0027\"License\");\\n\u0027"},{"line_number":27,"context_line":"                   \u0027# you may not use this file except in compliance with \u0027"},{"line_number":28,"context_line":"                   \u0027the License.\\n\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_0c344648","line":25,"in_reply_to":"da85f559_a6ae9c7f","updated":"2015-11-13 14:22:50.000000000","message":"Done","commit_id":"9a257d56b6e2b4d33fc205edb6800d6d49b5a654"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fe935cfb7f44c5f888ff78a10ad9716ce6a76f63","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                   \u0027# See the License for the specific language governing \u0027"},{"line_number":41,"context_line":"                   \u0027permissions and\\n\u0027"},{"line_number":42,"context_line":"                   \u0027# limitations under the License.\\n\\n\u0027)"},{"line_number":43,"context_line":"    opt_file.write(license_str)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    opt_file.write(\"import itertools\\n\\n\")"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_063528f6","line":43,"updated":"2015-11-12 22:17:28.000000000","message":"This is pretty painful to read.  why not use \"\"\"  ?\n\nhttp://stackoverflow.com/questions/9301466/python-formatting-large-text","commit_id":"9a257d56b6e2b4d33fc205edb6800d6d49b5a654"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"616366a81e456b74253c64eb4a4ebf785cbb810a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                   \u0027# See the License for the specific language governing \u0027"},{"line_number":41,"context_line":"                   \u0027permissions and\\n\u0027"},{"line_number":42,"context_line":"                   \u0027# limitations under the License.\\n\\n\u0027)"},{"line_number":43,"context_line":"    opt_file.write(license_str)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    opt_file.write(\"import itertools\\n\\n\")"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_8cf11698","line":43,"in_reply_to":"da85f559_063528f6","updated":"2015-11-13 14:22:50.000000000","message":"Done","commit_id":"9a257d56b6e2b4d33fc205edb6800d6d49b5a654"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9361a77add3273ef0128946f8df090733e59a7fe","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    REGISTER_OPTS_STR \u003d \"CONF.register_opts(\""},{"line_number":24,"context_line":"    REGISTER_OPT_STR \u003d \"CONF.register_opt(\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    license_str \u003d textwrap.dedent(\"\"\"\\"},{"line_number":27,"context_line":"        # Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":28,"context_line":"        # you may not use this file except in compliance with the License."},{"line_number":29,"context_line":"        # You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_646dddcb","line":26,"updated":"2015-11-13 18:12:09.000000000","message":"no need for the \\ here, if you put a carriage return in front of the \"\"\"","commit_id":"2cb651e93ac5eb3d9f78a6c2005abb0b8e98041b"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"3ea8fcd2869e32fc8abcb4e36821d6ef9e888bf7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    REGISTER_OPTS_STR \u003d \"CONF.register_opts(\""},{"line_number":24,"context_line":"    REGISTER_OPT_STR \u003d \"CONF.register_opt(\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    license_str \u003d textwrap.dedent(\"\"\"\\"},{"line_number":27,"context_line":"        # Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":28,"context_line":"        # you may not use this file except in compliance with the License."},{"line_number":29,"context_line":"        # You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_248915cb","line":26,"updated":"2015-11-13 18:27:01.000000000","message":"see my previous comment in patch set 4 ?","commit_id":"45ea3ad744113e8b8256d1d3ad6fa44087af05b9"}],"cinder/opts.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d9450b80ec135a19e8fe6e93de22a0a1d056eb84","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                cinder_scheduler_weights_capacity.capacity_weight_opts,"},{"line_number":203,"context_line":"                cinder_volume_drivers_sheepdog.sheepdog_opts,"},{"line_number":204,"context_line":"                cinder_volume_drivers_ibm_gpfs.gpfs_opts,"},{"line_number":205,"context_line":"                [cinder_api_middleware_sizelimit.max_request_body_size_opt],"},{"line_number":206,"context_line":"                cinder_volume_drivers_solidfire.sf_opts,"},{"line_number":207,"context_line":"                cinder_volume_drivers_ibm_ibmnas.platform_opts,"},{"line_number":208,"context_line":"                cinder_backup_drivers_swift.swiftbackup_service_opts,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_0b645147","line":205,"updated":"2015-11-12 21:50:23.000000000","message":"What do the brackets mean here?  (And elsewhere in this list.)","commit_id":"9a257d56b6e2b4d33fc205edb6800d6d49b5a654"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"1daa44163c4f83f4304ec67fcd95d24a473ae44e","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                cinder_scheduler_weights_capacity.capacity_weight_opts,"},{"line_number":203,"context_line":"                cinder_volume_drivers_sheepdog.sheepdog_opts,"},{"line_number":204,"context_line":"                cinder_volume_drivers_ibm_gpfs.gpfs_opts,"},{"line_number":205,"context_line":"                [cinder_api_middleware_sizelimit.max_request_body_size_opt],"},{"line_number":206,"context_line":"                cinder_volume_drivers_solidfire.sf_opts,"},{"line_number":207,"context_line":"                cinder_volume_drivers_ibm_ibmnas.platform_opts,"},{"line_number":208,"context_line":"                cinder_backup_drivers_swift.swiftbackup_service_opts,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_664af429","line":205,"in_reply_to":"da85f559_0b645147","updated":"2015-11-12 22:04:48.000000000","message":"The brackets are to make the single opt into a list so that the chaining works to collect all of the option lists together into a master list to pass to oslo config generator.","commit_id":"9a257d56b6e2b4d33fc205edb6800d6d49b5a654"}],"tools/config/check_uptodate.sh":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"2449b553909f7b254dc8ad7dbb7d1411355a7f62","unresolved":false,"context_lines":[{"line_number":13,"context_line":"        echo -en \"\\n\\n#################################################\""},{"line_number":14,"context_line":"        echo -en \"\\nERROR: cinder/opts.py file is missing.\""},{"line_number":15,"context_line":"        echo -en \"\\n#################################################\\n\""},{"line_number":16,"context_line":"\texit 1"},{"line_number":17,"context_line":"    else"},{"line_number":18,"context_line":"        mv cinder/opts.py cinder/opts.py.orig"},{"line_number":19,"context_line":"        tox -e genopts \u0026\u003e /dev/null"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a2fa921_3ebe7f65","line":16,"updated":"2015-10-08 20:10:36.000000000","message":"Got an extraneous tab in front of here.","commit_id":"54fd32a70f9539703d57bebc4c321452debda01c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"2938f4c9a5f340c07f995cc039bd7e1dd6bb9124","unresolved":false,"context_lines":[{"line_number":13,"context_line":"        echo -en \"\\n\\n#################################################\""},{"line_number":14,"context_line":"        echo -en \"\\nERROR: cinder/opts.py file is missing.\""},{"line_number":15,"context_line":"        echo -en \"\\n#################################################\\n\""},{"line_number":16,"context_line":"\texit 1"},{"line_number":17,"context_line":"    else"},{"line_number":18,"context_line":"        mv cinder/opts.py cinder/opts.py.orig"},{"line_number":19,"context_line":"        tox -e genopts \u0026\u003e /dev/null"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7a2fa921_c1976a46","line":16,"in_reply_to":"7a2fa921_3ebe7f65","updated":"2015-10-08 20:22:58.000000000","message":"Done","commit_id":"54fd32a70f9539703d57bebc4c321452debda01c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d7a9b74796669fd88e31c781339d5a2507e38b2e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        if [ $? -ne 0 ]; then"},{"line_number":21,"context_line":"            echo -en \"\\n\\n#################################################\""},{"line_number":22,"context_line":"            echo -en \"\\nERROR: Non-zero exit from generate_cinder_opts.py.\""},{"line_number":23,"context_line":"            echo -en \"\\n       See output above for details.\\n\""},{"line_number":24,"context_line":"            echo -en \"#################################################\\n\""},{"line_number":25,"context_line":"            mv cinder/opts.py.orig cinder/opts.py"},{"line_number":26,"context_line":"            exit 1"}],"source_content_type":"text/x-sh","patch_set":2,"id":"da85f559_26762c07","line":23,"updated":"2015-11-12 22:12:31.000000000","message":"Is there output?  The command has \u0026\u003e /dev/null.","commit_id":"9a257d56b6e2b4d33fc205edb6800d6d49b5a654"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"616366a81e456b74253c64eb4a4ebf785cbb810a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        if [ $? -ne 0 ]; then"},{"line_number":21,"context_line":"            echo -en \"\\n\\n#################################################\""},{"line_number":22,"context_line":"            echo -en \"\\nERROR: Non-zero exit from generate_cinder_opts.py.\""},{"line_number":23,"context_line":"            echo -en \"\\n       See output above for details.\\n\""},{"line_number":24,"context_line":"            echo -en \"#################################################\\n\""},{"line_number":25,"context_line":"            mv cinder/opts.py.orig cinder/opts.py"},{"line_number":26,"context_line":"            exit 1"}],"source_content_type":"text/x-sh","patch_set":2,"id":"da85f559_ccf71e8b","line":23,"in_reply_to":"da85f559_26762c07","updated":"2015-11-13 14:22:50.000000000","message":"Yeah there actually is output. It comes from the tox -e genconfig. Any errors that happen during that command will show in a stack trace and then this message will be there after that so that the user understands where in check_uptodate there was a failure.","commit_id":"9a257d56b6e2b4d33fc205edb6800d6d49b5a654"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"e0a9de4d272e2cd2bab64e1835327cc54a316486","unresolved":false,"context_lines":[{"line_number":21,"context_line":"            echo -en \"\\n\\n#################################################\""},{"line_number":22,"context_line":"            echo -en \"\\nERROR: Non-zero exit from generate_cinder_opts.py.\""},{"line_number":23,"context_line":"            echo -en \"\\n       See output above for details.\\n\""},{"line_number":24,"context_line":"            echo -en \"#################################################\\n\""},{"line_number":25,"context_line":"            mv cinder/opts.py.orig cinder/opts.py"},{"line_number":26,"context_line":"            exit 1"},{"line_number":27,"context_line":"        else"}],"source_content_type":"text/x-sh","patch_set":6,"id":"da85f559_6f012d06","line":24,"updated":"2015-11-14 00:28:18.000000000","message":"You can also do something similar in bash \n\ncat \u003c\u003cEOF\n\n#################################################\nERROR: Non-zero exit from generate_cinder_opts.py.\n       See output above for details.\n#################################################\nEOF","commit_id":"2f9e4163f42ae5246fd997b9f35e16d3d97be54f"}]}
