)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"976a3263c43ca25fbcb141cbf6d714af29068563","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zhenyu Zheng \u003czhengzhenyu@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-23 01:25:35 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for API microversion 2.13"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Nova now supports API microversion 2.13 to"},{"line_number":10,"context_line":"allow return project_id and user_id for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"1a7b0d38_b072377b","line":7,"range":{"start_line":7,"start_character":35,"end_line":7,"end_character":37},"updated":"2015-12-23 06:29:02.000000000","message":"Also , please use prefix [microversions]\nsee this change for example.\n\nI18cf23847d3b2b01f5a6ffae2ebc4bede54babce","commit_id":"b848ff184b3134e1dcc7bddb441473a17a276bb4"}],"novaclient/tests/functional/v2/legacy/test_server_groups.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2265b356ba0550948db668d29440b10c4ebd3787","unresolved":false,"context_lines":[{"line_number":18,"context_line":"class TestServerGroupClientV21(base.ClientTestBase):"},{"line_number":19,"context_line":"    \"\"\"Server groups v2.1 functional tests.\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    COMPUTE_API_VERSION \u003d \"2.1\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_2dcfc6b1","line":21,"range":{"start_line":21,"start_character":4,"end_line":21,"end_character":23},"updated":"2015-12-17 09:47:43.000000000","message":"Can you add here all list, get, show methods with check of \"legacy\" parameters are presented. And in V213 TestCase check that legacy and new parameters are presented.","commit_id":"350a11930407de41526cd1c748b7b1dab9e83d1f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ac44ca67fdcf2cf7113863a2ed8e35e495706d03","unresolved":false,"context_lines":[{"line_number":18,"context_line":"class TestServerGroupClientV21(base.ClientTestBase):"},{"line_number":19,"context_line":"    \"\"\"Server groups v2.1 functional tests.\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    COMPUTE_API_VERSION \u003d \"2.1\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_cb5f0a0d","line":21,"range":{"start_line":21,"start_character":4,"end_line":21,"end_character":23},"in_reply_to":"3a7e1126_2dcfc6b1","updated":"2015-12-17 12:44:39.000000000","message":"Alright, I will update it.","commit_id":"350a11930407de41526cd1c748b7b1dab9e83d1f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    COMPUTE_API_VERSION \u003d \"2.1\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _create_sg(self, policy):"},{"line_number":27,"context_line":"        sg_name \u003d self._raw_create_sg(policy)"},{"line_number":28,"context_line":"        self.addCleanup(self.nova, \u0027server-group-delete %s\u0027 % sg_name)"},{"line_number":29,"context_line":"        return sg_name"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_37b821e5","line":26,"range":{"start_line":26,"start_character":8,"end_line":26,"end_character":18},"updated":"2015-12-18 11:04:41.000000000","message":"_create_sg and _raw_create_sg methods can be merged.","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _raw_create_sg(self, policy):"},{"line_number":32,"context_line":"        sg_name \u003d \u0027server_group-\u0027 + str(uuid.uuid4())"},{"line_number":33,"context_line":"        self.nova(\u0027server-group-create %s %s\u0027 % (sg_name, policy))"},{"line_number":34,"context_line":"        return sg_name"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _get_sg(self, sg_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_f77379e5","line":33,"range":{"start_line":33,"start_character":13,"end_line":33,"end_character":17},"updated":"2015-12-18 11:04:41.000000000","message":"since ID of required server-group is required for show/delete, you should write something like:\n\n   output \u003d self.nova(\u0027server-group-create %s %s\u0027 % (sg_name, policy))\n   sg_id \u003d self._get_column_value_from_single_row_table(output, \"Id\")\n   self.addCleanup(...) # use here id instead of name\n   return sg_id","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.nova(\u0027server-group-create %s %s\u0027 % (sg_name, policy))"},{"line_number":34,"context_line":"        return sg_name"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _get_sg(self, sg_name):"},{"line_number":37,"context_line":"        return self.nova(\u0027server-group-get %s\u0027 % sg_name)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _list_sg(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_37afc195","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":15},"updated":"2015-12-18 11:04:41.000000000","message":"why we need a separate method for get? I prefer to remove it and call self.nova(\"\") inside testcases","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        return sg_name"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _get_sg(self, sg_name):"},{"line_number":37,"context_line":"        return self.nova(\u0027server-group-get %s\u0027 % sg_name)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _list_sg(self):"},{"line_number":40,"context_line":"        return self.nova(\u0027server-group-list\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_97e6b5b2","line":37,"range":{"start_line":37,"start_character":32,"end_line":37,"end_character":33},"updated":"2015-12-18 11:04:41.000000000","message":"server-group-get accepts only an ID","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return self.nova(\u0027server-group-get %s\u0027 % sg_name)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _list_sg(self):"},{"line_number":40,"context_line":"        return self.nova(\u0027server-group-list\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _delete_sg(self, sg_name):"},{"line_number":43,"context_line":"        self.nova(\u0027server-group-delete %s\u0027 % sg_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_57892d25","line":40,"range":{"start_line":40,"start_character":15,"end_line":40,"end_character":19},"updated":"2015-12-18 11:04:41.000000000","message":"same here","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def _list_sg(self):"},{"line_number":40,"context_line":"        return self.nova(\u0027server-group-list\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _delete_sg(self, sg_name):"},{"line_number":43,"context_line":"        self.nova(\u0027server-group-delete %s\u0027 % sg_name)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_create_sg(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_1783a505","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":18},"updated":"2015-12-18 11:04:41.000000000","message":"and here","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def test_create_sg(self):"},{"line_number":46,"context_line":"        sg_name \u003d self._create_sg(\"affinity\")"},{"line_number":47,"context_line":"        sg \u003d self._get_sg(sg_name)"},{"line_number":48,"context_line":"        self.assertIn(sg_name, sg)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        return sg"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_57328d11","line":48,"range":{"start_line":48,"start_character":22,"end_line":48,"end_character":29},"updated":"2015-12-18 11:04:41.000000000","message":"use `self._get_column_value_from_single_row_table` instead of assertIn","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cb53522f03370cc026c6eadca9db9019bb5e8cda","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        sg \u003d self.nova(\u0027server-group-get %s\u0027 % sg_id)"},{"line_number":33,"context_line":"        result \u003d self._get_column_value_from_single_row_table(sg, \"Id\")"},{"line_number":34,"context_line":"        self.assertEqual(sg_id, result)"},{"line_number":35,"context_line":"        self.addCleanup(self.nova, \u0027server-group-delete %s\u0027 % sg_id)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_list_server_group(self):"},{"line_number":38,"context_line":"        sg_id \u003d self._create_sg(\"affinity\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a7e1126_b6580f32","line":35,"updated":"2015-12-22 12:46:39.000000000","message":"Put this line after _create_sg call","commit_id":"867e5eecff69cf84e26353efe1e10a06a117c4fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cb53522f03370cc026c6eadca9db9019bb5e8cda","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        sg \u003d self.nova(\u0027server-group-list\u0027)"},{"line_number":40,"context_line":"        result \u003d self._get_column_value_from_single_row_table(sg, \"Id\")"},{"line_number":41,"context_line":"        self.assertEqual(sg_id, result)"},{"line_number":42,"context_line":"        self.addCleanup(self.nova, \u0027server-group-delete %s\u0027 % sg_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_delete_server_group(self):"},{"line_number":45,"context_line":"        sg_id \u003d self._create_sg(\"affinity\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a7e1126_164a4355","line":42,"updated":"2015-12-22 12:46:39.000000000","message":"same here","commit_id":"867e5eecff69cf84e26353efe1e10a06a117c4fa"}],"novaclient/tests/functional/v2/test_server_groups.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"932087ff86c6054136afb380345c1b17f50e4634","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from novaclient.tests.functional import base"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class TestServerGroupClientV213(base.ClientTestBase):"},{"line_number":19,"context_line":"    \"\"\"Server groups v2.13 functional tests.\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    COMPUTE_API_VERSION \u003d \"2.13\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_0a8af3bf","line":18,"range":{"start_line":18,"start_character":6,"end_line":18,"end_character":31},"updated":"2015-12-17 09:13:52.000000000","message":"please, move this class to novaclient/tests/functional/v2/legacy and extend it here","commit_id":"c5e3e4ff4be2a88d8396d347e94cd3fdd5a856fc"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    COMPUTE_API_VERSION \u003d \"2.latest\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        super(TestServerGroupClientV213, self).setUp()"},{"line_number":26,"context_line":"        user_name \u003d self.name_generate(\"v2.13\")"},{"line_number":27,"context_line":"        password \u003d \"password\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_5a2714b6","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":13},"updated":"2015-12-18 11:04:41.000000000","message":"You don\u0027t need all this code in setUp. You need only obtain user_id and project_id.\n\n    out \u003d self.cli_clients.openstack(\"user show %s\" % self.cli_clients.username)\n    self.user_id \u003d self._get_value_from_the_table(out, \"id\")\n    out \u003d self.cli_clients.openstack(\"project show %s\" % self.cli_clients.tenant_name)\n    self.project_id \u003d self._get_value_from_the_table(out, \"id\")","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            uri\u003dself.cli_clients.uri,"},{"line_number":43,"context_line":"            cli_dir\u003dself.cli_clients.cli_dir)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_create_create_server_groups(self):"},{"line_number":46,"context_line":"        name \u003d self.name_generate(\"v2_13\")"},{"line_number":47,"context_line":"        output \u003d self.nova(\"server-group-create %s affinity\" % name)"},{"line_number":48,"context_line":"        self.addCleanup(self.nova, \"server-group-delete %s\" % name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_7a30d09e","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":40},"updated":"2015-12-18 11:04:41.000000000","message":"s/test_create_create_server_groups/test_create_server_group","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            cli_dir\u003dself.cli_clients.cli_dir)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_create_create_server_groups(self):"},{"line_number":46,"context_line":"        name \u003d self.name_generate(\"v2_13\")"},{"line_number":47,"context_line":"        output \u003d self.nova(\"server-group-create %s affinity\" % name)"},{"line_number":48,"context_line":"        self.addCleanup(self.nova, \"server-group-delete %s\" % name)"},{"line_number":49,"context_line":"        self.assertEqual(self.user_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_fa912053","line":46,"range":{"start_line":46,"start_character":20,"end_line":46,"end_character":33},"updated":"2015-12-18 11:04:41.000000000","message":"The same method from legacy class can return output of \"get\" method and you will need to use _get_column_value_from_single_row_table to check user_id and project_id . Duplication of code will be decreased.","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                         self._get_value_from_the_table(output, \"project_id\"))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_list_server_groups(self):"},{"line_number":55,"context_line":"        name \u003d self.name_generate(\"v2_13\")"},{"line_number":56,"context_line":"        self.nova(\"server-group-create %s affinity\" % name)"},{"line_number":57,"context_line":"        output \u003d self.nova(\"server-group-list\")"},{"line_number":58,"context_line":"        self.addCleanup(self.nova, \"server-group-delete %s\" % name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_1a83cc05","line":55,"range":{"start_line":55,"start_character":15,"end_line":55,"end_character":19},"updated":"2015-12-18 11:04:41.000000000","message":"same here","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc6545e760b40aa421ba182ab00afc54ae92a9dc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                         self._get_value_from_the_table(output, \"project_id\"))"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_get_server_groups(self):"},{"line_number":65,"context_line":"        name \u003d self.name_generate(\"v2_13\")"},{"line_number":66,"context_line":"        self.nova(\"server-group-create %s affinity\" % name)"},{"line_number":67,"context_line":"        output \u003d self.nova(\"server-group-get %s\" % name)"},{"line_number":68,"context_line":"        self.addCleanup(self.nova, \"server-group-delete %s\" % name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_3a86c813","line":65,"range":{"start_line":65,"start_character":20,"end_line":65,"end_character":33},"updated":"2015-12-18 11:04:41.000000000","message":"same here","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cb53522f03370cc026c6eadca9db9019bb5e8cda","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self._get_column_value_from_single_row_table("},{"line_number":29,"context_line":"            sg, \"Project Id\")"},{"line_number":30,"context_line":"        self.assertEqual(sg_id, result)"},{"line_number":31,"context_line":"        self.addCleanup(self.nova, \u0027server-group-delete %s\u0027 % sg_id)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def test_list_server_groups(self):"},{"line_number":34,"context_line":"        sg_id \u003d self._create_sg(\"affinity\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a7e1126_f679b793","line":31,"updated":"2015-12-22 12:46:39.000000000","message":"same here","commit_id":"867e5eecff69cf84e26353efe1e10a06a117c4fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cb53522f03370cc026c6eadca9db9019bb5e8cda","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self._get_column_value_from_single_row_table("},{"line_number":40,"context_line":"            sg, \"Project Id\")"},{"line_number":41,"context_line":"        self.assertEqual(sg_id, result)"},{"line_number":42,"context_line":"        self.addCleanup(self.nova, \"server-group-delete %s\" % sg_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_server_group(self):"},{"line_number":45,"context_line":"        sg_id \u003d self._create_sg(\"affinity\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a7e1126_b66fafc2","line":42,"updated":"2015-12-22 12:46:39.000000000","message":"same here","commit_id":"867e5eecff69cf84e26353efe1e10a06a117c4fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cb53522f03370cc026c6eadca9db9019bb5e8cda","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self._get_column_value_from_single_row_table("},{"line_number":51,"context_line":"            sg, \"Project Id\")"},{"line_number":52,"context_line":"        self.assertEqual(sg_id, result)"},{"line_number":53,"context_line":"        self.addCleanup(self.nova, \"server-group-delete %s\" % sg_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a7e1126_365c1f18","line":53,"updated":"2015-12-22 12:46:39.000000000","message":"same here","commit_id":"867e5eecff69cf84e26353efe1e10a06a117c4fa"}],"novaclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"e4d04c6a8dd655f2ed449aa0dc15dc781c286ec6","unresolved":false,"context_lines":[{"line_number":2554,"context_line":"            9,   # doesn\u0027t require any changes in novaclient"},{"line_number":2555,"context_line":"            # TODO(andreykurilin): remove 12 when 1522424 will be resolved"},{"line_number":2556,"context_line":"            12,  # doesn\u0027t require any changes in novaclient"},{"line_number":2557,"context_line":"            13,  # Not implemented when test added, should not apply to adds."},{"line_number":2558,"context_line":"        ])"},{"line_number":2559,"context_line":"        versions_supported \u003d set(range(0,"},{"line_number":2560,"context_line":"                                 novaclient.API_MAX_VERSION.ver_minor + 1))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a7b0d38_90e4db3b","line":2557,"updated":"2015-12-23 06:27:12.000000000","message":"hi Kevin, no require to add 13 to exclusions because you have use @api_versions.wraps(\"2.13\")","commit_id":"b848ff184b3134e1dcc7bddb441473a17a276bb4"}],"novaclient/v2/server_groups.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"8573ff0424d3f52a03be9ff93b2ac509291b21ed","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        :rtype: list of :class:`ServerGroup`."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        all \u003d \u0027?all_projects\u0027 if all_projects else \u0027\u0027"},{"line_number":59,"context_line":"        return self._list(\u0027/os-server-groups%s\u0027 % all, \u0027server_groups\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @api_versions.wraps(\"2.0\", \"2.12\")"},{"line_number":62,"context_line":"    def get(self, id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_2e30039e","line":59,"updated":"2015-12-15 17:06:35.000000000","message":"What\u0027s the difference between the 2.13 implementation and the 2.0 implementation?","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"765351d0f1730a34b7c80878a4b3ff5711a137d9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        :rtype: list of :class:`ServerGroup`."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        all \u003d \u0027?all_projects\u0027 if all_projects else \u0027\u0027"},{"line_number":59,"context_line":"        return self._list(\u0027/os-server-groups%s\u0027 % all, \u0027server_groups\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @api_versions.wraps(\"2.0\", \"2.12\")"},{"line_number":62,"context_line":"    def get(self, id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_836af2ec","line":59,"in_reply_to":"5a710552_23e53edb","updated":"2015-12-16 16:43:41.000000000","message":"+1 to Kevin","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b30c18554d49542d32ff09068686317f739ec0b7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        :rtype: list of :class:`ServerGroup`."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        all \u003d \u0027?all_projects\u0027 if all_projects else \u0027\u0027"},{"line_number":59,"context_line":"        return self._list(\u0027/os-server-groups%s\u0027 % all, \u0027server_groups\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @api_versions.wraps(\"2.0\", \"2.12\")"},{"line_number":62,"context_line":"    def get(self, id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_9f47d01c","line":59,"in_reply_to":"5a710552_2e30039e","updated":"2015-12-16 01:44:47.000000000","message":"The difference is we contain the user_id and project_id of server groups in the response data.","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9a6c12023feb5b3dfd6cc5fba282e07ba3c3c6f6","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        :rtype: list of :class:`ServerGroup`."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        all \u003d \u0027?all_projects\u0027 if all_projects else \u0027\u0027"},{"line_number":59,"context_line":"        return self._list(\u0027/os-server-groups%s\u0027 % all, \u0027server_groups\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @api_versions.wraps(\"2.0\", \"2.12\")"},{"line_number":62,"context_line":"    def get(self, id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_23e53edb","line":59,"in_reply_to":"5a710552_9f47d01c","updated":"2015-12-16 16:28:36.000000000","message":"In other words, there\u0027s no difference in the implementation of list(), get(), etc.  I\u0027m hesitant to allow this level of duplication through without some more input from a microversion expert…","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"136f31ba1e673ca90c14a7543736d84656608be4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    resource_class \u003d ServerGroup"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @api_versions.wraps(\"2.0\", \"2.12\")"},{"line_number":44,"context_line":"    def list(self, all_projects\u003dFalse):"},{"line_number":45,"context_line":"        \"\"\"Get a list of all server groups."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_bfc43f40","line":43,"range":{"start_line":43,"start_character":5,"end_line":43,"end_character":17},"updated":"2015-12-17 08:57:28.000000000","message":"as Kevin mentioned in previous patch-set, all these changes in this module is redundant(it will work without any changes)","commit_id":"43d3f5ec99486fb6939740457f185e623f366470"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a5ff71e27a13f055a0bb5d48c96d3e05349debdf","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    resource_class \u003d ServerGroup"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @api_versions.wraps(\"2.0\", \"2.12\")"},{"line_number":44,"context_line":"    def list(self, all_projects\u003dFalse):"},{"line_number":45,"context_line":"        \"\"\"Get a list of all server groups."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_8a5ee3e7","line":43,"range":{"start_line":43,"start_character":5,"end_line":43,"end_character":17},"in_reply_to":"3a7e1126_bfc43f40","updated":"2015-12-17 09:07:12.000000000","message":"my bad, I have messed up git somehow","commit_id":"43d3f5ec99486fb6939740457f185e623f366470"}],"novaclient/v2/shell.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"765351d0f1730a34b7c80878a4b3ff5711a137d9","unresolved":false,"context_lines":[{"line_number":4625,"context_line":"    action\u003d\u0027store_true\u0027,"},{"line_number":4626,"context_line":"    default\u003dFalse,"},{"line_number":4627,"context_line":"    help\u003d_(\u0027Display server groups from all projects (Admin only).\u0027))"},{"line_number":4628,"context_line":"def do_server_group_list(cs, args):"},{"line_number":4629,"context_line":"    \"\"\"Print a list of all server groups.\"\"\""},{"line_number":4630,"context_line":"    server_groups \u003d cs.server_groups.list(args.all_projects)"},{"line_number":4631,"context_line":"    _print_server_group_details_213(server_groups)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_c6b48836","line":4628,"updated":"2015-12-16 16:43:41.000000000","message":"since the arguments all new commands are the same to old methods, I prefer to not duplicating them. Let\u0027s remove all new do_* methods and use _print_server_group_details methods(you should transmit cs instance to it as a first argument) with api_versions.wraps decorator","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9aa0d6335d249d462171c1f988fbf9eb96142a79","unresolved":false,"context_lines":[{"line_number":4625,"context_line":"    action\u003d\u0027store_true\u0027,"},{"line_number":4626,"context_line":"    default\u003dFalse,"},{"line_number":4627,"context_line":"    help\u003d_(\u0027Display server groups from all projects (Admin only).\u0027))"},{"line_number":4628,"context_line":"def do_server_group_list(cs, args):"},{"line_number":4629,"context_line":"    \"\"\"Print a list of all server groups.\"\"\""},{"line_number":4630,"context_line":"    server_groups \u003d cs.server_groups.list(args.all_projects)"},{"line_number":4631,"context_line":"    _print_server_group_details_213(server_groups)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_09369e03","line":4628,"in_reply_to":"5a710552_c6b48836","updated":"2015-12-17 01:46:08.000000000","message":"Done","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"765351d0f1730a34b7c80878a4b3ff5711a137d9","unresolved":false,"context_lines":[{"line_number":4694,"context_line":""},{"line_number":4695,"context_line":"@api_versions.wraps(\"2.0\", \"2.12\")"},{"line_number":4696,"context_line":"@cliutils.arg(\u0027name\u0027, metavar\u003d\u0027\u003cname\u003e\u0027, help\u003d_(\u0027Server group name.\u0027))"},{"line_number":4697,"context_line":"# NOTE(wingwj): The \u0027--policy\u0027 way is still reserved here for preserving"},{"line_number":4698,"context_line":"# the backwards compatibility of CLI, even if a user won\u0027t get this usage"},{"line_number":4699,"context_line":"# in \u0027--help\u0027 description. It will be deprecated after an suitable deprecation"},{"line_number":4700,"context_line":"# period(probably 2 coordinated releases or so)."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_46b738f5","line":4697,"updated":"2015-12-16 16:43:41.000000000","message":"I suppose 2 releases are done and we can remove this note","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d81abb0dbe7867b8a136340a573fc178e632360f","unresolved":false,"context_lines":[{"line_number":4694,"context_line":""},{"line_number":4695,"context_line":"@api_versions.wraps(\"2.0\", \"2.12\")"},{"line_number":4696,"context_line":"@cliutils.arg(\u0027name\u0027, metavar\u003d\u0027\u003cname\u003e\u0027, help\u003d_(\u0027Server group name.\u0027))"},{"line_number":4697,"context_line":"# NOTE(wingwj): The \u0027--policy\u0027 way is still reserved here for preserving"},{"line_number":4698,"context_line":"# the backwards compatibility of CLI, even if a user won\u0027t get this usage"},{"line_number":4699,"context_line":"# in \u0027--help\u0027 description. It will be deprecated after an suitable deprecation"},{"line_number":4700,"context_line":"# period(probably 2 coordinated releases or so)."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_117c0c1e","line":4697,"in_reply_to":"5a710552_46b738f5","updated":"2015-12-16 16:58:56.000000000","message":"I proposed https://review.openstack.org/#/c/257595/ to address deprecated options; this is one of the ones that I hit with that.","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"765351d0f1730a34b7c80878a4b3ff5711a137d9","unresolved":false,"context_lines":[{"line_number":4728,"context_line":""},{"line_number":4729,"context_line":"@api_versions.wraps(\"2.13\")"},{"line_number":4730,"context_line":"@cliutils.arg(\u0027name\u0027, metavar\u003d\u0027\u003cname\u003e\u0027, help\u003d_(\u0027Server group name.\u0027))"},{"line_number":4731,"context_line":"# NOTE(wingwj): The \u0027--policy\u0027 way is still reserved here for preserving"},{"line_number":4732,"context_line":"# the backwards compatibility of CLI, even if a user won\u0027t get this usage"},{"line_number":4733,"context_line":"# in \u0027--help\u0027 description. It will be deprecated after an suitable deprecation"},{"line_number":4734,"context_line":"# period(probably 2 coordinated releases or so)."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_0695b03d","line":4731,"updated":"2015-12-16 16:43:41.000000000","message":"new microversion should not have this note.","commit_id":"78bb181402762ea88ba4e29a3afb162cf3a13764"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"85127a03e17753a9beb210ecf7c672eddc661c6e","unresolved":false,"context_lines":[{"line_number":4602,"context_line":""},{"line_number":4603,"context_line":"@api_versions.wraps(\"2.13\")"},{"line_number":4604,"context_line":"def _print_server_group_details(cs, server_group):    # noqa"},{"line_number":4605,"context_line":"    columns \u003d [\u0027Id\u0027, \u0027Name\u0027, \u0027project_id\u0027, \u0027user_id\u0027,"},{"line_number":4606,"context_line":"               \u0027Policies\u0027, \u0027Members\u0027, \u0027Metadata\u0027]"},{"line_number":4607,"context_line":"    utils.print_list(server_group, columns)"},{"line_number":4608,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_fac60048","line":4605,"range":{"start_line":4605,"start_character":30,"end_line":4605,"end_character":40},"updated":"2015-12-18 11:05:53.000000000","message":"print_list will replace all spaces and uppercases, so you can use here \"Project ID\" and \"User ID\". It will be more user friendly","commit_id":"828e7a4eefc543a8f26c7be7b3107773e2585fd3"}]}
