)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ad449c7394d1a2fe759ee6e088eaab3592e9f6a0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zhenguo Niu \u003cNiu.ZGlinux@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-03-30 22:55:56 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Prevent create/update node name \"\" in lower API version"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently the name acceptable check is under the condition of"},{"line_number":10,"context_line":"\"if name\", so if you specify name to an empty value like \"\","}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba0121b8_4b5dfe13","line":7,"range":{"start_line":7,"start_character":35,"end_line":7,"end_character":55},"updated":"2016-03-31 20:04:31.000000000","message":"Which API version?  The change seems unrelated to a specific version, so why even mention it?\n\nPerhaps \"Correct api version check conditional for node.name\"?","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"4b313da8911f085d639c4ce79051c38d73ebb4bb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zhenguo Niu \u003cNiu.ZGlinux@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-03-30 22:55:56 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Prevent create/update node name \"\" in lower API version"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently the name acceptable check is under the condition of"},{"line_number":10,"context_line":"\"if name\", so if you specify name to an empty value like \"\","}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba0121b8_5323c855","line":7,"range":{"start_line":7,"start_character":35,"end_line":7,"end_character":55},"in_reply_to":"ba0121b8_4b5dfe13","updated":"2016-04-01 15:38:35.000000000","message":"We add node logical name support since version 1.5, but I agree your suggested title is better, thanks Julia!","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"432d9198c45159d8822103c7a8b974dd33fceda1","unresolved":false,"context_lines":[{"line_number":1208,"context_line":"            e.code \u003d http_client.BAD_REQUEST"},{"line_number":1209,"context_line":"            raise e"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"        if (node.name !\u003d wtypes.Unset and node.name is not None):"},{"line_number":1212,"context_line":"            error_msg \u003d _(\"Cannot create node with invalid name \""},{"line_number":1213,"context_line":"                          \"%(name)s\") % {\u0027name\u0027: node.name}"},{"line_number":1214,"context_line":"            self._check_name_acceptable(node.name, error_msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_7ee26530","line":1211,"range":{"start_line":1211,"start_character":12,"end_line":1211,"end_character":37},"updated":"2016-03-31 09:01:22.000000000","message":"would be great if you can add a note for this or in commit message","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"}],"ironic/tests/unit/api/v1/test_nodes.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ad449c7394d1a2fe759ee6e088eaab3592e9f6a0","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"        self.assertEqual(http_client.BAD_REQUEST, response.status_code)"},{"line_number":1270,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def test_patch_add_name_in_old_version(self):"},{"line_number":1273,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1274,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"},{"line_number":1275,"context_line":"                                     \u0027op\u0027: \u0027add\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_2bceca62","line":1272,"range":{"start_line":1272,"start_character":19,"end_line":1272,"end_character":42},"updated":"2016-03-31 20:04:31.000000000","message":"Nit: seems like this is more of a test for an invalid name being passed since we\u0027re not testing a behavior change upon a different version of the API.","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"4b313da8911f085d639c4ce79051c38d73ebb4bb","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"        self.assertEqual(http_client.BAD_REQUEST, response.status_code)"},{"line_number":1270,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def test_patch_add_name_in_old_version(self):"},{"line_number":1273,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1274,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"},{"line_number":1275,"context_line":"                                     \u0027op\u0027: \u0027add\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_587ac7bd","line":1272,"range":{"start_line":1272,"start_character":19,"end_line":1272,"end_character":42},"in_reply_to":"ba0121b8_2bceca62","updated":"2016-04-01 15:38:35.000000000","message":"agree, maybe change this to test_patch_add_name_emtpy it\u0027s better.","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5240361774f0c4b0b78f1a0c7fb8425cd241e37d","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1274,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"},{"line_number":1275,"context_line":"                                     \u0027op\u0027: \u0027add\u0027,"},{"line_number":1276,"context_line":"                                     \u0027value\u0027: \u0027\u0027}],"},{"line_number":1277,"context_line":"                                   expect_errors\u003dTrue)"},{"line_number":1278,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1279,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_code)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_9875d1fb","line":1276,"range":{"start_line":1276,"start_character":46,"end_line":1276,"end_character":48},"updated":"2016-03-31 08:30:16.000000000","message":"nits: test purpose would become more clearer if the value is assigned like the line 1284 and 1288.\n\ntest_name \u003d \u0027\u0027","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ad449c7394d1a2fe759ee6e088eaab3592e9f6a0","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1274,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"},{"line_number":1275,"context_line":"                                     \u0027op\u0027: \u0027add\u0027,"},{"line_number":1276,"context_line":"                                     \u0027value\u0027: \u0027\u0027}],"},{"line_number":1277,"context_line":"                                   expect_errors\u003dTrue)"},{"line_number":1278,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1279,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_code)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_6b9f225f","line":1276,"range":{"start_line":1276,"start_character":46,"end_line":1276,"end_character":48},"in_reply_to":"ba0121b8_36e63fb0","updated":"2016-03-31 20:04:31.000000000","message":"I agree with Naohiro, but I thinkt he purpose is more testing for invalid names since no version is actually passed.","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"a0ead262bd265e02eaaa89e76070dd809263ef7f","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1274,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"},{"line_number":1275,"context_line":"                                     \u0027op\u0027: \u0027add\u0027,"},{"line_number":1276,"context_line":"                                     \u0027value\u0027: \u0027\u0027}],"},{"line_number":1277,"context_line":"                                   expect_errors\u003dTrue)"},{"line_number":1278,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1279,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_code)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_36e63fb0","line":1276,"range":{"start_line":1276,"start_character":46,"end_line":1276,"end_character":48},"in_reply_to":"ba0121b8_9875d1fb","updated":"2016-03-31 15:14:20.000000000","message":"I don\u0027t see how that would be more clear, not sure why we need to use a test_name in below tests.","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ad449c7394d1a2fe759ee6e088eaab3592e9f6a0","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"        self.assertEqual(urlparse.urlparse(response.location).path,"},{"line_number":1391,"context_line":"                         expected_location)"},{"line_number":1392,"context_line":""},{"line_number":1393,"context_line":"    def test_create_node_with_name_in_old_version(self):"},{"line_number":1394,"context_line":"        ndict \u003d test_api_utils.post_get_test_node(name\u003d\u0027\u0027)"},{"line_number":1395,"context_line":"        response \u003d self.post_json(\u0027/nodes\u0027, ndict, expect_errors\u003dTrue)"},{"line_number":1396,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_int)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_2bd52ae7","line":1393,"range":{"start_line":1393,"start_character":20,"end_line":1393,"end_character":49},"updated":"2016-03-31 20:04:31.000000000","message":"same nit as above, seems more like a check to prevent invalid names.","commit_id":"009775c143beaf155fc2e641ace35ef6044aeea0"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"bf8f8275b0f70744939dc3a56f71b111f7ddca74","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"        self.assertEqual(http_client.BAD_REQUEST, response.status_code)"},{"line_number":1270,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def test_patch_add_name_empty(self):"},{"line_number":1273,"context_line":"        test_name \u003d \u0027\u0027"},{"line_number":1274,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1275,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_9b79f695","line":1272,"updated":"2016-04-01 16:28:45.000000000","message":"Actually, I think there should be 2 separate tests - one is like this, that checks if a node with name\u003d\u0027\u0027 is created with api version \u003c 1.5 not acceptable is given, and the other one with api_version \u003e\u003d 1.5 that shows that if name\u003d\u0027\u0027 is specified code 400 is returned as it is not a valid name. WDYT?","commit_id":"47049f03e2b8e37f77e290f5ae0af9cb791eddc2"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"93f611aba663f2928a2e6a7208c864f73eda694e","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"        self.assertEqual(http_client.BAD_REQUEST, response.status_code)"},{"line_number":1270,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def test_patch_add_name_empty(self):"},{"line_number":1273,"context_line":"        test_name \u003d \u0027\u0027"},{"line_number":1274,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1275,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_d90d3690","line":1272,"in_reply_to":"ba0121b8_9b79f695","updated":"2016-04-01 17:20:53.000000000","message":"++, will update soon, thanks vdrok.","commit_id":"47049f03e2b8e37f77e290f5ae0af9cb791eddc2"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"bf8f8275b0f70744939dc3a56f71b111f7ddca74","unresolved":false,"context_lines":[{"line_number":1391,"context_line":"        self.assertEqual(urlparse.urlparse(response.location).path,"},{"line_number":1392,"context_line":"                         expected_location)"},{"line_number":1393,"context_line":""},{"line_number":1394,"context_line":"    def test_create_node_name_empty(self):"},{"line_number":1395,"context_line":"        ndict \u003d test_api_utils.post_get_test_node(name\u003d\u0027\u0027)"},{"line_number":1396,"context_line":"        response \u003d self.post_json(\u0027/nodes\u0027, ndict, expect_errors\u003dTrue)"},{"line_number":1397,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_int)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_7b6182d2","line":1394,"updated":"2016-04-01 16:28:45.000000000","message":"ditto","commit_id":"47049f03e2b8e37f77e290f5ae0af9cb791eddc2"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"f6d8e29dc023815079e4c8818c53a200cde8228b","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"        self.assertEqual(http_client.BAD_REQUEST, response.status_code)"},{"line_number":1270,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def test_patch_add_name_empty(self):"},{"line_number":1273,"context_line":"        test_name \u003d \u0027\u0027"},{"line_number":1274,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1275,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_543534d8","line":1272,"updated":"2016-04-05 03:36:09.000000000","message":"nit: use test_patch_add_name_empty_invalid() instead, this is easier to understand and keep uniforied with below one","commit_id":"7fe399c2997456e0709406c41b15c26b37f0fee2"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8a8b27f04733dc4716ab5de242d2bd4467d89f47","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def test_patch_add_name_empty_invalid(self):"},{"line_number":1273,"context_line":"        test_name \u003d \u0027\u0027"},{"line_number":1274,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1275,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"},{"line_number":1276,"context_line":"                                     \u0027op\u0027: \u0027add\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_169e4d07","line":1273,"updated":"2016-04-08 10:33:02.000000000","message":"nit: use \u0027\u0027 directly in l1277","commit_id":"4d06a423386d8af340d4ad4086da554df66a179f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8a8b27f04733dc4716ab5de242d2bd4467d89f47","unresolved":false,"context_lines":[{"line_number":1282,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"    def test_patch_add_name_empty_not_acceptable(self):"},{"line_number":1285,"context_line":"        test_name \u003d \u0027\u0027"},{"line_number":1286,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node_no_name.uuid,"},{"line_number":1287,"context_line":"                                   [{\u0027path\u0027: \u0027/name\u0027,"},{"line_number":1288,"context_line":"                                     \u0027op\u0027: \u0027add\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_5688c5c6","line":1285,"updated":"2016-04-08 10:33:02.000000000","message":"ditto","commit_id":"4d06a423386d8af340d4ad4086da554df66a179f"}],"releasenotes/notes/correct-api-version-check-conditional-for-nodename-439bebc02fb5493d.yaml":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"60a99e2fd49175c5b1130f28f1062cb56013052f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Correct api version check conditional for node.name to address"},{"line_number":4,"context_line":"    a issue that we could specify node name in lower api version"},{"line_number":5,"context_line":"    since we add logical name support."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9a061dce_9a3569f9","line":4,"updated":"2016-04-04 08:22:36.000000000","message":"s/a/an, also you might want to specify that it is only for the case of empty string \u0027\u0027 name.","commit_id":"7fe399c2997456e0709406c41b15c26b37f0fee2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"814979ea1ad2c5f5567f796309e02c8d8deb107a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Correct api version check conditional for node.name to address"},{"line_number":4,"context_line":"    an issue that we could specify node name in lower than 1.5 where"},{"line_number":5,"context_line":"    node names were introduced."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9a061dce_7c7da86d","line":4,"range":{"start_line":4,"start_character":27,"end_line":4,"end_character":34},"updated":"2016-04-05 13:47:17.000000000","message":"This change fixes only a case when node name has been specified as empty string \u0027\u0027. It should be added to release note.","commit_id":"c039b6869440d64a6cd286996808a705e101e012"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"8e5848789a209134bf1c63f94934cd551a555f76","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Correct api version check conditional for node.name to address"},{"line_number":4,"context_line":"    an issue that we could specify node name in lower than 1.5 where"},{"line_number":5,"context_line":"    node names were introduced."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9a061dce_b48bd41d","line":4,"range":{"start_line":4,"start_character":27,"end_line":4,"end_character":34},"in_reply_to":"9a061dce_7c7da86d","updated":"2016-04-05 14:01:00.000000000","message":"Done","commit_id":"c039b6869440d64a6cd286996808a705e101e012"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9509dc2db8eb9cc62b8dd3a6f9bf65b84ebe9225","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Correct api version check conditional for node.name to address"},{"line_number":4,"context_line":"    an issue that we could specify node name to \u0027\u0027 in lower than"},{"line_number":5,"context_line":"    1.5 where node names were introduced."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9a061dce_a6e0c6cd","line":4,"updated":"2016-04-05 15:06:34.000000000","message":"in api versions lower than","commit_id":"bc20b29c8e761310042e9161eb3818bbb4bd60d4"}]}
