)]}'
{"HACKING.rst":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"781d94b02bf12934ca81624aadca24846ecbeb7d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  assertIn/NotIn(A, B)"},{"line_number":52,"context_line":"- [N339] Check common raise_feature_not_supported() is used for v2.1 HTTPNotImplemented response."},{"line_number":53,"context_line":"- [N340] Check nova.utils.spawn() is used instead of greenthread.spawn()"},{"line_number":54,"context_line":"- [N341] Check the argument order of assertEqual(A, B)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Creating Unit Tests"},{"line_number":57,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9a1a9d01_9ba7860a","line":54,"updated":"2015-09-30 10:08:14.000000000","message":"Nit: nice to add (expected, observed) into the arg names I think","commit_id":"574c2282f34742ab625a72201df15026849d2a48"}],"nova/hacking/checks.py":[{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"0ffa9621138127604a768221c5e6c01bbe9cc48f","unresolved":false,"context_lines":[{"line_number":542,"context_line":"    N341"},{"line_number":543,"context_line":"    \"\"\""},{"line_number":544,"context_line":"    # NOTE: We need to add path to this white_list for each patch."},{"line_number":545,"context_line":"    # In the future, this while_list should be removed and the check"},{"line_number":546,"context_line":"    # should work for all files."},{"line_number":547,"context_line":"    white_list \u003d [\u0027nova/tests/unit/virt/hyperv\u0027]"},{"line_number":548,"context_line":"    for path in white_list:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_7c4ed6c2","line":545,"updated":"2015-09-25 04:53:31.000000000","message":"typo while_list","commit_id":"2a7aafab59c75f7a9064b3fb591f3be79b0f2683"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"30f239356cda39a77c6bb61633b91e4a772dd4b9","unresolved":false,"context_lines":[{"line_number":542,"context_line":"    N341"},{"line_number":543,"context_line":"    \"\"\""},{"line_number":544,"context_line":"    # NOTE: We need to add path to this white_list for each patch."},{"line_number":545,"context_line":"    # In the future, this while_list should be removed and the check"},{"line_number":546,"context_line":"    # should work for all files."},{"line_number":547,"context_line":"    white_list \u003d [\u0027nova/tests/unit/virt/hyperv\u0027]"},{"line_number":548,"context_line":"    for path in white_list:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_971705ed","line":545,"in_reply_to":"9a1a9d01_7c4ed6c2","updated":"2015-09-25 05:29:45.000000000","message":"Nice catch, thanks :)","commit_id":"2a7aafab59c75f7a9064b3fb591f3be79b0f2683"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"63eda0a37e5cf14157b2e7debcc42ee43cae9158","unresolved":false,"context_lines":[{"line_number":544,"context_line":"    # NOTE: We need to add path to this white_list for each patch."},{"line_number":545,"context_line":"    # In the future, this white_list should be removed and the check"},{"line_number":546,"context_line":"    # should work for all files."},{"line_number":547,"context_line":"    white_list \u003d [\u0027nova/tests/unit/virt/hyperv\u0027]"},{"line_number":548,"context_line":"    for path in white_list:"},{"line_number":549,"context_line":"        if path not in filename:"},{"line_number":550,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_e2aa3c70","line":547,"updated":"2015-09-25 09:32:34.000000000","message":"I wonder if we can do this in a more efficient way, and split it out of this test somehow?","commit_id":"dd240b3f408681b46b3de20cb51b88e136275e26"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9043ee58c511b2b14a1f68f75056d5d1518f31f6","unresolved":false,"context_lines":[{"line_number":544,"context_line":"    # NOTE: We need to add path to this white_list for each patch."},{"line_number":545,"context_line":"    # In the future, this white_list should be removed and the check"},{"line_number":546,"context_line":"    # should work for all files."},{"line_number":547,"context_line":"    white_list \u003d [\u0027nova/tests/unit/virt/hyperv\u0027]"},{"line_number":548,"context_line":"    for path in white_list:"},{"line_number":549,"context_line":"        if path not in filename:"},{"line_number":550,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_4073b215","line":547,"in_reply_to":"9a1a9d01_d003390e","updated":"2015-09-28 00:11:53.000000000","message":"I will try this as black_list for blocking a new file which contains this kind of problem.","commit_id":"dd240b3f408681b46b3de20cb51b88e136275e26"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"156d3bb0cdeb46ffbee2a0170f6c4773b38ed63c","unresolved":false,"context_lines":[{"line_number":544,"context_line":"    # NOTE: We need to add path to this white_list for each patch."},{"line_number":545,"context_line":"    # In the future, this white_list should be removed and the check"},{"line_number":546,"context_line":"    # should work for all files."},{"line_number":547,"context_line":"    white_list \u003d [\u0027nova/tests/unit/virt/hyperv\u0027]"},{"line_number":548,"context_line":"    for path in white_list:"},{"line_number":549,"context_line":"        if path not in filename:"},{"line_number":550,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_d003390e","line":547,"in_reply_to":"9a1a9d01_e2aa3c70","updated":"2015-09-25 13:15:44.000000000","message":"Seems efficient enough and I like having the whitelist very narrow in scope (IE just this one test).","commit_id":"dd240b3f408681b46b3de20cb51b88e136275e26"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"63eda0a37e5cf14157b2e7debcc42ee43cae9158","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        if path not in filename:"},{"line_number":550,"context_line":"            return"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    if asse_equal_integer_order_re.match(logical_line):"},{"line_number":553,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""},{"line_number":554,"context_line":"               \"be (expected, observed)\")"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_a2bbe4c3","line":552,"updated":"2015-09-25 09:32:34.000000000","message":"its tempting to check for both strings and integers in here.","commit_id":"dd240b3f408681b46b3de20cb51b88e136275e26"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9043ee58c511b2b14a1f68f75056d5d1518f31f6","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        if path not in filename:"},{"line_number":550,"context_line":"            return"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    if asse_equal_integer_order_re.match(logical_line):"},{"line_number":553,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""},{"line_number":554,"context_line":"               \"be (expected, observed)\")"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_2078fef1","line":552,"in_reply_to":"9a1a9d01_0b3f44b5","updated":"2015-09-28 00:11:53.000000000","message":"Thanks Alexis, your advice works fine :-)","commit_id":"dd240b3f408681b46b3de20cb51b88e136275e26"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"156d3bb0cdeb46ffbee2a0170f6c4773b38ed63c","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        if path not in filename:"},{"line_number":550,"context_line":"            return"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    if asse_equal_integer_order_re.match(logical_line):"},{"line_number":553,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""},{"line_number":554,"context_line":"               \"be (expected, observed)\")"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_0b3f44b5","line":552,"in_reply_to":"9a1a9d01_a2bbe4c3","updated":"2015-09-25 13:15:44.000000000","message":"+1, maybe add:\n\n  (.)*assertEqual\\(.*?, [\u0027\"].*[\u0027\"]\\)$\n\nDon\u0027t need to ensure the start and end quotes match as if they don\u0027t, it won\u0027t be valid Python.","commit_id":"dd240b3f408681b46b3de20cb51b88e136275e26"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d163f32571ce4b5f636d4c7cc911d0f0381a6c45","unresolved":false,"context_lines":[{"line_number":58,"context_line":"asse_equal_start_with_none_re \u003d re.compile("},{"line_number":59,"context_line":"                           r\"assertEqual\\(None,\")"},{"line_number":60,"context_line":"asse_equal_int_order_re \u003d re.compile(r\"(.)*assertEqual\\(.*?, [0-9]+\\)$\")"},{"line_number":61,"context_line":"asse_equal_str_order_re \u003d re.compile(r\"(.)*assertEqual\\(.*?, [\u0027\\\"].*[\u0027\\\"]\\)$\")"},{"line_number":62,"context_line":"# NOTE(snikitin): Next two regexes weren\u0027t united to one for more readability."},{"line_number":63,"context_line":"#                 asse_true_false_with_in_or_not_in regex checks"},{"line_number":64,"context_line":"#                 assertTrue/False(A in B) cases where B argument has no spaces"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_ef30a5a0","line":61,"updated":"2015-09-28 11:03:54.000000000","message":"At least it\u0027s checks we can do yes.","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"15eb4bddacc9f822a9fe651dba7e157b32be7dd7","unresolved":false,"context_lines":[{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    N341"},{"line_number":547,"context_line":"    \"\"\""},{"line_number":548,"context_line":"    # TODO(oomichi): black_list contains invalid lines which are"},{"line_number":549,"context_line":"    # against this rule. We need to fix these lines by removing them."},{"line_number":550,"context_line":"    global black_list_n341"},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_41cc0a6a","line":548,"range":{"start_line":548,"start_character":49,"end_line":548,"end_character":54},"updated":"2015-09-28 10:23:18.000000000","message":"nit: \"This contains the names of files which breach this rule. When we have fixed all these, we can remove this code.\"","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"15eb4bddacc9f822a9fe651dba7e157b32be7dd7","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_a19de65a","line":555,"range":{"start_line":555,"start_character":45,"end_line":555,"end_character":66},"updated":"2015-09-28 10:23:18.000000000","message":"I don\u0027t see an advantage in splitting this into multiple files","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"aced174a46e30f661078701db6fe7d4873a467d4","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_56bcaadb","line":555,"in_reply_to":"9a1a9d01_3a09f431","updated":"2015-09-28 23:45:57.000000000","message":"I don\u0027t think it is good that many patches are necessary to be depended.\n\nThere are 1600+ lines which are against this rule, and invalid files are 160 files.\nSo if each patch fixes 10 files, we need 16 patches. I don\u0027t think it is good that 16 patches need to have dependency to the other. In addition, there are tree developers are working for this on the gerrit. So it is nice to separate these works for efficient work process.","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"edc0b16a8e6ce91e8c8ddbee9cc8e0ab02a8ff66","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_3a09f431","line":555,"in_reply_to":"9a1a9d01_4ad3bf04","updated":"2015-09-28 13:25:55.000000000","message":"We won\u0027t get a lot of conflicts unless people merge changes next to each other","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0ca36d0e1151650246d9afe034db65ff38432071","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_4ad3bf04","line":555,"in_reply_to":"9a1a9d01_8f36c950","updated":"2015-09-28 11:29:16.000000000","message":"Please see my comment at ps5, I write the reason.","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d163f32571ce4b5f636d4c7cc911d0f0381a6c45","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_8f36c950","line":555,"in_reply_to":"9a1a9d01_a19de65a","updated":"2015-09-28 11:03:54.000000000","message":"Yes I do no see too. Usually we split by modules so when somebody want to clean a part he will have to clean all of the module. I think it\u0027s better than referring all files in a plain text file.\n\n  nova/tests/unit/objects/*\n  nova/tests/unit/compute/*\n  nova/tests/unit/virt/libvirt/*\n  nova/tests/unit/virt/vmware/*\n  nova/tests/unit/virt/*\n  nova/tests/unit/cells/*\n  ...","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"15eb4bddacc9f822a9fe651dba7e157b32be7dd7","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            _ret_list.append(black_file.rstrip())"},{"line_number":562,"context_line":"        return _ret_list"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    if black_list_n341 \u003d\u003d []:"},{"line_number":565,"context_line":"        black_list_n341 \u003d _read_black_list()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    for black_file in black_list_n341:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_416f2a2b","line":564,"updated":"2015-09-28 10:23:18.000000000","message":"This seems a bit dangerous, why not use None as the initial value?","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"aced174a46e30f661078701db6fe7d4873a467d4","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            _ret_list.append(black_file.rstrip())"},{"line_number":562,"context_line":"        return _ret_list"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    if black_list_n341 \u003d\u003d []:"},{"line_number":565,"context_line":"        black_list_n341 \u003d _read_black_list()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    for black_file in black_list_n341:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_96c6c266","line":564,"in_reply_to":"9a1a9d01_416f2a2b","updated":"2015-09-28 23:45:57.000000000","message":"good point, will apply it.\nThanks :)","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"15eb4bddacc9f822a9fe651dba7e157b32be7dd7","unresolved":false,"context_lines":[{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    for black_file in black_list_n341:"},{"line_number":568,"context_line":"        if filename \u003d\u003d black_file:"},{"line_number":569,"context_line":"            return"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    if asse_equal_int_order_re.match(logical_line):"},{"line_number":572,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_41564a5d","line":569,"updated":"2015-09-28 10:23:18.000000000","message":"Is this simpler?\n\n  if filename in black_list_n341:\n    return","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"aced174a46e30f661078701db6fe7d4873a467d4","unresolved":false,"context_lines":[{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    for black_file in black_list_n341:"},{"line_number":568,"context_line":"        if filename \u003d\u003d black_file:"},{"line_number":569,"context_line":"            return"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    if asse_equal_int_order_re.match(logical_line):"},{"line_number":572,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_36b7b6f6","line":569,"in_reply_to":"9a1a9d01_41564a5d","updated":"2015-09-28 23:45:57.000000000","message":"here also is nice point.","commit_id":"c252eede14687575fcc7623e78da796b921e01f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b4bccedee768cde88299e89e5a6f33bee188b234","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_2270c60a","line":554,"updated":"2015-09-29 09:38:32.000000000","message":"Micro Nit: I would move this to just before the final loop myself. And I am not sure why you add _ for these, that seems like over kill really.","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9475e96a4bb5353db0dc5131b113185e18b68091","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_ed8b9f66","line":554,"in_reply_to":"9a1a9d01_2270c60a","updated":"2015-09-29 09:59:57.000000000","message":"Done","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b4bccedee768cde88299e89e5a6f33bee188b234","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_a214d69f","line":555,"updated":"2015-09-29 09:38:32.000000000","message":"Micro Nit: maybe exclude list is better?","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9475e96a4bb5353db0dc5131b113185e18b68091","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def _read_black_list():"},{"line_number":553,"context_line":"        _list \u003d []"},{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_8d91c349","line":555,"in_reply_to":"9a1a9d01_a214d69f","updated":"2015-09-29 09:59:57.000000000","message":"Don\u0027t you feel black list seem more wronger?","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b4bccedee768cde88299e89e5a6f33bee188b234","unresolved":false,"context_lines":[{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"},{"line_number":559,"context_line":"            f.close()"},{"line_number":560,"context_line":"        for black_file in _list:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_a2d5b61c","line":557,"updated":"2015-09-29 09:38:32.000000000","message":"Nit: I would prefer the use of \"with open(\u0027workfile\u0027, \u0027r\u0027) as f:\"\n\njust to avoid any problems.","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9475e96a4bb5353db0dc5131b113185e18b68091","unresolved":false,"context_lines":[{"line_number":554,"context_line":"        _ret_list \u003d []"},{"line_number":555,"context_line":"        list_files \u003d glob.glob(\u0027nova/hacking/black_list_N341_*.txt\u0027)"},{"line_number":556,"context_line":"        for list_file in list_files:"},{"line_number":557,"context_line":"            f \u003d open(list_file)"},{"line_number":558,"context_line":"            _list.extend(f.readlines())"},{"line_number":559,"context_line":"            f.close()"},{"line_number":560,"context_line":"        for black_file in _list:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_ed2f1f86","line":557,"in_reply_to":"9a1a9d01_a2d5b61c","updated":"2015-09-29 09:59:57.000000000","message":"Done","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b4bccedee768cde88299e89e5a6f33bee188b234","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""},{"line_number":572,"context_line":"               \"be (expected, observed)\")"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    if asse_equal_str_order_re.match(logical_line):"},{"line_number":575,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""},{"line_number":576,"context_line":"               \"be (expected, observed)\")"},{"line_number":577,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_62b23e08","line":574,"updated":"2015-09-29 09:38:32.000000000","message":"Nit: its tempting to say that could be a single regex, but I guess this is neater.","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9475e96a4bb5353db0dc5131b113185e18b68091","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""},{"line_number":572,"context_line":"               \"be (expected, observed)\")"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    if asse_equal_str_order_re.match(logical_line):"},{"line_number":575,"context_line":"        yield (0, \"N341: The argument order of assertEqual should \""},{"line_number":576,"context_line":"               \"be (expected, observed)\")"},{"line_number":577,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_6d854f05","line":574,"in_reply_to":"9a1a9d01_62b23e08","updated":"2015-09-29 09:59:57.000000000","message":"Done","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"8e4d2513f5f9aa4b7b54e9890c0cece7de61ce76","unresolved":false,"context_lines":[{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    N341"},{"line_number":547,"context_line":"    \"\"\""},{"line_number":548,"context_line":"    # TODO(oomichi): black_list contains invalid lines which are"},{"line_number":549,"context_line":"    # against this rule. We need to fix these lines by removing them."},{"line_number":550,"context_line":"    global black_list_n341"},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_8801b107","line":548,"range":{"start_line":548,"start_character":49,"end_line":548,"end_character":54},"updated":"2015-09-29 10:15:12.000000000","message":"this is not right, the black_list contains filenames. Please use my wording.","commit_id":"055fe7179bbe38d78caea48d7182012afb537877"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"42790cc950755de4578c5ac37ac4c277c2502f4f","unresolved":false,"context_lines":[{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    N341"},{"line_number":547,"context_line":"    \"\"\""},{"line_number":548,"context_line":"    # TODO(oomichi): black_list contains invalid lines which are"},{"line_number":549,"context_line":"    # against this rule. We need to fix these lines by removing them."},{"line_number":550,"context_line":"    global black_list_n341"},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_b64f2f6a","line":548,"in_reply_to":"9a1a9d01_8801b107","updated":"2015-09-29 12:34:07.000000000","message":"Oops, thanks again.","commit_id":"055fe7179bbe38d78caea48d7182012afb537877"}],"nova/tests/unit/test_hacking.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b4bccedee768cde88299e89e5a6f33bee188b234","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        code \u003d \u0027self.assertEqual(block_size, \"abc\")\u0027"},{"line_number":572,"context_line":"        self._assert_has_errors(code, checks.assert_equal_order,"},{"line_number":573,"context_line":"                                expected_errors\u003derrors, filename\u003dfilename)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_42a37a9d","line":573,"updated":"2015-09-29 09:38:32.000000000","message":"Nit: maybe a test for int and string that you get no errors in the correct place, but this seems like enough.","commit_id":"82997d49977f887874be07f18124d2acafff79d8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9475e96a4bb5353db0dc5131b113185e18b68091","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        code \u003d \u0027self.assertEqual(block_size, \"abc\")\u0027"},{"line_number":572,"context_line":"        self._assert_has_errors(code, checks.assert_equal_order,"},{"line_number":573,"context_line":"                                expected_errors\u003derrors, filename\u003dfilename)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_edb4ff35","line":573,"in_reply_to":"9a1a9d01_42a37a9d","updated":"2015-09-29 09:59:57.000000000","message":"Done","commit_id":"82997d49977f887874be07f18124d2acafff79d8"}]}
