)]}'
{"cinder/config/generate_cinder_opts.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d9c56ab518f7a68692088a483e9dcec4b816f09","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    opt_file.write(\"import copy \\n\")"},{"line_number":16,"context_line":"    opt_file.write(\"import itertools \\n\")"},{"line_number":17,"context_line":"    opt_file.write(\"from oslo_config import cfg \\n\\n\")"},{"line_number":18,"context_line":"    "},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    for line in sys.stdin:"},{"line_number":21,"context_line":"        dir_trees_list \u003d line.split()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_4d821454","line":18,"updated":"2015-09-02 18:16:01.000000000","message":"Lots of pep8\u0027s in here, including additional whitespaces and missing spaces.","commit_id":"3d82aece3aa9c4c980cb1b5f7c4c23f225023246"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d9c56ab518f7a68692088a483e9dcec4b816f09","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            exists \u003d aline.find(\"CONF.register_opts(\")"},{"line_number":62,"context_line":"            if exists !\u003d -1:"},{"line_number":63,"context_line":"                #(kjnelson)TODO: FIX THIS LATER. These are instances where CONF.register_opts is"},{"line_number":64,"context_line":"                #happening without actually registering real lists of opts"},{"line_number":65,"context_line":"                if aline.find(\u0027base_san_opts\u0027)!\u003d -1 or (key\u003d\u003d \u0027cinder_volume_configuration\u0027):"},{"line_number":66,"context_line":"                    continue"},{"line_number":67,"context_line":"                if aline.find(\"fc-zone-manager\") !\u003d -1:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_cd962494","line":64,"updated":"2015-09-02 18:16:01.000000000","message":"need a space after #","commit_id":"3d82aece3aa9c4c980cb1b5f7c4c23f225023246"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d9c56ab518f7a68692088a483e9dcec4b816f09","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    for item in registered_opts_dict[\"DEFAULT\"]:"},{"line_number":111,"context_line":"        if item[-4:] \u003d\u003d \"opts\" or item[-4:] \u003d\u003d \"OPTS\":"},{"line_number":112,"context_line":"            opt_file.write(\"\\n        \" + item + \",\")"},{"line_number":113,"context_line":"        else:"},{"line_number":114,"context_line":"            opt_file.write(\"\\n        [\" + item + \"],\")"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_ad6730b6","line":112,"updated":"2015-09-02 18:16:01.000000000","message":"probably should refactor this into a single method that adds the right amount of whitespace, so there isn\u0027t a chance of errors.   \n\nwrite_item(item)\nwrite_list_item(item)\n\nor something like that.","commit_id":"3d82aece3aa9c4c980cb1b5f7c4c23f225023246"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"1d9c56ab518f7a68692088a483e9dcec4b816f09","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    "},{"line_number":176,"context_line":"    #opt_file.write(config_group_str)"},{"line_number":177,"context_line":"    #for item in registered_opts_dict[\"config_group\"]:"},{"line_number":178,"context_line":"    #    opt_file.write(\",\\n        \" + item)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    closing_str \u003d (\"\\n    ) )),)\\n\\n\\n\""},{"line_number":181,"context_line":"                  \"def list_opts():\\n\""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_ade2d02d","line":178,"updated":"2015-09-02 18:16:01.000000000","message":"remove commented out code.","commit_id":"3d82aece3aa9c4c980cb1b5f7c4c23f225023246"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f05b8d256d7415ab45cdc0f03c10b7634689d8e5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python3"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_00c943ac","line":1,"updated":"2015-09-09 17:53:58.000000000","message":"So is python3 a requirement here, that could be a problem; possibly just change to python?","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"bd9f064ce09d95a2e14f8478edf5fc470d75ee09","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python3"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_14d160fb","line":1,"in_reply_to":"da20952f_00c943ac","updated":"2015-09-10 21:33:45.000000000","message":"Done","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f05b8d256d7415ab45cdc0f03c10b7634689d8e5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027# See the License for the specific language governing permissions\u0027"},{"line_number":36,"context_line":"        \u0027 and\\n\u0027"},{"line_number":37,"context_line":"        \u0027# limitations under the License.\\n\\n\u0027)"},{"line_number":38,"context_line":"    opt_file.write(license_str)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    opt_file.write(\"import copy\\n\")"},{"line_number":41,"context_line":"    opt_file.write(\"import itertools\\n\\n\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_20432715","line":38,"updated":"2015-09-09 17:53:58.000000000","message":"I don\u0027t think we need to write the license header to a temp file, this can just go away.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"3c7c52cf3054cd941afef4cb5b85884d16ca638c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027# See the License for the specific language governing permissions\u0027"},{"line_number":36,"context_line":"        \u0027 and\\n\u0027"},{"line_number":37,"context_line":"        \u0027# limitations under the License.\\n\\n\u0027)"},{"line_number":38,"context_line":"    opt_file.write(license_str)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    opt_file.write(\"import copy\\n\")"},{"line_number":41,"context_line":"    opt_file.write(\"import itertools\\n\\n\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_4fc68417","line":38,"in_reply_to":"da20952f_20432715","updated":"2015-09-09 20:14:52.000000000","message":"Done.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f05b8d256d7415ab45cdc0f03c10b7634689d8e5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                if dir[:-3] !\u003d \"__init__\":"},{"line_number":61,"context_line":"                    import_name +\u003d dir[:-3].replace(\"_\", \"\")"},{"line_number":62,"context_line":"                    import_module \u003d (import_module[:-1] + \" import \" +"},{"line_number":63,"context_line":"                                     dir[:-3] + \" as \" + import_name)"},{"line_number":64,"context_line":"                else:"},{"line_number":65,"context_line":"                    import_name \u003d import_name[:-1]"},{"line_number":66,"context_line":"                    import_module \u003d (import_module[:-1] + \" import \" +"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_0025c35a","line":63,"updated":"2015-09-09 17:53:58.000000000","message":"I\u0027m not a fan of the \"import as import_name\" but if works so I guess that\u0027s cool; would be nice to clean this up and change it.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"3c7c52cf3054cd941afef4cb5b85884d16ca638c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                if dir[:-3] !\u003d \"__init__\":"},{"line_number":61,"context_line":"                    import_name +\u003d dir[:-3].replace(\"_\", \"\")"},{"line_number":62,"context_line":"                    import_module \u003d (import_module[:-1] + \" import \" +"},{"line_number":63,"context_line":"                                     dir[:-3] + \" as \" + import_name)"},{"line_number":64,"context_line":"                else:"},{"line_number":65,"context_line":"                    import_name \u003d import_name[:-1]"},{"line_number":66,"context_line":"                    import_module \u003d (import_module[:-1] + \" import \" +"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_2f330ff8","line":63,"in_reply_to":"da20952f_0025c35a","updated":"2015-09-09 20:14:52.000000000","message":"I just have that so that it makes it easier to reference the opt list names later when returning them in the separate sections, but I will think about coming up with a better way and come back to that later as a refactor or something. Sound good?","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f05b8d256d7415ab45cdc0f03c10b7634689d8e5","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if exists !\u003d -1:"},{"line_number":92,"context_line":"                # TODO(kjnelson) FIX THIS LATER. These are instances where"},{"line_number":93,"context_line":"                # CONF.register_opts is happening without actually registering"},{"line_number":94,"context_line":"                # real lists of opts"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"                exists \u003d aline.find(\u0027base_san_opts\u0027)"},{"line_number":97,"context_line":"                if (exists !\u003d -1) or (key \u003d\u003d \u0027cinder_volume_configuration\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_20b247e6","line":94,"updated":"2015-09-09 17:53:58.000000000","message":"We should probably consider logging a bug against these and fixing them.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"bd9f064ce09d95a2e14f8478edf5fc470d75ee09","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if exists !\u003d -1:"},{"line_number":92,"context_line":"                # TODO(kjnelson) FIX THIS LATER. These are instances where"},{"line_number":93,"context_line":"                # CONF.register_opts is happening without actually registering"},{"line_number":94,"context_line":"                # real lists of opts"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"                exists \u003d aline.find(\u0027base_san_opts\u0027)"},{"line_number":97,"context_line":"                if (exists !\u003d -1) or (key \u003d\u003d \u0027cinder_volume_configuration\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_bf764d04","line":94,"in_reply_to":"da20952f_20b247e6","updated":"2015-09-10 21:33:45.000000000","message":"Yeah I will make a bug and get a patch out for these.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f05b8d256d7415ab45cdc0f03c10b7634689d8e5","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    list_str \u003d (\"def list_opts():\\n\""},{"line_number":142,"context_line":"                \"    return [\\n\""},{"line_number":143,"context_line":"                \"        (\u0027DEFAULT\u0027,\\n\""},{"line_number":144,"context_line":"                \"        itertools.chain(\\n\")"},{"line_number":145,"context_line":"    opt_file.write(list_str)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    for item in registered_opts_dict[\"DEFAULT\"]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_20000766","line":144,"updated":"2015-09-09 17:53:58.000000000","message":"Looks like all the FC stuff is kinda \"borked\" here, another candidate for a bug/fix?","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"bd9f064ce09d95a2e14f8478edf5fc470d75ee09","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    list_str \u003d (\"def list_opts():\\n\""},{"line_number":142,"context_line":"                \"    return [\\n\""},{"line_number":143,"context_line":"                \"        (\u0027DEFAULT\u0027,\\n\""},{"line_number":144,"context_line":"                \"        itertools.chain(\\n\")"},{"line_number":145,"context_line":"    opt_file.write(list_str)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    for item in registered_opts_dict[\"DEFAULT\"]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_7f5f5575","line":144,"in_reply_to":"da20952f_20000766","updated":"2015-09-10 21:33:45.000000000","message":"I\u0027ll also think of a better way to approach this.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"d0229dd8fe1f332ec9b73dd9d01d2666521f3fc6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"# Unless required by applicable law or agreed to in writing, software"},{"line_number":9,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS,"},{"line_number":10,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":11,"context_line":"# implied."},{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_d75fba0c","line":10,"updated":"2015-09-14 13:25:21.000000000","message":"Here should be lowercase","commit_id":"b26caf9890fc3a5739ba37954ddc50e207138b94"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"5d246264b48985340f2b4b6ba506618216800776","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"# Unless required by applicable law or agreed to in writing, software"},{"line_number":9,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS,"},{"line_number":10,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":11,"context_line":"# implied."},{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_daf9214f","line":10,"in_reply_to":"ba15a1d1_d75fba0c","updated":"2015-09-14 14:00:41.000000000","message":"Not sure, but it is present at other places too\nhttps://github.com/openstack/cinder/blob/master/cinder/api/v2/snapshots.py","commit_id":"b26caf9890fc3a5739ba37954ddc50e207138b94"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5c16ddc79659643eafc88e478e3bcca162c10625","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"# Unless required by applicable law or agreed to in writing, software"},{"line_number":9,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS,"},{"line_number":10,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":11,"context_line":"# implied."},{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_5d03cb73","line":10,"in_reply_to":"ba15a1d1_d75fba0c","updated":"2015-09-14 14:14:09.000000000","message":"There are other places where this warranty header is used.  This doesn\u0027t merit a -1.","commit_id":"b26caf9890fc3a5739ba37954ddc50e207138b94"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"c69a2e057c1b277e79b947957e2f872a117dcccc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    cmd_opt \u003d (\u0027find \u0027 + targetdir + \u0027 -type f -name \"*.py\" !  \u0027"},{"line_number":37,"context_line":"               \u0027-path \"*/tests/*\" -exec grep -l \"CONF.register_opt(\" {} \u0027"},{"line_number":38,"context_line":"               \u0027+ | grep -v \"__init__.py\" | sed -e \"s/^\u0027"},{"line_number":39,"context_line":"               + basedir + \u0027\\///g\" | sort -u\u0027)"},{"line_number":40,"context_line":"    output_opt \u003d subprocess.check_output(\u0027{}\u0027.format(cmd_opt), shell \u003d True)"},{"line_number":41,"context_line":"    temp_list \u003d output_opt.split()"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_fa47ccb9","line":39,"updated":"2015-09-16 20:21:00.000000000","message":"since command is same in both cmd_opts and cmd_opt except a string \"CONF.register_opts(\"  and \u0027CONF.register_opt(\" , \nso is not better to use some thing like\n\ncommon_string \u003d (\u0027find \u0027 + targetdir + \u0027 -type f -name \"*.py\" !  \u0027\n                                  \u0027-path \"*/tests/*\" -exec grep -l \"%s\" {} \u0027\n                                  \u0027+ | grep -v \"__init__.py\" | sed -e \"s/^\u0027 + basedir +\n                                   \u0027\\///g\" | sort -u\u0027)\n\n\ncmd_opts \u003d common_string % \"CONF.register_opts(\"\ncmd_opt \u003d common_string % \"CONF.register_opt(\"","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"88e0c6f315e4e66e5f214dd8f9e02e86a0aa5bf1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    cmd_opt \u003d (\u0027find \u0027 + targetdir + \u0027 -type f -name \"*.py\" !  \u0027"},{"line_number":37,"context_line":"               \u0027-path \"*/tests/*\" -exec grep -l \"CONF.register_opt(\" {} \u0027"},{"line_number":38,"context_line":"               \u0027+ | grep -v \"__init__.py\" | sed -e \"s/^\u0027"},{"line_number":39,"context_line":"               + basedir + \u0027\\///g\" | sort -u\u0027)"},{"line_number":40,"context_line":"    output_opt \u003d subprocess.check_output(\u0027{}\u0027.format(cmd_opt), shell \u003d True)"},{"line_number":41,"context_line":"    temp_list \u003d output_opt.split()"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_909c6f5e","line":39,"in_reply_to":"ba15a1d1_fa47ccb9","updated":"2015-09-16 21:32:48.000000000","message":"Done","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"fe41c45e0e82f9748a7a2a6e0aaa3044b82e8b03","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    dir_trees_list.sort()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    for atree in dir_trees_list:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if atree \u003d\u003d \"cinder/config/generate_cinder_opts.py\":"},{"line_number":50,"context_line":"            continue"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_ba2e3441","line":48,"updated":"2015-09-16 20:59:08.000000000","message":"Are these actually directory trees or just filenames (with relative path from where this is run) - just asking because the variable names","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"88e0c6f315e4e66e5f214dd8f9e02e86a0aa5bf1","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    dir_trees_list.sort()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    for atree in dir_trees_list:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if atree \u003d\u003d \"cinder/config/generate_cinder_opts.py\":"},{"line_number":50,"context_line":"            continue"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_d0bd07b8","line":48,"in_reply_to":"ba15a1d1_ba2e3441","updated":"2015-09-16 21:32:48.000000000","message":"It is actually a tree :)","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"fe41c45e0e82f9748a7a2a6e0aaa3044b82e8b03","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        dirs_list \u003d atree.split(\u0027/\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        import_module \u003d \"from \""},{"line_number":55,"context_line":"        import_name \u003d \"\""},{"line_number":56,"context_line":"        for dir in dirs_list:"},{"line_number":57,"context_line":"            if dir.find(\".py\") \u003d\u003d -1:"},{"line_number":58,"context_line":"                import_module +\u003d dir + \".\""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_10305fe7","line":55,"updated":"2015-09-16 20:59:08.000000000","message":"Not an issue but we could probably use something like os.path tools to help with the filename manipulation portion","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"88e0c6f315e4e66e5f214dd8f9e02e86a0aa5bf1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        dirs_list \u003d atree.split(\u0027/\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        import_module \u003d \"from \""},{"line_number":55,"context_line":"        import_name \u003d \"\""},{"line_number":56,"context_line":"        for dir in dirs_list:"},{"line_number":57,"context_line":"            if dir.find(\".py\") \u003d\u003d -1:"},{"line_number":58,"context_line":"                import_module +\u003d dir + \".\""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_f0912bf2","line":55,"in_reply_to":"ba15a1d1_10305fe7","updated":"2015-09-16 21:32:48.000000000","message":"I will have to look into this when I go to refactor the section where the opts get written to the opts.py file in a future patch.","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"fe41c45e0e82f9748a7a2a6e0aaa3044b82e8b03","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                            \u0027DEFAULT\u0027: [], }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _write_item(opts):"},{"line_number":80,"context_line":"        list_name \u003d opts[-3:]"},{"line_number":81,"context_line":"        if (list_name \u003d\u003d \"opt\" or list_name \u003d\u003d \"OPT\"):"},{"line_number":82,"context_line":"            opt_file.write(\"            [\" + opts.strip(\"\\n\") + \"],\\n\")"},{"line_number":83,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_70a3db00","line":80,"updated":"2015-09-16 20:59:08.000000000","message":"Totally up to you but we could also do a list_name.lower() and only have one check","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"88e0c6f315e4e66e5f214dd8f9e02e86a0aa5bf1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                            \u0027DEFAULT\u0027: [], }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _write_item(opts):"},{"line_number":80,"context_line":"        list_name \u003d opts[-3:]"},{"line_number":81,"context_line":"        if (list_name \u003d\u003d \"opt\" or list_name \u003d\u003d \"OPT\"):"},{"line_number":82,"context_line":"            opt_file.write(\"            [\" + opts.strip(\"\\n\") + \"],\\n\")"},{"line_number":83,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_5077b7d2","line":80,"in_reply_to":"ba15a1d1_70a3db00","updated":"2015-09-16 21:32:48.000000000","message":"Done","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"afa15677484dfe405e0698303b0b2de46f1d80a4","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _write_item(opts):"},{"line_number":80,"context_line":"        list_name \u003d opts[-3:]"},{"line_number":81,"context_line":"        if (list_name \u003d\u003d \"opt\" or list_name \u003d\u003d \"OPT\"):"},{"line_number":82,"context_line":"            opt_file.write(\"            [\" + opts.strip(\"\\n\") + \"],\\n\")"},{"line_number":83,"context_line":"        else:"},{"line_number":84,"context_line":"            opt_file.write(\"            \" + opts.strip(\"\\n\") + \",\\n\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_17b5b92f","line":81,"updated":"2015-09-16 19:52:55.000000000","message":"() not necessary. But harmless.","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"88e0c6f315e4e66e5f214dd8f9e02e86a0aa5bf1","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _write_item(opts):"},{"line_number":80,"context_line":"        list_name \u003d opts[-3:]"},{"line_number":81,"context_line":"        if (list_name \u003d\u003d \"opt\" or list_name \u003d\u003d \"OPT\"):"},{"line_number":82,"context_line":"            opt_file.write(\"            [\" + opts.strip(\"\\n\") + \"],\\n\")"},{"line_number":83,"context_line":"        else:"},{"line_number":84,"context_line":"            opt_file.write(\"            \" + opts.strip(\"\\n\") + \",\\n\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_f07feba8","line":81,"in_reply_to":"ba15a1d1_17b5b92f","updated":"2015-09-16 21:32:48.000000000","message":"Done","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"10050ee2d26af6e247e64de300a1fe6b3de3a003","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"import subprocess"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"if __name__ \u003d\u003d \"__main__\":"},{"line_number":19,"context_line":"    opt_file \u003d open(\"cinder/opts.py\", \u0027a\u0027)"},{"line_number":20,"context_line":"    opt_dict \u003d {}"},{"line_number":21,"context_line":"    dir_trees_list \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_6de9c1e5","line":18,"updated":"2015-09-17 00:44:12.000000000","message":"Pass in an argument for the base dir?\nSo for example in the sh script pass in cwd, so we can figure out where things are and parse properly, or fail and return an error if it\u0027s not provided and we don\u0027t know?","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"765ac7f933cdea14aed0ab4202e9bad6c0aade5a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"import subprocess"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"if __name__ \u003d\u003d \"__main__\":"},{"line_number":19,"context_line":"    opt_file \u003d open(\"cinder/opts.py\", \u0027a\u0027)"},{"line_number":20,"context_line":"    opt_dict \u003d {}"},{"line_number":21,"context_line":"    dir_trees_list \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_b0a4e5b9","line":18,"in_reply_to":"ba15a1d1_6de9c1e5","updated":"2015-09-17 16:44:54.000000000","message":"Both base and target directories are being checked inside generate_sample.sh before they are being made into environmental variables (lines 34-46). Also, I have added a check after generate_cinder_opts.py is run in generate_sample.sh so that we are catching if something breaks inside here (lines 56-63).","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"10050ee2d26af6e247e64de300a1fe6b3de3a003","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    for item in temp_list:"},{"line_number":43,"context_line":"        dir_trees_list.append(item)"},{"line_number":44,"context_line":"    dir_trees_list.sort()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    for atree in dir_trees_list:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        if atree \u003d\u003d \"cinder/config/generate_cinder_opts.py\":"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_2def49ea","line":45,"updated":"2015-09-17 00:44:12.000000000","message":"Lines 26 - 45 should be able to condense down to something more pythonic like:\n\nmy_list \u003d []\n     for root, dirs, name in os.walk(base_dir):\n         for n in fnmatch.filter(name, \u0027*.py\u0027):\n             if ((\u0027CONF.register_opt\u0027 in open(os.path.join(root, n)).read()) and\n                     (\u0027cinder/tests\u0027 not in root)):\n                 cinder_path \u003d root.replace(base_dir + \u0027/\u0027, \u0027\u0027)\n                 my_list.append(os.path.join(cinder_path, n))\n     my_list.sort()\n\nThis does seem to pick a number of options that you don\u0027t have in your list, guessing it has something to do with the pattern you have above that I quite honestly can\u0027t fully decipher. Should be trivial and clear to be able to fix that up to make it work?\nAs it stands it picks up every item you have in your dir_trees_list, but it has a number of extras that cause genconfig to vomit... I haven\u0027t spent any time digging into that, but making some assumptions that you\u0027re probably familiar with it?","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"765ac7f933cdea14aed0ab4202e9bad6c0aade5a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    for item in temp_list:"},{"line_number":43,"context_line":"        dir_trees_list.append(item)"},{"line_number":44,"context_line":"    dir_trees_list.sort()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    for atree in dir_trees_list:"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        if atree \u003d\u003d \"cinder/config/generate_cinder_opts.py\":"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_f04d7dc4","line":45,"in_reply_to":"ba15a1d1_2def49ea","updated":"2015-09-17 16:44:54.000000000","message":"I am hesitant to make such a large change to what works right now since the grep statement you are referring to in your above comment is what has always been used and currently works, particularly when we take into account how anxious people are to get this change in before the end of Liberty. I will, however, look into this as a refactor first thing in Mitaka as I think it is a good change to make and would make the collecting of the directories where opts are being registered more stable.","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"}],"setup.cfg":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f05b8d256d7415ab45cdc0f03c10b7634689d8e5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    ChanceWeigher \u003d cinder.scheduler.weights.chance:ChanceWeigher"},{"line_number":43,"context_line":"    GoodnessWeigher \u003d cinder.scheduler.weights.goodness:GoodnessWeigher"},{"line_number":44,"context_line":"    VolumeNumberWeigher \u003d cinder.scheduler.weights.volume_number:VolumeNumberWeigher"},{"line_number":45,"context_line":"oslo.config.opts \u003d"},{"line_number":46,"context_line":"    cinder \u003d cinder.opts:list_opts"},{"line_number":47,"context_line":"    keystonemiddleware \u003d keystonemiddleware.auth_token:list_opts"},{"line_number":48,"context_line":"    oslo_concurrency \u003d oslo_concurrency.opts:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"da20952f_8080f38c","line":45,"updated":"2015-09-09 17:53:58.000000000","message":"Nit, but I\u0027d prefer these were moved into a generator.conf file rather than being in the setup.cfg here:\n\nhttps://review.openstack.org/#/c/219977/3/etc/cinder/cinder-config-generator.conf","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"bd9f064ce09d95a2e14f8478edf5fc470d75ee09","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    ChanceWeigher \u003d cinder.scheduler.weights.chance:ChanceWeigher"},{"line_number":43,"context_line":"    GoodnessWeigher \u003d cinder.scheduler.weights.goodness:GoodnessWeigher"},{"line_number":44,"context_line":"    VolumeNumberWeigher \u003d cinder.scheduler.weights.volume_number:VolumeNumberWeigher"},{"line_number":45,"context_line":"oslo.config.opts \u003d"},{"line_number":46,"context_line":"    cinder \u003d cinder.opts:list_opts"},{"line_number":47,"context_line":"    keystonemiddleware \u003d keystonemiddleware.auth_token:list_opts"},{"line_number":48,"context_line":"    oslo_concurrency \u003d oslo_concurrency.opts:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"da20952f_ffd045f9","line":45,"in_reply_to":"da20952f_8080f38c","updated":"2015-09-10 21:33:45.000000000","message":"Since other projects are setting up the namespace for their project in the setup.cfg, I did it this way.  I just tried setting it up in the cinder-config-generator.conf though as per your suggestion, unfortunately it didn\u0027t like that way of setting up the namespace- the python genconfig didn\u0027t understand or whatever and it just broke. Do you know how to set it up the way you\u0027re suggesting? Maybe I am not doing it correctly.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"3f52680e381b707a3134de216383d6e90739ec51","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    ChanceWeigher \u003d cinder.scheduler.weights.chance:ChanceWeigher"},{"line_number":43,"context_line":"    GoodnessWeigher \u003d cinder.scheduler.weights.goodness:GoodnessWeigher"},{"line_number":44,"context_line":"    VolumeNumberWeigher \u003d cinder.scheduler.weights.volume_number:VolumeNumberWeigher"},{"line_number":45,"context_line":"oslo.config.opts\u003d"},{"line_number":46,"context_line":"    cinder \u003d cinder.opts:list_opts"},{"line_number":47,"context_line":"    keystonemiddleware \u003d keystonemiddleware.auth_token:list_opts"},{"line_number":48,"context_line":"    oslo_concurrency \u003d oslo_concurrency.opts:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"ba15a1d1_a75794c9","line":45,"updated":"2015-09-12 11:59:22.000000000","message":"space is required before and after \u0027\u003d\u0027","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"b15617750100e3ccdad57c64e4aa74267e3003f9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    ChanceWeigher \u003d cinder.scheduler.weights.chance:ChanceWeigher"},{"line_number":43,"context_line":"    GoodnessWeigher \u003d cinder.scheduler.weights.goodness:GoodnessWeigher"},{"line_number":44,"context_line":"    VolumeNumberWeigher \u003d cinder.scheduler.weights.volume_number:VolumeNumberWeigher"},{"line_number":45,"context_line":"oslo.config.opts\u003d"},{"line_number":46,"context_line":"    cinder \u003d cinder.opts:list_opts"},{"line_number":47,"context_line":"    keystonemiddleware \u003d keystonemiddleware.auth_token:list_opts"},{"line_number":48,"context_line":"    oslo_concurrency \u003d oslo_concurrency.opts:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"ba15a1d1_94bb80c4","line":45,"in_reply_to":"ba15a1d1_9655c71e","updated":"2015-09-14 14:00:33.000000000","message":"here space was required only before \u0027\u003d\u0027,  so thanks for not using it after \u0027\u003d\u0027","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"ea704945b904cddf2f238193e89755a0c643c427","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    ChanceWeigher \u003d cinder.scheduler.weights.chance:ChanceWeigher"},{"line_number":43,"context_line":"    GoodnessWeigher \u003d cinder.scheduler.weights.goodness:GoodnessWeigher"},{"line_number":44,"context_line":"    VolumeNumberWeigher \u003d cinder.scheduler.weights.volume_number:VolumeNumberWeigher"},{"line_number":45,"context_line":"oslo.config.opts\u003d"},{"line_number":46,"context_line":"    cinder \u003d cinder.opts:list_opts"},{"line_number":47,"context_line":"    keystonemiddleware \u003d keystonemiddleware.auth_token:list_opts"},{"line_number":48,"context_line":"    oslo_concurrency \u003d oslo_concurrency.opts:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"ba15a1d1_9655c71e","line":45,"in_reply_to":"ba15a1d1_a75794c9","updated":"2015-09-14 13:03:39.000000000","message":"Done","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"}],"tools/config/check_uptodate.sh":[{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"3f52680e381b707a3134de216383d6e90739ec51","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"if [ -e etc/${PROJECT_NAME}/${CFGFILE_NAME} ]; then"},{"line_number":20,"context_line":"    CFGFILE\u003detc/${PROJECT_NAME}/${CFGFILE_NAME}"},{"line_number":21,"context_line":"else"},{"line_number":22,"context_line":"    if [-e cinder/opts.py]; then"},{"line_number":23,"context_line":"\techo -en \"\\n\\nWARNING: Found cinder/opts.py file. \\n\""},{"line_number":24,"context_line":"\techo -en \"Check for generate_cinder_opts.py failure.\\n\\n\""}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_674bbc2c","line":21,"updated":"2015-09-12 11:59:22.000000000","message":"better to use elif ?","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"ea704945b904cddf2f238193e89755a0c643c427","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"if [ -e etc/${PROJECT_NAME}/${CFGFILE_NAME} ]; then"},{"line_number":20,"context_line":"    CFGFILE\u003detc/${PROJECT_NAME}/${CFGFILE_NAME}"},{"line_number":21,"context_line":"else"},{"line_number":22,"context_line":"    if [-e cinder/opts.py]; then"},{"line_number":23,"context_line":"\techo -en \"\\n\\nWARNING: Found cinder/opts.py file. \\n\""},{"line_number":24,"context_line":"\techo -en \"Check for generate_cinder_opts.py failure.\\n\\n\""}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_56364f04","line":21,"in_reply_to":"ba15a1d1_674bbc2c","updated":"2015-09-14 13:03:39.000000000","message":"Done","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"3f52680e381b707a3134de216383d6e90739ec51","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    if [-e cinder/opts.py]; then"},{"line_number":23,"context_line":"\techo -en \"\\n\\nWARNING: Found cinder/opts.py file. \\n\""},{"line_number":24,"context_line":"\techo -en \"Check for generate_cinder_opts.py failure.\\n\\n\""},{"line_number":25,"context_line":"\texit 1"},{"line_number":26,"context_line":"    fi"},{"line_number":27,"context_line":"    echo \"${0##*/}: can not find config file\""},{"line_number":28,"context_line":"    exit 1"}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_475238df","line":25,"updated":"2015-09-12 11:59:22.000000000","message":"not sure about \u003e\u003e  in line 23-25","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"3f52680e381b707a3134de216383d6e90739ec51","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\techo -en \"Check for generate_cinder_opts.py failure.\\n\\n\""},{"line_number":25,"context_line":"\texit 1"},{"line_number":26,"context_line":"    fi"},{"line_number":27,"context_line":"    echo \"${0##*/}: can not find config file\""},{"line_number":28,"context_line":"    exit 1"},{"line_number":29,"context_line":"fi"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_0763e0b2","line":27,"updated":"2015-09-12 11:59:22.000000000","message":"period at end of message","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"ea704945b904cddf2f238193e89755a0c643c427","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\techo -en \"Check for generate_cinder_opts.py failure.\\n\\n\""},{"line_number":25,"context_line":"\texit 1"},{"line_number":26,"context_line":"    fi"},{"line_number":27,"context_line":"    echo \"${0##*/}: can not find config file\""},{"line_number":28,"context_line":"    exit 1"},{"line_number":29,"context_line":"fi"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_b6256bc3","line":27,"in_reply_to":"ba15a1d1_0763e0b2","updated":"2015-09-14 13:03:39.000000000","message":"Done","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"3f52680e381b707a3134de216383d6e90739ec51","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    echo \"${0##*/}: can not find config file\""},{"line_number":28,"context_line":"    exit 1"},{"line_number":29,"context_line":"fi"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_e75d8ced","line":30,"updated":"2015-09-12 11:59:22.000000000","message":"extra line?","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"ea704945b904cddf2f238193e89755a0c643c427","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    echo \"${0##*/}: can not find config file\""},{"line_number":28,"context_line":"    exit 1"},{"line_number":29,"context_line":"fi"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_d6225fb9","line":30,"in_reply_to":"ba15a1d1_e75d8ced","updated":"2015-09-14 13:03:39.000000000","message":"Done","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"10050ee2d26af6e247e64de300a1fe6b3de3a003","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"tools/config/generate_sample.sh from_tox"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# generate_sample.sh may return 0 even when it fails."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"if [ -e etc/${PROJECT_NAME}/${CFGFILE_NAME} ]; then"},{"line_number":20,"context_line":"    CFGFILE\u003detc/${PROJECT_NAME}/${CFGFILE_NAME}"}],"source_content_type":"text/x-sh","patch_set":11,"id":"ba15a1d1_4decfdf2","line":17,"updated":"2015-09-17 00:44:12.000000000","message":"True story!","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"765ac7f933cdea14aed0ab4202e9bad6c0aade5a","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"tools/config/generate_sample.sh from_tox"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# generate_sample.sh may return 0 even when it fails."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"if [ -e etc/${PROJECT_NAME}/${CFGFILE_NAME} ]; then"},{"line_number":20,"context_line":"    CFGFILE\u003detc/${PROJECT_NAME}/${CFGFILE_NAME}"}],"source_content_type":"text/x-sh","patch_set":11,"id":"ba15a1d1_6b40a234","line":17,"in_reply_to":"ba15a1d1_4decfdf2","updated":"2015-09-17 16:44:54.000000000","message":"I hopefully addressed this with all the checks I have added :)","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"10050ee2d26af6e247e64de300a1fe6b3de3a003","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    exit 1"},{"line_number":25,"context_line":"else"},{"line_number":26,"context_line":"    echo \"${0##*/}: Can\u0027t find config file.\""},{"line_number":27,"context_line":"    exit 1"},{"line_number":28,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":11,"id":"ba15a1d1_0dc12554","line":27,"updated":"2015-09-17 00:44:12.000000000","message":"so checking file existence isn\u0027t enough, I\u0027ve been able to produce a number of cases where the files are all generated, but they\u0027re empty, inparticular the sample file, we should have a final check to make sure there is \"some\" text in there, even if it\u0027s a check for well known opts or something?","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"765ac7f933cdea14aed0ab4202e9bad6c0aade5a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    exit 1"},{"line_number":25,"context_line":"else"},{"line_number":26,"context_line":"    echo \"${0##*/}: Can\u0027t find config file.\""},{"line_number":27,"context_line":"    exit 1"},{"line_number":28,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":11,"id":"ba15a1d1_4beb5edf","line":27,"in_reply_to":"ba15a1d1_0dc12554","updated":"2015-09-17 16:44:54.000000000","message":"I added several checks to generate_sample.sh to make sure generate_cinder_opts.py runs properly (lines 56-63), the oslo-config-generator is running properly with the opts.py file (lines 67-74), and lastly that the cinder.sample.conf file being generated in fact exists and has lines in it aka is no zero (lines 75-81). If there are any other checks I am missing please let me know and I can add them in the refactor if they aren\u0027t as pressing as I understand these checks to be.","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"}],"tools/config/generate_sample.sh":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f05b8d256d7415ab45cdc0f03c10b7634689d8e5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"FILES\u003d$(find $TARGETDIR -type f -name \"*.py\" ! -path \"*/tests/*\" \\"},{"line_number":101,"context_line":"        -exec grep -l \"CONF.register_opts(\" {} + | grep -v \"__init__.py\" | sed -e \"s/^$BASEDIRESC\\///g\" | sort -u)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"#echo \"cinder/quota.py\"| cinder/config/generate_cinder_opts.py"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"echo $FILES | cinder/config/generate_cinder_opts.py"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-sh","patch_set":4,"id":"da20952f_20a7a70c","line":103,"updated":"2015-09-09 17:53:58.000000000","message":"remove ?  ^^","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"3c7c52cf3054cd941afef4cb5b85884d16ca638c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"FILES\u003d$(find $TARGETDIR -type f -name \"*.py\" ! -path \"*/tests/*\" \\"},{"line_number":101,"context_line":"        -exec grep -l \"CONF.register_opts(\" {} + | grep -v \"__init__.py\" | sed -e \"s/^$BASEDIRESC\\///g\" | sort -u)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"#echo \"cinder/quota.py\"| cinder/config/generate_cinder_opts.py"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"echo $FILES | cinder/config/generate_cinder_opts.py"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-sh","patch_set":4,"id":"da20952f_0f43ac6d","line":103,"in_reply_to":"da20952f_20a7a70c","updated":"2015-09-09 20:14:52.000000000","message":"Done.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f05b8d256d7415ab45cdc0f03c10b7634689d8e5","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"echo $FILES | cinder/config/generate_cinder_opts.py"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"oslo-config-generator --config-file\u003dcinder/config/cinder-config-generator.conf"}],"source_content_type":"text/x-sh","patch_set":4,"id":"da20952f_6084bf5c","line":107,"updated":"2015-09-09 17:53:58.000000000","message":"Add a \u0027cinder/opts.py\u0027 here to cleanup the file you generated?","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"3c7c52cf3054cd941afef4cb5b85884d16ca638c","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"echo $FILES | cinder/config/generate_cinder_opts.py"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"oslo-config-generator --config-file\u003dcinder/config/cinder-config-generator.conf"}],"source_content_type":"text/x-sh","patch_set":4,"id":"da20952f_af7ba0bd","line":107,"in_reply_to":"da20952f_6084bf5c","updated":"2015-09-09 20:14:52.000000000","message":"Done.","commit_id":"c8205d32aa0a45959cdd6fe28aeb7d1ade1f570c"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"3f52680e381b707a3134de216383d6e90739ec51","unresolved":false,"context_lines":[{"line_number":13,"context_line":"BASEDIR\u003d${BASEDIR:-`pwd`}"},{"line_number":14,"context_line":"if ! [ -d $BASEDIR ]"},{"line_number":15,"context_line":"then"},{"line_number":16,"context_line":"    echo \"${0##*/}: missing project base directory\" \u003e\u00262 ; print_hint ; exit 1"},{"line_number":17,"context_line":"elif [[ $BASEDIR !\u003d /* ]]"},{"line_number":18,"context_line":"then"},{"line_number":19,"context_line":"    BASEDIR\u003d$(cd \"$BASEDIR\" \u0026\u0026 pwd)"}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_47bb180f","line":16,"updated":"2015-09-12 11:59:22.000000000","message":"print_hint is removed in this patch, so using it here can cause problems.","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"ea704945b904cddf2f238193e89755a0c643c427","unresolved":false,"context_lines":[{"line_number":13,"context_line":"BASEDIR\u003d${BASEDIR:-`pwd`}"},{"line_number":14,"context_line":"if ! [ -d $BASEDIR ]"},{"line_number":15,"context_line":"then"},{"line_number":16,"context_line":"    echo \"${0##*/}: missing project base directory\" \u003e\u00262 ; print_hint ; exit 1"},{"line_number":17,"context_line":"elif [[ $BASEDIR !\u003d /* ]]"},{"line_number":18,"context_line":"then"},{"line_number":19,"context_line":"    BASEDIR\u003d$(cd \"$BASEDIR\" \u0026\u0026 pwd)"}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_762fd3a1","line":16,"in_reply_to":"ba15a1d1_47bb180f","updated":"2015-09-14 13:03:39.000000000","message":"Done","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"3f52680e381b707a3134de216383d6e90739ec51","unresolved":false,"context_lines":[{"line_number":29,"context_line":"find $TARGETDIR -type f -name \"*.pyc\" -delete"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"export TARGETDIR\u003d$TARGETDIR"},{"line_number":32,"context_line":"export BASEDIRESC\u003d$BASEDIRESC "},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"python cinder/config/generate_cinder_opts.py"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_27e70442","line":32,"updated":"2015-09-12 11:59:22.000000000","message":"Trailing space at end of the line","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"ea704945b904cddf2f238193e89755a0c643c427","unresolved":false,"context_lines":[{"line_number":29,"context_line":"find $TARGETDIR -type f -name \"*.pyc\" -delete"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"export TARGETDIR\u003d$TARGETDIR"},{"line_number":32,"context_line":"export BASEDIRESC\u003d$BASEDIRESC "},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"python cinder/config/generate_cinder_opts.py"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"ba15a1d1_36187b84","line":32,"in_reply_to":"ba15a1d1_27e70442","updated":"2015-09-14 13:03:39.000000000","message":"Done","commit_id":"2ef848e3b159696df1c12a6c855f3d27684cba79"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"429b1431a1cf8c5fc9e7751e3b424728f08741d6","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# CINDER_CONFIG_GENERATOR_EXTRA_LIBRARIES: list of libraries to discover."},{"line_number":11,"context_line":"# CINDER_CONFIG_GENERATOR_EXCLUDED_FILES: list of files to remove from automatic listing."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"BASEDIR\u003d${BASEDIR:-`pwd`}"},{"line_number":14,"context_line":"if ! [ -d $BASEDIR ]"},{"line_number":15,"context_line":"then"},{"line_number":16,"context_line":"    echo \"${0##*/}: missing project base directory\" \u003e\u00262 ; exit 1"}],"source_content_type":"text/x-sh","patch_set":9,"id":"ba15a1d1_da9c4811","line":13,"updated":"2015-09-16 20:25:51.000000000","message":"since we removed the option to specify the basedir, the script doesn\u0027t run from inside the tools dir.\n\nhttp://paste.openstack.org/show/465193/","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"88e0c6f315e4e66e5f214dd8f9e02e86a0aa5bf1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# CINDER_CONFIG_GENERATOR_EXTRA_LIBRARIES: list of libraries to discover."},{"line_number":11,"context_line":"# CINDER_CONFIG_GENERATOR_EXCLUDED_FILES: list of files to remove from automatic listing."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"BASEDIR\u003d${BASEDIR:-`pwd`}"},{"line_number":14,"context_line":"if ! [ -d $BASEDIR ]"},{"line_number":15,"context_line":"then"},{"line_number":16,"context_line":"    echo \"${0##*/}: missing project base directory\" \u003e\u00262 ; exit 1"}],"source_content_type":"text/x-sh","patch_set":9,"id":"ba15a1d1_b04c139f","line":13,"in_reply_to":"ba15a1d1_da9c4811","updated":"2015-09-16 21:32:48.000000000","message":"Done","commit_id":"fe51c943fe484e2d7bd830a3fcae576ae89d0ea2"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"10050ee2d26af6e247e64de300a1fe6b3de3a003","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    echo -en \"\\nERROR: ${0} was not called from tox.\""},{"line_number":19,"context_line":"    echo -en \"\\n       Execute \u0027tox -e genconfig\u0027 for cinder.conf.sample\""},{"line_number":20,"context_line":"    echo -en \"\\n       generation.\""},{"line_number":21,"context_line":"    echo -en \"\\n########################################################\\n\\n\""},{"line_number":22,"context_line":"}"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"if [ -z ${1} ] ; then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"ba15a1d1_6dd0e11f","line":21,"updated":"2015-09-17 00:44:12.000000000","message":"This certainly helps, and limits the problems/corner cases we have to deal with so that\u0027s great.","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"765ac7f933cdea14aed0ab4202e9bad6c0aade5a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    echo -en \"\\nERROR: ${0} was not called from tox.\""},{"line_number":19,"context_line":"    echo -en \"\\n       Execute \u0027tox -e genconfig\u0027 for cinder.conf.sample\""},{"line_number":20,"context_line":"    echo -en \"\\n       generation.\""},{"line_number":21,"context_line":"    echo -en \"\\n########################################################\\n\\n\""},{"line_number":22,"context_line":"}"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"if [ -z ${1} ] ; then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"ba15a1d1_0bc4863d","line":21,"in_reply_to":"ba15a1d1_6dd0e11f","updated":"2015-09-17 16:44:54.000000000","message":"Yeah Walt and Sean both had problems with not running it with tox so I figured this would be a good check to add :)","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"10050ee2d26af6e247e64de300a1fe6b3de3a003","unresolved":false,"context_lines":[{"line_number":51,"context_line":"export TARGETDIR\u003d$TARGETDIR"},{"line_number":52,"context_line":"export BASEDIRESC\u003d$BASEDIRESC"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"python cinder/config/generate_cinder_opts.py"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"oslo-config-generator --config-file\u003dcinder/config/cinder-config-generator.conf"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-sh","patch_set":11,"id":"ba15a1d1_6dcc616a","line":54,"updated":"2015-09-17 00:44:12.000000000","message":"Would be useful to pass in dir info to the generate_cinder_opts.py call here\n\nAlso, you need something here to know if it failed or not, I produced several cases where this fails silently but we report \"ok\" and go about our merry way.\n\nJust a simple ec check would probably do the trick here:\n\n python cinder/config/generate_cinder_opts.py $BASEDIR\n rc\u003d$?\n if [[ $rc !\u003d 0 ]];\n then\n   echo \"generate_cinder_opts.py failed!\"\n   exit $rc\n fi","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"765ac7f933cdea14aed0ab4202e9bad6c0aade5a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"export TARGETDIR\u003d$TARGETDIR"},{"line_number":52,"context_line":"export BASEDIRESC\u003d$BASEDIRESC"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"python cinder/config/generate_cinder_opts.py"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"oslo-config-generator --config-file\u003dcinder/config/cinder-config-generator.conf"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-sh","patch_set":11,"id":"ba15a1d1_26b41f33","line":54,"in_reply_to":"ba15a1d1_6dcc616a","updated":"2015-09-17 16:44:54.000000000","message":"The directory info is being passed into generate_cinder_opts.py, but not as arguments. The target and base directories are being set as environmental variables here in generate_sample.sh (lines 51-52) and referenced and set to variables in generate_cinder_opts.py (lines 26-27 ) so that they can be used in the grep statement, but more importantly they are being verified before they even get set as environmental variables(lines 34-46) so generate_cinder_opts.py shouldn\u0027t die because of incorrect base and target directories. And in the case that generate_cinder_opts.py fails there is now a check (lines 56-63). I figured this approach would be fine since there would be no reason anyone would run generate_cinder_opts.py by hand since all that file does is create the opts.py file and not the cinder.sample.conf file that gets generated by generate_sample.sh.","commit_id":"dcef3b5916b8ed109242575d5d85524c2615bb10"}]}
