)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b47b19b302521ac877b61795374ec845c360da03","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Fix \u0027em."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"WIP: Clearly these aren\u0027t working as expected, so unit tests are either"},{"line_number":22,"context_line":"missing or wrong. Fix those too."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I950d07eb533e0d43466c58e36b314aaaf8560251"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_3f2ac48f","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":32},"updated":"2019-06-07 19:27:02.000000000","message":"Actually,\n\n \u0027foo\u0027 in \u0027foo\u0027   # ...or\n \u0027foo\u0027 in (\u0027foo\u0027) # ...which is the same thing\n\nreturns True, so I suspect this is only a problem if a value is a substring of another\n\n \u0027foo\u0027 in (\u0027foobar\u0027)  # True\n \u0027foo\u0027 in (\u0027foobar\u0027,) # False\n\nwhich (I think) couldn\u0027t happen in these two cases.\n\nSo the fix is legit, but the tests are probably fine.\n\n...unless the thing on the left ends up being a mock instead of a string...","commit_id":"cfdae797ecef4ac1298e3a09d922d37ee6d1f68b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"937e644d7da5e189a0887be30c6c5866983e107a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"...which I don\u0027t think is possible in any of the scenarios found."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"NOTE: I considered writing a hacking rule for this, but it was going to"},{"line_number":40,"context_line":"be tough to hit things like:"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"nova/db/sqlalchemy/api.py:374:    return \"DELETE FROM %s WHERE %s in (SELECT T1.%s FROM (%s) as T1)\" % ("},{"line_number":43,"context_line":"nova/db/sqlalchemy/migrate_repo/versions/359_add_service_uuid.py:31:    if uuid_index_name not in (i[\u0027name\u0027] for i in indexes):"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fb8cfa7_bad482be","line":40,"range":{"start_line":40,"start_character":12,"end_line":40,"end_character":15},"updated":"2019-06-07 20:05:21.000000000","message":"miss. It would need to *ignore* these.","commit_id":"99fc9ce93444fc70e4db593c9d676fb9cafaac2e"}],"nova/tests/unit/virt/xenapi/stubs.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"771008ffd7c76472ba29580970e753f586959748","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def host_call_plugin(self, _1, _2, plugin, method, _5):"},{"line_number":64,"context_line":"        plugin \u003d plugin.rstrip(\u0027.py\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if plugin \u003d\u003d \u0027glance\u0027 and method \u003d\u003d \u0027download_vhd2\u0027:"},{"line_number":67,"context_line":"            root_uuid \u003d _make_fake_vdi()"},{"line_number":68,"context_line":"            return pickle.dumps(dict(root\u003ddict(uuid\u003droot_uuid)))"},{"line_number":69,"context_line":"        elif (plugin, method) \u003d\u003d (\u0027xenhost\u0027, \u0027iptables_config\u0027):"},{"line_number":70,"context_line":"            return fake.as_json(out\u003dself._fake_iptables_save_output,"},{"line_number":71,"context_line":"                                err\u003d\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_902d6cff","line":68,"range":{"start_line":66,"start_character":0,"end_line":68,"end_character":64},"updated":"2019-06-14 16:39:47.000000000","message":"I\u0027m going to go out on a limb here and suggest nothing is actually calling this block and it can be removed. I can\u0027t think how the statement could have been evaluating a true previously","commit_id":"8899f8b5b5dfc84e8e0481a5587d0285c6835ec5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3f2534e199a46a2286d4cbc7c3ac00dc24c3afce","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def host_call_plugin(self, _1, _2, plugin, method, _5):"},{"line_number":64,"context_line":"        plugin \u003d plugin.rstrip(\u0027.py\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if plugin \u003d\u003d \u0027glance\u0027 and method \u003d\u003d \u0027download_vhd2\u0027:"},{"line_number":67,"context_line":"            root_uuid \u003d _make_fake_vdi()"},{"line_number":68,"context_line":"            return pickle.dumps(dict(root\u003ddict(uuid\u003droot_uuid)))"},{"line_number":69,"context_line":"        elif (plugin, method) \u003d\u003d (\u0027xenhost\u0027, \u0027iptables_config\u0027):"},{"line_number":70,"context_line":"            return fake.as_json(out\u003dself._fake_iptables_save_output,"},{"line_number":71,"context_line":"                                err\u003d\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_136c26cc","line":68,"range":{"start_line":66,"start_character":0,"end_line":68,"end_character":64},"in_reply_to":"9fb8cfa7_902d6cff","updated":"2019-06-14 17:05:26.000000000","message":"I can\u0027t figure out how host_call_plugin itself is ever used anywhere, so I\u0027m trying a patch to remove it [1]. However, I am strenuously opposed to doing that or any subset thereof in this patch, which is about a hacking rule, not about cleaning up dead code.\n\n[1] https://review.opendev.org/#/c/665434/","commit_id":"8899f8b5b5dfc84e8e0481a5587d0285c6835ec5"}]}
