)]}'
{"HACKING.rst":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"ce6ecdd4f871665d89f2b1e44ce09ae644b3a68e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"- [N340] Check nova.utils.spawn() is used instead of greenthread.spawn() and eventlet.spawn()"},{"line_number":54,"context_line":"- [N341] contextlib.nested is deprecated"},{"line_number":55,"context_line":"- [N342] Config options should be in the central location ``nova/conf/``"},{"line_number":56,"context_line":"- [N343] Provide enough help text for config options"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Creating Unit Tests"},{"line_number":59,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"9a68dd71_22aa91d5","line":56,"updated":"2016-01-20 18:08:29.000000000","message":"Note that change I824a4a4b0f3bc18a16d5df50bd66cc626888ebaf, which is approved, consumes this hacking id number. So you\u0027ll need to tweak that.","commit_id":"fad0c03b67b64b9e10938db8c2a3cd372431c9b0"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"fd42fc3069bfd4483279abae075b2ea651d14833","unresolved":false,"context_lines":[{"line_number":53,"context_line":"- [N340] Check nova.utils.spawn() is used instead of greenthread.spawn() and eventlet.spawn()"},{"line_number":54,"context_line":"- [N341] contextlib.nested is deprecated"},{"line_number":55,"context_line":"- [N342] Config options should be in the central location ``nova/conf/``"},{"line_number":56,"context_line":"- [N343] Provide enough help text for config options"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Creating Unit Tests"},{"line_number":59,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"9a68dd71_0ebae66e","line":56,"in_reply_to":"9a68dd71_22aa91d5","updated":"2016-01-21 15:58:55.000000000","message":"Done","commit_id":"fad0c03b67b64b9e10938db8c2a3cd372431c9b0"}],"nova/hacking/checks.py":[{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"ccb0b1d559ff3551508cf527e055576adec52927","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"def cfg_help_with_enough_text(logical_line, tokens):"},{"line_number":554,"context_line":"    # (Markus Zoeller; markus_z): The low number of chars allows to introduce"},{"line_number":555,"context_line":"    # that check without breaking the existing config options help texts."},{"line_number":556,"context_line":"    # As soon as these get expanded, this number can be increased."},{"line_number":557,"context_line":"    min_char_count \u003d 10"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_d1ce602c","line":554,"updated":"2015-11-11 12:28:58.000000000","message":"# TODO (markus_z):","commit_id":"191f73ff9a922cc5df49caa04db4363ec39818f2"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e11ae25941861bb8133e65a8d8f3735fc8d47a56","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"def cfg_help_with_enough_text(logical_line, tokens):"},{"line_number":554,"context_line":"    # (Markus Zoeller; markus_z): The low number of chars allows to introduce"},{"line_number":555,"context_line":"    # that check without breaking the existing config options help texts."},{"line_number":556,"context_line":"    # As soon as these get expanded, this number can be increased."},{"line_number":557,"context_line":"    min_char_count \u003d 10"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_0c392ba4","line":554,"in_reply_to":"da85f559_d1ce602c","updated":"2015-11-11 12:47:52.000000000","message":"The next patch set will contain that.","commit_id":"191f73ff9a922cc5df49caa04db4363ec39818f2"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"ccb0b1d559ff3551508cf527e055576adec52927","unresolved":false,"context_lines":[{"line_number":554,"context_line":"    # (Markus Zoeller; markus_z): The low number of chars allows to introduce"},{"line_number":555,"context_line":"    # that check without breaking the existing config options help texts."},{"line_number":556,"context_line":"    # As soon as these get expanded, this number can be increased."},{"line_number":557,"context_line":"    min_char_count \u003d 10"},{"line_number":558,"context_line":"    msg \u003d \"N342: Provide enough help text for config options\""},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    if cfg_re.match(logical_line):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_2696903f","line":557,"updated":"2015-11-11 12:28:58.000000000","message":"what is the magic number 10? Safe min size for NXXX msg ?","commit_id":"191f73ff9a922cc5df49caa04db4363ec39818f2"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e11ae25941861bb8133e65a8d8f3735fc8d47a56","unresolved":false,"context_lines":[{"line_number":554,"context_line":"    # (Markus Zoeller; markus_z): The low number of chars allows to introduce"},{"line_number":555,"context_line":"    # that check without breaking the existing config options help texts."},{"line_number":556,"context_line":"    # As soon as these get expanded, this number can be increased."},{"line_number":557,"context_line":"    min_char_count \u003d 10"},{"line_number":558,"context_line":"    msg \u003d \"N342: Provide enough help text for config options\""},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    if cfg_re.match(logical_line):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_ac6c9f35","line":557,"in_reply_to":"da85f559_2696903f","updated":"2015-11-11 12:47:52.000000000","message":"The count of 10 chars is the *highest* number I could use to introduce this new check without breaking the gate. IOW, if I use a value of 15 for example, the gate checks will fail because we have a few config options which use fewer chars than 15 to explain their usage (for example the options \"ca_file\" and \"cert\").\n\nAs soon as the implementation of bp centralize-config-options is finished, I wanted to increase that magic number to a higher (to be defined) value.\n\nThis check is an attempt to programmatically check a part of the review guidelines http://docs.openstack.org/developer/nova/code-review.html#config-options","commit_id":"191f73ff9a922cc5df49caa04db4363ec39818f2"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"035194cb90172da9e0007747b4f3f191085415db","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    # defined) value."},{"line_number":588,"context_line":"    # This check is an attempt to programmatically check a part of the review"},{"line_number":589,"context_line":"    #  guidelines http://docs.openstack.org/developer/nova/code-review.html"},{"line_number":590,"context_line":"    min_char_count \u003d 10"},{"line_number":591,"context_line":"    msg \u003d (\"N343: A config option is a public interface to the cloud admins \""},{"line_number":592,"context_line":"           \"and should be properly documented. A part of that is to provide \""},{"line_number":593,"context_line":"           \"enough help text to describe this option. Use at least %s chars \""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_e6a7364e","line":590,"updated":"2015-12-02 17:02:20.000000000","message":"Could we move this constant into the global scope, toward the top of this file, so it\u0027s easier to find?  For that matter, is there any way we can add an option to be specified in the [pep8] section of tox.ini to specify this value?","commit_id":"fad0c03b67b64b9e10938db8c2a3cd372431c9b0"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"fd42fc3069bfd4483279abae075b2ea651d14833","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    # defined) value."},{"line_number":588,"context_line":"    # This check is an attempt to programmatically check a part of the review"},{"line_number":589,"context_line":"    #  guidelines http://docs.openstack.org/developer/nova/code-review.html"},{"line_number":590,"context_line":"    min_char_count \u003d 10"},{"line_number":591,"context_line":"    msg \u003d (\"N343: A config option is a public interface to the cloud admins \""},{"line_number":592,"context_line":"           \"and should be properly documented. A part of that is to provide \""},{"line_number":593,"context_line":"           \"enough help text to describe this option. Use at least %s chars \""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a68dd71_445e7a13","line":590,"in_reply_to":"9a8ffd7b_e6a7364e","updated":"2016-01-21 15:58:55.000000000","message":"The next patch set will have that constant on top of this file.\n\nI didn\u0027t find a way to pass a custom argument to the \"checks\" module without flake8 complaining. I tried something like:\n\n    tox -e pep8 -- foo\u003d10\n\nwhich I could read in \"checks.py\" with ``sys.argv`` but flake8 interpreted it also as a regex and complained that it cannot find anything with it:\n\n    foo\u003d10:1:1: E902 IOError: [Errno 2] \n    No such file or directory: \u0027foo\u003d10\u0027\n\nIf you have an advice for me how to do that properly, I can do that in a new patch set.","commit_id":"fad0c03b67b64b9e10938db8c2a3cd372431c9b0"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"42aa51693fbbdd13bce1d832c0b034749211cd23","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        yield(0, msg)"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"def cfg_help_with_enough_text(logical_line, tokens):"},{"line_number":618,"context_line":"    # TODO(markus_z): The count of 10 chars is the *highest* number I could"},{"line_number":619,"context_line":"    # use to introduce this new check without breaking the gate. IOW, if I"},{"line_number":620,"context_line":"    # use a value of 15 for example, the gate checks will fail because we have"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a68dd71_c4cf3354","line":617,"updated":"2016-01-25 17:18:03.000000000","message":"Wait, doesn\u0027t this need to be registered in factory() for the check to be used?","commit_id":"e3e36adafa5870a7c794daa34f0887a730c57fa0"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"18f8ebfc9ee2066990eb3e621b2c1ac568b4c9f0","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        yield(0, msg)"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"def cfg_help_with_enough_text(logical_line, tokens):"},{"line_number":618,"context_line":"    # TODO(markus_z): The count of 10 chars is the *highest* number I could"},{"line_number":619,"context_line":"    # use to introduce this new check without breaking the gate. IOW, if I"},{"line_number":620,"context_line":"    # use a value of 15 for example, the gate checks will fail because we have"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_1c5edbe9","line":617,"in_reply_to":"9a68dd71_c4cf3354","updated":"2016-02-03 09:24:54.000000000","message":"right, nice catch! I lost the line in solving the merge conflict on patch set #9. I push a new one.","commit_id":"e3e36adafa5870a7c794daa34f0887a730c57fa0"}],"nova/tests/unit/test_hacking.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"32bb132f22a36535dc4832cc4e51204e93c45d30","unresolved":false,"context_lines":[{"line_number":683,"context_line":"        code8 \u003d \"\"\""},{"line_number":684,"context_line":"        opt \u003d cfg.DeprecatedOpt(\u0027opt8\u0027)"},{"line_number":685,"context_line":"        \"\"\""},{"line_number":686,"context_line":"        self._assert_has_no_errors(code8, checks.cfg_help_with_enough_text)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_a605e47a","line":686,"updated":"2015-11-25 18:50:22.000000000","message":"What about (what will be) the most common format with triple quotes?\n\n    opt \u003d cfg.StrOpt(\"opt_triple\",\n                     help\u003d\"\"\"\n    This is some help text.\n\n    There are multiple lines.\n    \"\"\")","commit_id":"6873810e8ad8b340d14ab5c3a13dd38b85600c9c"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"7785f93f2410e06767366ee460871e8e14d1584c","unresolved":false,"context_lines":[{"line_number":683,"context_line":"        code8 \u003d \"\"\""},{"line_number":684,"context_line":"        opt \u003d cfg.DeprecatedOpt(\u0027opt8\u0027)"},{"line_number":685,"context_line":"        \"\"\""},{"line_number":686,"context_line":"        self._assert_has_no_errors(code8, checks.cfg_help_with_enough_text)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_0e1ccc68","line":686,"in_reply_to":"9a8ffd7b_a605e47a","updated":"2015-11-26 16:46:49.000000000","message":"Valid point. It passes the check, but a test with this showed me that the quotes and spaces in multiline string will be counted as well. The next patch set will contain the new test and a changed logic which strips away quotes and multiple spaces.","commit_id":"6873810e8ad8b340d14ab5c3a13dd38b85600c9c"}]}
