)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9c7d44025ade3fd4a1871cd7d2e74cc8e08ba2cf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ib65894f0e128c599db8d3440fe5a8427e62d5782"},{"line_number":10,"context_line":"Depends-On: Ifcaaf285c8f98a1d0e8bbbc87b2f57fbce057346"},{"line_number":11,"context_line":"Implemetes: blueprint support-tag-instance-when-boot"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1f1a1f67_742d86a6","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":10},"updated":"2017-07-18 16:05:17.000000000","message":"Implements","commit_id":"06321666331c418486d5a61f8390868ff4062593"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e541436e66603a0728b7ac2d9ad5ce47d947c9a9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ib65894f0e128c599db8d3440fe5a8427e62d5782"},{"line_number":10,"context_line":"Depends-On: Ifcaaf285c8f98a1d0e8bbbc87b2f57fbce057346"},{"line_number":11,"context_line":"Implemetes: blueprint support-tag-instance-when-boot"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1f1a1f67_bc152e4b","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":10},"in_reply_to":"1f1a1f67_742d86a6","updated":"2017-07-19 06:29:45.000000000","message":"Done","commit_id":"06321666331c418486d5a61f8390868ff4062593"}],"novaclient/tests/unit/v2/test_servers.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"465721d8df2ba5e89c5c97bec94a77298750b1fb","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"            nics\u003dself._get_server_create_default_nics(),"},{"line_number":1501,"context_line":"            tags\u003d[\u0027tag1\u0027, \u0027tag2\u0027]"},{"line_number":1502,"context_line":"        )"},{"line_number":1503,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/servers\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_ff22a651","line":1503,"range":{"start_line":1503,"start_character":45,"end_line":1503,"end_character":46},"updated":"2017-07-18 04:38:16.000000000","message":"The request body should also be verified.","commit_id":"6149f5aa63c30f298eaa21eaedc5917a02af6260"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"cbd2091bddcebe6a56614257f826ee97e0fde6cd","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"            nics\u003dself._get_server_create_default_nics(),"},{"line_number":1501,"context_line":"            tags\u003d[\u0027tag1\u0027, \u0027tag2\u0027]"},{"line_number":1502,"context_line":"        )"},{"line_number":1503,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/servers\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_35da7f4a","line":1503,"range":{"start_line":1503,"start_character":45,"end_line":1503,"end_character":46},"in_reply_to":"1f1a1f67_ff22a651","updated":"2017-07-18 06:15:12.000000000","message":"Done","commit_id":"6149f5aa63c30f298eaa21eaedc5917a02af6260"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b43a1b1649274fb65051d3d58b6908a09c12465","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"                           )"},{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":"    def test_create_server_with_tags_pre_252_fails(self):"},{"line_number":1519,"context_line":"        self.api_version \u003d \u00272.51\u0027"},{"line_number":1520,"context_line":"        self.assertRaises(exceptions.UnsupportedAttribute,"},{"line_number":1521,"context_line":"                          self.cs.servers.find,"},{"line_number":1522,"context_line":"                          name\u003d\"My server\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_e7489c5c","line":1519,"range":{"start_line":1519,"start_character":8,"end_line":1519,"end_character":33},"updated":"2017-07-19 17:37:07.000000000","message":"This won\u0027t work b/c it\u0027s used as a class variable in the setUp method to set the version on the client, so you just have to update the version in the client directly.","commit_id":"fbf55c15f7abc5f610cd32efc765b26e7d48beb7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f42713c5390a7f31fb1a244eaec55d4844a8b5d","unresolved":false,"context_lines":[{"line_number":1518,"context_line":"    def test_create_server_with_tags_pre_252_fails(self):"},{"line_number":1519,"context_line":"        self.api_version \u003d \u00272.51\u0027"},{"line_number":1520,"context_line":"        self.assertRaises(exceptions.UnsupportedAttribute,"},{"line_number":1521,"context_line":"                          self.cs.servers.find,"},{"line_number":1522,"context_line":"                          name\u003d\"My server\","},{"line_number":1523,"context_line":"                          image\u003d1,"},{"line_number":1524,"context_line":"                          flavor\u003d1,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_a7df440b","line":1521,"range":{"start_line":1521,"start_character":42,"end_line":1521,"end_character":46},"updated":"2017-07-19 17:50:03.000000000","message":"create","commit_id":"fbf55c15f7abc5f610cd32efc765b26e7d48beb7"}],"novaclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"465721d8df2ba5e89c5c97bec94a77298750b1fb","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"    def test_boot_with_tags_pre_v2_52(self):"},{"line_number":1088,"context_line":"        cmd \u003d (\u0027boot --flavor 1 --image %s some-server \u0027"},{"line_number":1089,"context_line":"               \u0027--tags tag1,tag2\u0027 % FAKE_UUID_1)"},{"line_number":1090,"context_line":"        self.assertRaises(exceptions.CommandError, self.run_command,"},{"line_number":1091,"context_line":"                          cmd, api_version\u003d\u00272.51\u0027)"},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"    def test_flavor_list(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_9fea92d5","line":1090,"range":{"start_line":1090,"start_character":26,"end_line":1090,"end_character":49},"updated":"2017-07-18 04:38:16.000000000","message":"It should be \u0027SystemExit\u0027.","commit_id":"6149f5aa63c30f298eaa21eaedc5917a02af6260"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"cbd2091bddcebe6a56614257f826ee97e0fde6cd","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"    def test_boot_with_tags_pre_v2_52(self):"},{"line_number":1088,"context_line":"        cmd \u003d (\u0027boot --flavor 1 --image %s some-server \u0027"},{"line_number":1089,"context_line":"               \u0027--tags tag1,tag2\u0027 % FAKE_UUID_1)"},{"line_number":1090,"context_line":"        self.assertRaises(exceptions.CommandError, self.run_command,"},{"line_number":1091,"context_line":"                          cmd, api_version\u003d\u00272.51\u0027)"},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"    def test_flavor_list(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_15df833a","line":1090,"range":{"start_line":1090,"start_character":26,"end_line":1090,"end_character":49},"in_reply_to":"1f1a1f67_9fea92d5","updated":"2017-07-18 06:15:12.000000000","message":"Done","commit_id":"6149f5aa63c30f298eaa21eaedc5917a02af6260"}],"novaclient/v2/servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9c63d8ac19fff93133ce0d771742af932df956a9","unresolved":false,"context_lines":[{"line_number":1340,"context_line":"        :param access_ip_v6: (optional extension) add alternative access ip v6"},{"line_number":1341,"context_line":"        :param description: optional description of the server (allowed since"},{"line_number":1342,"context_line":"                            microversion 2.19)"},{"line_number":1343,"context_line":"        :param tags: optional tags of the server (allowed since"},{"line_number":1344,"context_line":"                     microversion 2.52)"},{"line_number":1345,"context_line":"        \"\"\""},{"line_number":1346,"context_line":"        if not min_count:"},{"line_number":1347,"context_line":"            min_count \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_1468921a","line":1344,"range":{"start_line":1343,"start_character":21,"end_line":1344,"end_character":39},"updated":"2017-07-18 16:04:50.000000000","message":"Is this a list of strings? Or a comma-delimited list of tags in a single string? Let\u0027s be clear in the description.","commit_id":"06321666331c418486d5a61f8390868ff4062593"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e541436e66603a0728b7ac2d9ad5ce47d947c9a9","unresolved":false,"context_lines":[{"line_number":1340,"context_line":"        :param access_ip_v6: (optional extension) add alternative access ip v6"},{"line_number":1341,"context_line":"        :param description: optional description of the server (allowed since"},{"line_number":1342,"context_line":"                            microversion 2.19)"},{"line_number":1343,"context_line":"        :param tags: optional tags of the server (allowed since"},{"line_number":1344,"context_line":"                     microversion 2.52)"},{"line_number":1345,"context_line":"        \"\"\""},{"line_number":1346,"context_line":"        if not min_count:"},{"line_number":1347,"context_line":"            min_count \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_7f39c8d4","line":1344,"range":{"start_line":1343,"start_character":21,"end_line":1344,"end_character":39},"in_reply_to":"1f1a1f67_1468921a","updated":"2017-07-19 06:29:45.000000000","message":"Done","commit_id":"06321666331c418486d5a61f8390868ff4062593"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"082ebe1e241e481fd5d3719baa4d7de257f922e5","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"                                         \"2.32\")"},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"        boot_tags_microversion \u003d api_versions.APIVersion(\"2.52\")"},{"line_number":1378,"context_line":"        if \"tags\" in kwargs and self.api_version \u003c boot_tags_microversion:"},{"line_number":1379,"context_line":"            raise exceptions.UnsupportedAttribute(\"tags\", \"2.52\")"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"        boot_kwargs \u003d dict("},{"line_number":1382,"context_line":"            meta\u003dmeta, files\u003dfiles, userdata\u003duserdata,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_fff16f02","line":1379,"range":{"start_line":1378,"start_character":8,"end_line":1379,"end_character":65},"updated":"2017-07-18 16:07:40.000000000","message":"We should have a unit test for this case.","commit_id":"06321666331c418486d5a61f8390868ff4062593"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e541436e66603a0728b7ac2d9ad5ce47d947c9a9","unresolved":false,"context_lines":[{"line_number":1375,"context_line":"                                         \"2.32\")"},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"        boot_tags_microversion \u003d api_versions.APIVersion(\"2.52\")"},{"line_number":1378,"context_line":"        if \"tags\" in kwargs and self.api_version \u003c boot_tags_microversion:"},{"line_number":1379,"context_line":"            raise exceptions.UnsupportedAttribute(\"tags\", \"2.52\")"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"        boot_kwargs \u003d dict("},{"line_number":1382,"context_line":"            meta\u003dmeta, files\u003dfiles, userdata\u003duserdata,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_9f3ee4be","line":1379,"range":{"start_line":1378,"start_character":8,"end_line":1379,"end_character":65},"in_reply_to":"1f1a1f67_fff16f02","updated":"2017-07-19 06:29:45.000000000","message":"Done","commit_id":"06321666331c418486d5a61f8390868ff4062593"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b43a1b1649274fb65051d3d58b6908a09c12465","unresolved":false,"context_lines":[{"line_number":1340,"context_line":"        :param access_ip_v6: (optional extension) add alternative access ip v6"},{"line_number":1341,"context_line":"        :param description: optional description of the server (allowed since"},{"line_number":1342,"context_line":"                            microversion 2.19)"},{"line_number":1343,"context_line":"        :param tags: (optional extension) A list of string to be added to the"},{"line_number":1344,"context_line":"                     server as tags (allowed since microversion 2.52)"},{"line_number":1345,"context_line":"        \"\"\""},{"line_number":1346,"context_line":"        if not min_count:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_c72ec08a","line":1343,"range":{"start_line":1343,"start_character":21,"end_line":1343,"end_character":41},"updated":"2017-07-19 17:37:07.000000000","message":"This isn\u0027t an optional extension in the sense of v2.0 API extensions, so let\u0027s remove that.","commit_id":"fbf55c15f7abc5f610cd32efc765b26e7d48beb7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b43a1b1649274fb65051d3d58b6908a09c12465","unresolved":false,"context_lines":[{"line_number":1340,"context_line":"        :param access_ip_v6: (optional extension) add alternative access ip v6"},{"line_number":1341,"context_line":"        :param description: optional description of the server (allowed since"},{"line_number":1342,"context_line":"                            microversion 2.19)"},{"line_number":1343,"context_line":"        :param tags: (optional extension) A list of string to be added to the"},{"line_number":1344,"context_line":"                     server as tags (allowed since microversion 2.52)"},{"line_number":1345,"context_line":"        \"\"\""},{"line_number":1346,"context_line":"        if not min_count:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_a778648f","line":1343,"range":{"start_line":1343,"start_character":52,"end_line":1343,"end_character":58},"updated":"2017-07-19 17:37:07.000000000","message":"strings","commit_id":"fbf55c15f7abc5f610cd32efc765b26e7d48beb7"}],"novaclient/v2/shell.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9c63d8ac19fff93133ce0d771742af932df956a9","unresolved":false,"context_lines":[{"line_number":530,"context_line":"    if \u0027description\u0027 in args:"},{"line_number":531,"context_line":"        boot_kwargs[\"description\"] \u003d args.description"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    if \u0027tags\u0027 in args:"},{"line_number":534,"context_line":"        boot_kwargs[\"tags\"] \u003d args.tags.split(\u0027,\u0027)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    return boot_args, boot_kwargs"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_f46bd6ed","line":533,"range":{"start_line":533,"start_character":4,"end_line":533,"end_character":22},"updated":"2017-07-18 16:04:50.000000000","message":"This should be:\n\nif \u0027tags\u0027 in args and args.tags:\n\nBecause it\u0027s defaulting to None and resulting in:\n\nERROR (AttributeError): \u0027NoneType\u0027 object has no attribute \u0027split\u0027\n\nWe should have a unit test for the shell that creates a server at 2.52 w/o tags to make sure this is handled properly.","commit_id":"06321666331c418486d5a61f8390868ff4062593"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e541436e66603a0728b7ac2d9ad5ce47d947c9a9","unresolved":false,"context_lines":[{"line_number":530,"context_line":"    if \u0027description\u0027 in args:"},{"line_number":531,"context_line":"        boot_kwargs[\"description\"] \u003d args.description"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    if \u0027tags\u0027 in args:"},{"line_number":534,"context_line":"        boot_kwargs[\"tags\"] \u003d args.tags.split(\u0027,\u0027)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    return boot_args, boot_kwargs"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_3f2fd088","line":533,"range":{"start_line":533,"start_character":4,"end_line":533,"end_character":22},"in_reply_to":"1f1a1f67_f46bd6ed","updated":"2017-07-19 06:29:45.000000000","message":"Done","commit_id":"06321666331c418486d5a61f8390868ff4062593"}]}
