)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"0d0f17d11fea67d96c8445bcce1a667892dfb918","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes bug 1138666"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"See the bug description."},{"line_number":12,"context_line":"TL;DR: delete deleted image causes 500 Internal Server Error."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The fix is to catch the exception from the image service and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAN3%2F%2F9EY%3D","line":11,"updated":"2013-03-05 13:11:21.000000000","message":"Commit messages need to stand on their own.  Please update this so that it doesn\u0027t require looking elsewhere to get the full description of the change.","commit_id":"dbe8ff80243ba92af21b1bccd518e025b2e627fa"}],"nova/api/openstack/compute/images.py":[{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"e651a9a87e5ec7ff2a986788bf9e538a0ca64768","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dexplanation)"},{"line_number":162,"context_line":"        except exception.ImageNotAuthorized:"},{"line_number":163,"context_line":"            # If the image status is DELETED the image service raises this"},{"line_number":164,"context_line":"            # exception. There\u0027s probably other reasons for it, too."},{"line_number":165,"context_line":"            explanation \u003d _(\"You are not allowed to delete the image.\")"},{"line_number":166,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dexplanation)"},{"line_number":167,"context_line":"        return webob.exc.HTTPNoContent()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F%2Bao%3D","line":164,"updated":"2013-03-04 21:12:52.000000000","message":"The image service raises this exception on delete if glanceclient raises HTTPForbidden.","commit_id":"56d9a0ec343c6082ef61f6667806f9fff184ffff"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8efed1980937a8faf4ea2c6fc9f8f26896c2a12d","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dexplanation)"},{"line_number":162,"context_line":"        except exception.ImageNotAuthorized:"},{"line_number":163,"context_line":"            # If the image status is DELETED the image service raises this"},{"line_number":164,"context_line":"            # exception. There\u0027s probably other reasons for it, too."},{"line_number":165,"context_line":"            explanation \u003d _(\"You are not allowed to delete the image.\")"},{"line_number":166,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dexplanation)"},{"line_number":167,"context_line":"        return webob.exc.HTTPNoContent()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F%2BMQ%3D","line":164,"in_reply_to":"AAAAN3%2F%2F%2Bao%3D","updated":"2013-03-04 23:07:24.000000000","message":"Done","commit_id":"56d9a0ec343c6082ef61f6667806f9fff184ffff"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"971583af869bb893d6d5521436e6ee1f3a291d6e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            # If the image status is DELETED the image service raises this"},{"line_number":164,"context_line":"            # exception. There\u0027s probably other reasons for it, too."},{"line_number":165,"context_line":"            explanation \u003d _(\"You are not allowed to delete the image.\")"},{"line_number":166,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dexplanation)"},{"line_number":167,"context_line":"        return webob.exc.HTTPNoContent()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.serializers(xml\u003dMinimalImagesTemplate)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAANH%2F%2F8Zg%3D","line":166,"updated":"2013-03-02 01:06:26.000000000","message":"Given the exception from image service is \"ImageNotAuthorized\", so I prefer to use \"HTTPUnauthorized\" instead of \"HTTPForbidden\".","commit_id":"56d9a0ec343c6082ef61f6667806f9fff184ffff"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8efed1980937a8faf4ea2c6fc9f8f26896c2a12d","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            # If the image status is DELETED the image service raises this"},{"line_number":164,"context_line":"            # exception. There\u0027s probably other reasons for it, too."},{"line_number":165,"context_line":"            explanation \u003d _(\"You are not allowed to delete the image.\")"},{"line_number":166,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dexplanation)"},{"line_number":167,"context_line":"        return webob.exc.HTTPNoContent()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.serializers(xml\u003dMinimalImagesTemplate)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F%2BMI%3D","line":166,"in_reply_to":"AAAAN3%2F%2F%2BcI%3D","updated":"2013-03-04 23:07:24.000000000","message":"I didn\u0027t change it.","commit_id":"56d9a0ec343c6082ef61f6667806f9fff184ffff"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"e651a9a87e5ec7ff2a986788bf9e538a0ca64768","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            # If the image status is DELETED the image service raises this"},{"line_number":164,"context_line":"            # exception. There\u0027s probably other reasons for it, too."},{"line_number":165,"context_line":"            explanation \u003d _(\"You are not allowed to delete the image.\")"},{"line_number":166,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003dexplanation)"},{"line_number":167,"context_line":"        return webob.exc.HTTPNoContent()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.serializers(xml\u003dMinimalImagesTemplate)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F%2BcI%3D","line":166,"in_reply_to":"AAAANH%2F%2F8Zg%3D","updated":"2013-03-04 21:12:52.000000000","message":"Fei Long: If we use HTTP Unauthorized (401) that would imply that authenticating would make a difference here.\n\nHonestly I think HTTP 404 (since the image has been deleted) might be the most correct code to use here but given the implementation details and the fact that glanceclient is raising HTTPForbidden I think the 403 makes sense for this.","commit_id":"56d9a0ec343c6082ef61f6667806f9fff184ffff"}],"nova/tests/api/openstack/compute/test_images.py":[{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"e651a9a87e5ec7ff2a986788bf9e538a0ca64768","unresolved":false,"context_lines":[{"line_number":668,"context_line":"    def test_delete_deleted_image(self):"},{"line_number":669,"context_line":"        \"\"\"If you try to delete a deleted image, you get back 403 Forbidden.\"\"\""},{"line_number":670,"context_line":"        deleted_image_id \u003d 128"},{"line_number":671,"context_line":"            # see nova.tests.api.openstack.fakes:_make_image_fixtures"},{"line_number":672,"context_line":"        request \u003d fakes.HTTPRequest.blank("},{"line_number":673,"context_line":"              \u0027/v2/fake/images/%s\u0027 % deleted_image_id)"},{"line_number":674,"context_line":"        request.method \u003d \u0027DELETE\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F%2Ba4%3D","line":671,"updated":"2013-03-04 21:12:52.000000000","message":"This comment is at the wrong level no?","commit_id":"56d9a0ec343c6082ef61f6667806f9fff184ffff"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8efed1980937a8faf4ea2c6fc9f8f26896c2a12d","unresolved":false,"context_lines":[{"line_number":668,"context_line":"    def test_delete_deleted_image(self):"},{"line_number":669,"context_line":"        \"\"\"If you try to delete a deleted image, you get back 403 Forbidden.\"\"\""},{"line_number":670,"context_line":"        deleted_image_id \u003d 128"},{"line_number":671,"context_line":"            # see nova.tests.api.openstack.fakes:_make_image_fixtures"},{"line_number":672,"context_line":"        request \u003d fakes.HTTPRequest.blank("},{"line_number":673,"context_line":"              \u0027/v2/fake/images/%s\u0027 % deleted_image_id)"},{"line_number":674,"context_line":"        request.method \u003d \u0027DELETE\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F%2BMA%3D","line":671,"in_reply_to":"AAAAN3%2F%2F%2Ba4%3D","updated":"2013-03-04 23:07:24.000000000","message":"Done","commit_id":"56d9a0ec343c6082ef61f6667806f9fff184ffff"}]}
