)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"4e0a2b69e34dbde57f43fedef21611e413cba5fb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add hacking check for config options location"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a hackign check which raises a pep8 error if a config"},{"line_number":10,"context_line":"option was found in location where it shouldn\u0027t be."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I75df3404cc6178aa179e96d75f154e389c3008af"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a8ffd7b_998aff62","line":9,"updated":"2015-11-29 08:07:30.000000000","message":"s/hackign/hacking","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"fcf733d7e0b4d9716e952de3e1879e5343e4cd14","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add hacking check for config options location"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a hackign check which raises a pep8 error if a config"},{"line_number":10,"context_line":"option was found in location where it shouldn\u0027t be."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I75df3404cc6178aa179e96d75f154e389c3008af"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a8ffd7b_ee2f9aa5","line":9,"in_reply_to":"9a8ffd7b_998aff62","updated":"2015-11-30 15:37:12.000000000","message":"@Eric: If another patch set is necessary because of faults in the logic, I will fix the typo. Until then I would skip your feedback as I don\u0027t see any harm with this typo. Nevertheless, thanks for reviewing!","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"}],"nova/hacking/checks.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"3b62334eddbc466afff614ae59fc6aad7fedee2e","unresolved":false,"context_lines":[{"line_number":563,"context_line":"    # moved to the central place. To avoid that a once cleaned up place"},{"line_number":564,"context_line":"    # introduces new config options, we do a check here. This array will"},{"line_number":565,"context_line":"    # get quite huge over the time, but will be removed at the end of the"},{"line_number":566,"context_line":"    # reorganization."},{"line_number":567,"context_line":"    cleaned_up \u003d [\"./nova/console/serial.py\","},{"line_number":568,"context_line":"                  \"./nova/cmd/serialproxy.py\"]"},{"line_number":569,"context_line":"    if filename in cleaned_up and cfg_opt_re.match(logical_line):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_66105c02","line":566,"updated":"2015-11-25 18:45:02.000000000","message":"I don\u0027t think that this is a great approach. It will require each config move to update this list with every changed file. My scheduler patch alone changed 19 files!","commit_id":"a87e2acf94e0a3315fdae94d586f199f35b04958"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"656af2933fbc1257e5dd8adb59fa231af27f1595","unresolved":false,"context_lines":[{"line_number":563,"context_line":"    # moved to the central place. To avoid that a once cleaned up place"},{"line_number":564,"context_line":"    # introduces new config options, we do a check here. This array will"},{"line_number":565,"context_line":"    # get quite huge over the time, but will be removed at the end of the"},{"line_number":566,"context_line":"    # reorganization."},{"line_number":567,"context_line":"    cleaned_up \u003d [\"./nova/console/serial.py\","},{"line_number":568,"context_line":"                  \"./nova/cmd/serialproxy.py\"]"},{"line_number":569,"context_line":"    if filename in cleaned_up and cfg_opt_re.match(logical_line):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_4e989478","line":566,"in_reply_to":"9a8ffd7b_66105c02","updated":"2015-11-26 16:54:39.000000000","message":"Do you think using a match for folders would be better (e.g. \"./nova/scheduler/\") or is the whole idea too paranoid?","commit_id":"a87e2acf94e0a3315fdae94d586f199f35b04958"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"3b62334eddbc466afff614ae59fc6aad7fedee2e","unresolved":false,"context_lines":[{"line_number":565,"context_line":"    # get quite huge over the time, but will be removed at the end of the"},{"line_number":566,"context_line":"    # reorganization."},{"line_number":567,"context_line":"    cleaned_up \u003d [\"./nova/console/serial.py\","},{"line_number":568,"context_line":"                  \"./nova/cmd/serialproxy.py\"]"},{"line_number":569,"context_line":"    if filename in cleaned_up and cfg_opt_re.match(logical_line):"},{"line_number":570,"context_line":"        yield(0, msg)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_a60644cc","line":568,"updated":"2015-11-25 18:45:02.000000000","message":"Please end the last element with a comma, and put the closing bracket on the next line to minimize diffs as this list grows.","commit_id":"a87e2acf94e0a3315fdae94d586f199f35b04958"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"656af2933fbc1257e5dd8adb59fa231af27f1595","unresolved":false,"context_lines":[{"line_number":565,"context_line":"    # get quite huge over the time, but will be removed at the end of the"},{"line_number":566,"context_line":"    # reorganization."},{"line_number":567,"context_line":"    cleaned_up \u003d [\"./nova/console/serial.py\","},{"line_number":568,"context_line":"                  \"./nova/cmd/serialproxy.py\"]"},{"line_number":569,"context_line":"    if filename in cleaned_up and cfg_opt_re.match(logical_line):"},{"line_number":570,"context_line":"        yield(0, msg)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_4e23b456","line":568,"in_reply_to":"9a8ffd7b_a60644cc","updated":"2015-11-26 16:54:39.000000000","message":"Done","commit_id":"a87e2acf94e0a3315fdae94d586f199f35b04958"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"51b76502be6ad4793d34fd65b22d09658c5f6b65","unresolved":false,"context_lines":[{"line_number":560,"context_line":"    if \"nova/conf/\" in filename:"},{"line_number":561,"context_line":"        return"},{"line_number":562,"context_line":"    # TODO(markus_z) This is just temporary until all config options are"},{"line_number":563,"context_line":"    # moved to the central place. To avoid that a once cleaned up place"},{"line_number":564,"context_line":"    # introduces new config options, we do a check here. This array will"},{"line_number":565,"context_line":"    # get quite huge over the time, but will be removed at the end of the"},{"line_number":566,"context_line":"    # reorganization."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_642fb488","line":563,"updated":"2015-11-26 20:11:47.000000000","message":"I think it\u0027s the last patch of the config centerize work?\notherwise as you mentioned, it\u0027s very big ....\nguess we won\u0027t add too much config in one cycle","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"56873bdcbd09b43b2acd43ae8839d1dfa8bbede6","unresolved":false,"context_lines":[{"line_number":560,"context_line":"    if \"nova/conf/\" in filename:"},{"line_number":561,"context_line":"        return"},{"line_number":562,"context_line":"    # TODO(markus_z) This is just temporary until all config options are"},{"line_number":563,"context_line":"    # moved to the central place. To avoid that a once cleaned up place"},{"line_number":564,"context_line":"    # introduces new config options, we do a check here. This array will"},{"line_number":565,"context_line":"    # get quite huge over the time, but will be removed at the end of the"},{"line_number":566,"context_line":"    # reorganization."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_aefc3273","line":563,"in_reply_to":"9a8ffd7b_642fb488","updated":"2015-11-30 15:35:27.000000000","message":"The last patch of the work would remove the \"cleaned_up\" variable. The (unfortunately) few reviews I do, do contain sometimes new options. My intention was to ensure during the long running task that a once clean place doesn\u0027t introduce a new config option.","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"da676b8c646871f998ca396bcacad2eb19be9302","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    cleaned_up \u003d [\"nova/console/serial.py\","},{"line_number":570,"context_line":"                  \"nova/cmd/serialproxy.py\","},{"line_number":571,"context_line":"                  ]"},{"line_number":572,"context_line":"    if not any(c in filename for c in cleaned_up):"},{"line_number":573,"context_line":"        return"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    if cfg_opt_re.match(logical_line):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_9d44a71b","line":572,"updated":"2015-12-01 23:12:12.000000000","message":"Do we want the \u0027in\u0027 operation here?  Wouldn\u0027t it be better to use an \u0027\u003d\u003d\u0027 operation or maybe an .endswith()?","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"513f6133d47059041e0c93d8ffd0397df254f547","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    cleaned_up \u003d [\"nova/console/serial.py\","},{"line_number":570,"context_line":"                  \"nova/cmd/serialproxy.py\","},{"line_number":571,"context_line":"                  ]"},{"line_number":572,"context_line":"    if not any(c in filename for c in cleaned_up):"},{"line_number":573,"context_line":"        return"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    if cfg_opt_re.match(logical_line):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_44607501","line":572,"in_reply_to":"9a8ffd7b_66fb467c","updated":"2015-12-02 18:54:21.000000000","message":"@Kevin: Hm, yeah, I should have made that clear by providing a test case which shows it when specifying a folder. When I wrote the code it was so clear to me that it didn\u0027t appear to me. I blame code blindness...","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"4b7d2751f5c3b35fa54cdb2bb5542b3ab0761ea5","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    cleaned_up \u003d [\"nova/console/serial.py\","},{"line_number":570,"context_line":"                  \"nova/cmd/serialproxy.py\","},{"line_number":571,"context_line":"                  ]"},{"line_number":572,"context_line":"    if not any(c in filename for c in cleaned_up):"},{"line_number":573,"context_line":"        return"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    if cfg_opt_re.match(logical_line):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_c271d40d","line":572,"in_reply_to":"9a8ffd7b_9d44a71b","updated":"2015-12-02 11:48:57.000000000","message":"@Kevin: I used \"in\" to allow to specify a folder, for example:\n\n    \"nova/scheduler/\"\n\nwould also perform the check on all modules within that folder. This wouldn\u0027t be possible with a \"\u003d\u003d\" or \".endswith()\" check. A \".startswith()\" on the other hand could do it. Do you have performance concerns or was my intention just confusing?","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ec28a333c551f63f637c8206d30ee1d14cc6489c","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    cleaned_up \u003d [\"nova/console/serial.py\","},{"line_number":570,"context_line":"                  \"nova/cmd/serialproxy.py\","},{"line_number":571,"context_line":"                  ]"},{"line_number":572,"context_line":"    if not any(c in filename for c in cleaned_up):"},{"line_number":573,"context_line":"        return"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    if cfg_opt_re.match(logical_line):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_66fb467c","line":572,"in_reply_to":"9a8ffd7b_c271d40d","updated":"2015-12-02 16:58:17.000000000","message":"I didn\u0027t have the idea of specifying a folder in view, as all your existing examples are specific files.  \"in\" is just conceptually problematic for me, because it would match \"nova/foo/nova/console/serial.py\" as well.  Practically speaking, however, that\u0027s probably not a problem :)\n\nFor the record, I don\u0027t have any performance concerns, since this only runs during testing.  (If it were a huge performance impact, I\u0027d object, but the difference should really only be a few cycles and disappears in the noise for this set of checks, so…)","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"}],"nova/tests/unit/test_hacking.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"51b76502be6ad4793d34fd65b22d09658c5f6b65","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        should_match(\"opt \u003d cfg.StrOpt(\u0027opt_name\u0027)\")"},{"line_number":600,"context_line":"        should_match(\"opt \u003d cfg.IntOpt(\u0027opt_name\u0027)\")"},{"line_number":601,"context_line":"        should_match(\"opt \u003d cfg.DictOpt(\u0027opt_name\u0027)\")"},{"line_number":602,"context_line":"        should_match(\"opt \u003d cfg.Opt(\u0027opt_name\u0027)\")"},{"line_number":603,"context_line":"        should_match(\"opts\u003d[cfg.Opt(\u0027opt_name\u0027)]\")"},{"line_number":604,"context_line":"        should_match(\"   cfg.Opt(\u0027opt_name\u0027)\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_a1258e09","line":601,"updated":"2015-11-26 20:11:47.000000000","message":"maybe we can add FloatOpt as well","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"56873bdcbd09b43b2acd43ae8839d1dfa8bbede6","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        should_match(\"opt \u003d cfg.StrOpt(\u0027opt_name\u0027)\")"},{"line_number":600,"context_line":"        should_match(\"opt \u003d cfg.IntOpt(\u0027opt_name\u0027)\")"},{"line_number":601,"context_line":"        should_match(\"opt \u003d cfg.DictOpt(\u0027opt_name\u0027)\")"},{"line_number":602,"context_line":"        should_match(\"opt \u003d cfg.Opt(\u0027opt_name\u0027)\")"},{"line_number":603,"context_line":"        should_match(\"opts\u003d[cfg.Opt(\u0027opt_name\u0027)]\")"},{"line_number":604,"context_line":"        should_match(\"   cfg.Opt(\u0027opt_name\u0027)\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_6edacaeb","line":601,"in_reply_to":"9a8ffd7b_a1258e09","updated":"2015-11-30 15:35:27.000000000","message":"The list doesn\u0027t need to be exhaustive. I just needed some examples to show that the regex will match independently from a specific Opt type (like StrOpt, FloatOpt, ...). IOW, it wouldn\u0027t hurt to add FloatOpt as well here, but it brings no effort.","commit_id":"adf268def3b9764b3ece37db41255b78515257c4"}]}
