)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eae04ea6e38ac7d2822c59b1567ed8a2ece1e6b4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix volume creation from image with allowed_direct_url_schemes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When CONF.allowed_direct_url_schemes is set to [\u0027file\u0027] and"},{"line_number":10,"context_line":"Glance image has diect_url or locations metadata with \u0027file:///\u0027"},{"line_number":11,"context_line":"scheme, cinder tries to directly read the image data from the"},{"line_number":12,"context_line":"local file. However, currently the code is broken because return"},{"line_number":13,"context_line":"value from get_location() has been changed to a tuple."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da9b358b_e72ff6f4","line":10,"updated":"2015-03-28 00:40:24.000000000","message":"Typo diect_url -\u003e direct_url","commit_id":"e823cecc5e58ba89fa185e414c0d98c1540e6be6"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"356af5c5017c2708da0e749ccfe8d13bb3f4aa08","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix volume creation from image with allowed_direct_url_schemes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When CONF.allowed_direct_url_schemes is set to [\u0027file\u0027] and"},{"line_number":10,"context_line":"Glance image has diect_url or locations metadata with \u0027file:///\u0027"},{"line_number":11,"context_line":"scheme, cinder tries to directly read the image data from the"},{"line_number":12,"context_line":"local file. However, currently the code is broken because return"},{"line_number":13,"context_line":"value from get_location() has been changed to a tuple."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da9b358b_97a5c505","line":10,"updated":"2015-03-30 19:53:02.000000000","message":"I think you lost the typo fix in the latest patch:\ndiect_url -\u003e direct_url","commit_id":"1885f87b4a1b3952564479c06a5b027a326c38f8"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"a09afe5b25c6bf078985c232aa0e047b54ac4cb3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix volume creation from image with allowed_direct_url_schemes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When CONF.allowed_direct_url_schemes is set to [\u0027file\u0027] and"},{"line_number":10,"context_line":"Glance image has diect_url or locations metadata with \u0027file:///\u0027"},{"line_number":11,"context_line":"scheme, cinder tries to directly read the image data from the"},{"line_number":12,"context_line":"local file. However, currently the code is broken because return"},{"line_number":13,"context_line":"value from get_location() has been changed to a tuple."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da9b358b_8a09182f","line":10,"in_reply_to":"da9b358b_97a5c505","updated":"2015-03-30 20:20:33.000000000","message":"Done","commit_id":"1885f87b4a1b3952564479c06a5b027a326c38f8"}],"cinder/image/glance.py":[{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"7b1c58838b49856ddbf12b02f53ee42a179da638","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            for url in urls:"},{"line_number":274,"context_line":"                if url is None:"},{"line_number":275,"context_line":"                    continue"},{"line_number":276,"context_line":"                o \u003d urlparse.urlparse(url)"},{"line_number":277,"context_line":"                if o.scheme \u003d\u003d \"file\":"},{"line_number":278,"context_line":"                    # a system call to cp could have significant performance"},{"line_number":279,"context_line":"                    # advantages, however we do not have the path to files at"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_1ae67fb4","line":276,"updated":"2015-03-30 18:42:10.000000000","message":"Can you give a more descriptive name here ? Will help to improve code readability.","commit_id":"38bd2074a1d2fb190c39e0a094fcc5ff08e69567"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"356af5c5017c2708da0e749ccfe8d13bb3f4aa08","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        base_image_meta \u003d self._translate_from_glance(image)"},{"line_number":243,"context_line":"        return base_image_meta"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def get_location(self, context, image_id):"},{"line_number":246,"context_line":"        \"\"\"Returns the direct url representing the backend storage location,"},{"line_number":247,"context_line":"        or None if this attribute is not shown by Glance."},{"line_number":248,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_775c8125","line":245,"updated":"2015-03-30 19:53:02.000000000","message":"Can you change this docstring to reflect that a tuple is now being returned:\nReturns the direct url and locations....\n...or None, None","commit_id":"1885f87b4a1b3952564479c06a5b027a326c38f8"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"a09afe5b25c6bf078985c232aa0e047b54ac4cb3","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        base_image_meta \u003d self._translate_from_glance(image)"},{"line_number":243,"context_line":"        return base_image_meta"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def get_location(self, context, image_id):"},{"line_number":246,"context_line":"        \"\"\"Returns the direct url representing the backend storage location,"},{"line_number":247,"context_line":"        or None if this attribute is not shown by Glance."},{"line_number":248,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_1707751d","line":245,"in_reply_to":"da9b358b_775c8125","updated":"2015-03-30 20:20:33.000000000","message":"Done","commit_id":"1885f87b4a1b3952564479c06a5b027a326c38f8"}],"cinder/tests/image/test_glance.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"ae4a8f42f1b029ce8ef462d1fe92771bda8c15f6","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    def test_download_from_direct_file(self):"},{"line_number":522,"context_line":"        fixture \u003d self._make_fixture(name\u003d\u0027test image\u0027,"},{"line_number":523,"context_line":"                                     locations\u003d[{\u0027url\u0027: \u0027file:///tmp/test\u0027}])"},{"line_number":524,"context_line":"        image_id \u003d self.service.create(self.context, fixture)[\u0027id\u0027]"},{"line_number":525,"context_line":"        writer \u003d NullWriter()"},{"line_number":526,"context_line":"        self.flags(allowed_direct_url_schemes\u003d[\u0027file\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa041b7_ae82a092","line":523,"updated":"2015-04-03 09:30:05.000000000","message":"It would be also nice to have tests where URL scheme isn\u0027t \u0027file\u0027.","commit_id":"eecd5cc87b2802293b198c1db5b2f6dda6901334"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"8b9e3d546d509adefe2e20c817390096f363e30c","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        self.flags(allowed_direct_url_schemes\u003d[\u0027file\u0027])"},{"line_number":527,"context_line":"        self.flags(glance_api_version\u003d2)"},{"line_number":528,"context_line":"        with mock.patch(\u0027__builtin__.open\u0027), \\"},{"line_number":529,"context_line":"                mock.patch(\u0027shutil.copyfileobj\u0027) as mock_copyfileobj:"},{"line_number":530,"context_line":"            self.service.download(self.context, image_id, writer)"},{"line_number":531,"context_line":"            mock_copyfileobj.assert_called_once_with(mock.ANY, writer)"},{"line_number":532,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_dcea49ac","line":529,"updated":"2015-03-31 01:15:49.000000000","message":"Cloud we use @mock.patch to instead of this?","commit_id":"eecd5cc87b2802293b198c1db5b2f6dda6901334"}],"cinder/tests/unit/image/test_glance.py":[{"author":{"_account_id":7111,"name":"hadi esiely","email":"hadi.esiely-barrera@jhuapl.edu","username":"HEsiely"},"change_message_id":"97b9454ba8bb128437c339dfc1d0973d7f69d3a7","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @mock.patch(\u0027__builtin__.open\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027shutil.copyfileobj\u0027)"},{"line_number":523,"context_line":"    def test_download_from_direct_file(self, mock_copyfileobj, mock_open):"},{"line_number":524,"context_line":"        fixture \u003d self._make_fixture(name\u003d\u0027test image\u0027,"},{"line_number":525,"context_line":"                                     locations\u003d[{\u0027url\u0027: \u0027file:///tmp/test\u0027}])"},{"line_number":526,"context_line":"        image_id \u003d self.service.create(self.context, fixture)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_a292c29d","line":523,"updated":"2015-04-30 23:13:23.000000000","message":"mock_open is not used in function","commit_id":"181be53a2b0a54f7b4cd33dacbaa560e124e9421"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"f6058ef89faf16c1fcff86056da6dab0e9118366","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @mock.patch(\u0027__builtin__.open\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027shutil.copyfileobj\u0027)"},{"line_number":523,"context_line":"    def test_download_from_direct_file(self, mock_copyfileobj, mock_open):"},{"line_number":524,"context_line":"        fixture \u003d self._make_fixture(name\u003d\u0027test image\u0027,"},{"line_number":525,"context_line":"                                     locations\u003d[{\u0027url\u0027: \u0027file:///tmp/test\u0027}])"},{"line_number":526,"context_line":"        image_id \u003d self.service.create(self.context, fixture)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_089625f0","line":523,"in_reply_to":"3acd31a7_a292c29d","updated":"2015-05-01 20:25:58.000000000","message":"This extra argument is necessary for @mock.patch decorator to mock out the open fuction. Otherwise it will be an error because the number of arguments doesn\u0027t match.","commit_id":"181be53a2b0a54f7b4cd33dacbaa560e124e9421"},{"author":{"_account_id":7111,"name":"hadi esiely","email":"hadi.esiely-barrera@jhuapl.edu","username":"HEsiely"},"change_message_id":"97b9454ba8bb128437c339dfc1d0973d7f69d3a7","unresolved":false,"context_lines":[{"line_number":533,"context_line":"    @mock.patch(\u0027__builtin__.open\u0027)"},{"line_number":534,"context_line":"    @mock.patch(\u0027shutil.copyfileobj\u0027)"},{"line_number":535,"context_line":"    def test_download_from_direct_file_non_file(self,"},{"line_number":536,"context_line":"                                                mock_copyfileobj, mock_open):"},{"line_number":537,"context_line":"        fixture \u003d self._make_fixture(name\u003d\u0027test image\u0027,"},{"line_number":538,"context_line":"                                     direct_url\u003d\u0027swift+http://test/image\u0027)"},{"line_number":539,"context_line":"        image_id \u003d self.service.create(self.context, fixture)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_a2d9a285","line":536,"updated":"2015-04-30 23:13:23.000000000","message":"mock_open is not used in function","commit_id":"181be53a2b0a54f7b4cd33dacbaa560e124e9421"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"f6058ef89faf16c1fcff86056da6dab0e9118366","unresolved":false,"context_lines":[{"line_number":533,"context_line":"    @mock.patch(\u0027__builtin__.open\u0027)"},{"line_number":534,"context_line":"    @mock.patch(\u0027shutil.copyfileobj\u0027)"},{"line_number":535,"context_line":"    def test_download_from_direct_file_non_file(self,"},{"line_number":536,"context_line":"                                                mock_copyfileobj, mock_open):"},{"line_number":537,"context_line":"        fixture \u003d self._make_fixture(name\u003d\u0027test image\u0027,"},{"line_number":538,"context_line":"                                     direct_url\u003d\u0027swift+http://test/image\u0027)"},{"line_number":539,"context_line":"        image_id \u003d self.service.create(self.context, fixture)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_c89f0d02","line":536,"in_reply_to":"3acd31a7_a2d9a285","updated":"2015-05-01 20:25:58.000000000","message":"ditto.","commit_id":"181be53a2b0a54f7b4cd33dacbaa560e124e9421"}]}
