)]}'
{"novaclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"9e4dc576331fcf82a0aff95b6106eba2497dc836","unresolved":false,"context_lines":[{"line_number":1774,"context_line":"        cmd \u003d (\u0027rebuild sample-server %s --user-data %s\u0027"},{"line_number":1775,"context_line":"               % (FAKE_UUID_1, invalid_file))"},{"line_number":1776,"context_line":"        self.assertRaises(exceptions.CommandError, self.run_command, cmd,"},{"line_number":1777,"context_line":"                          api_version\u003d\u00272.57\u0027)"},{"line_number":1778,"context_line":""},{"line_number":1779,"context_line":"    def test_rebuild_unset_user_data(self):"},{"line_number":1780,"context_line":"        self.run_command(\u0027rebuild sample-server %s --user-data-unset\u0027 %"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_733568da","line":1777,"updated":"2018-10-03 04:56:10.000000000","message":"nit:\n\u0027nova rebuild\u0027 command also raises CommandError in another case.\nSo it had better to check the message like 1799-1800.","commit_id":"cac7351b0ee9716f1be01e8711d6ed3a237362ca"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"9e4dc576331fcf82a0aff95b6106eba2497dc836","unresolved":false,"context_lines":[{"line_number":1796,"context_line":"               FAKE_UUID_1)"},{"line_number":1797,"context_line":"        ex \u003d self.assertRaises(exceptions.CommandError, self.run_command, cmd,"},{"line_number":1798,"context_line":"                               api_version\u003d\u00272.57\u0027)"},{"line_number":1799,"context_line":"        self.assertIn(\"Cannot specify \u0027--user-data-unset\u0027 with \""},{"line_number":1800,"context_line":"                      \"\u0027--user-data\u0027.\", six.text_type(ex))"},{"line_number":1801,"context_line":""},{"line_number":1802,"context_line":"    def test_rebuild_with_single_trusted_image_certificates(self):"},{"line_number":1803,"context_line":"        self.run_command(\u0027rebuild sample-server %s \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_33405032","line":1800,"range":{"start_line":1799,"start_character":0,"end_line":1800,"end_character":58},"updated":"2018-10-03 04:56:10.000000000","message":"Here","commit_id":"cac7351b0ee9716f1be01e8711d6ed3a237362ca"}],"novaclient/v2/shell.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"bd4d88840131834b9f5a4dfbc3f5a4aff51f5472","unresolved":false,"context_lines":[{"line_number":1916,"context_line":"                      \"\u0027--user-data\u0027.\"))"},{"line_number":1917,"context_line":"        elif args.user_data:"},{"line_number":1918,"context_line":"            try:"},{"line_number":1919,"context_line":"                userdata \u003d open(args.user_data)"},{"line_number":1920,"context_line":"            except IOError as e:"},{"line_number":1921,"context_line":"                raise exceptions.CommandError(_(\"Can\u0027t open \u0027%(user_data)s\u0027: \""},{"line_number":1922,"context_line":"                                                \"%(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_918e8424","line":1919,"updated":"2018-09-26 16:46:53.000000000","message":"This will leak the userdata file descriptor.","commit_id":"1160ba0e11d1fca24c4ced382638904f7f14078c"},{"author":{"_account_id":3031,"name":"Sam Morrison","email":"sorrison@gmail.com","username":"sorrison"},"change_message_id":"c66f2fb47723fc98dcaa0e50e4ab511e6031677f","unresolved":false,"context_lines":[{"line_number":1916,"context_line":"                      \"\u0027--user-data\u0027.\"))"},{"line_number":1917,"context_line":"        elif args.user_data:"},{"line_number":1918,"context_line":"            try:"},{"line_number":1919,"context_line":"                userdata \u003d open(args.user_data)"},{"line_number":1920,"context_line":"            except IOError as e:"},{"line_number":1921,"context_line":"                raise exceptions.CommandError(_(\"Can\u0027t open \u0027%(user_data)s\u0027: \""},{"line_number":1922,"context_line":"                                                \"%(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5cb431f1","line":1919,"in_reply_to":"3f79a3b5_918e8424","updated":"2018-10-01 00:05:10.000000000","message":"This was just copied from above for the boot command. I felt I should do the same thing to be consistent? \n\nYeah will sort out tests/release notes and crappy commit message :-)","commit_id":"1160ba0e11d1fca24c4ced382638904f7f14078c"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0615229cbac165c7f916eb80da26262071531802","unresolved":false,"context_lines":[{"line_number":1923,"context_line":"                                              {\u0027user_data\u0027: args.user_data,"},{"line_number":1924,"context_line":"                                              \u0027exc\u0027: e})"},{"line_number":1925,"context_line":"            else:"},{"line_number":1926,"context_line":"                kwargs[\u0027userdata\u0027] \u003d userdata"},{"line_number":1927,"context_line":""},{"line_number":1928,"context_line":"    if cs.api_version \u003e\u003d api_versions.APIVersion(\u00272.54\u0027):"},{"line_number":1929,"context_line":"        if args.key_unset:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_54fcfd0a","line":1926,"updated":"2018-10-01 15:30:22.000000000","message":"All right, I\u0027ve taken a closer look at the code to understand current uses of open() in this fashion.  I still see potential for a leak here, but that\u0027s really more critical in the library than in the CLI.  What I\u0027m going to suggest, though, is elimination of the \u0027else\u0027 clause, to avoid creating the \"userdata\" variable.  That would make this:\n\n    try:\n        kwargs[\u0027userdata\u0027] \u003d open(args.user_data)\n    except IOError as e:\n        raise exceptions.CommandError(_(\"Can\u0027t open \u0027%s(user_data)s\u0027: \"\n                                        \"%(exc)s\") %\n                                      {\u0027user_data\u0027: args.user_data,\n                                      \u0027exc\u0027: e})\n\n(I\u0027d also suggest a style change for the exception to look like the following, but that\u0027s optional:\n\n    raise exceptions.CommandError(\n        _(\"Can\u0027t open \u0027%s(user_data)s\u0027: %(exc)s\") % {\n            \u0027user_data\u0027: args.user_data,\n            \u0027exc\u0027: e,\n        }\n    )","commit_id":"c5b92ccadf6b6d665819090968538d2fa6b6f3b3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"9e4dc576331fcf82a0aff95b6106eba2497dc836","unresolved":false,"context_lines":[{"line_number":1916,"context_line":"                      \"\u0027--user-data\u0027.\"))"},{"line_number":1917,"context_line":"        elif args.user_data:"},{"line_number":1918,"context_line":"            try:"},{"line_number":1919,"context_line":"                kwargs[\u0027userdata\u0027] \u003d open(args.user_data)"},{"line_number":1920,"context_line":"            except IOError as e:"},{"line_number":1921,"context_line":"                raise exceptions.CommandError("},{"line_number":1922,"context_line":"                    _(\"Can\u0027t open \u0027%(user_data)s\u0027: %(exc)s\") % {"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_f34e586c","line":1919,"range":{"start_line":1919,"start_character":37,"end_line":1919,"end_character":41},"updated":"2018-10-03 04:56:10.000000000","message":"IMO, it had better to use the \u0027with\u0027 statement.\nBut the following document says that \" If you don’t explicitly close a file, Python’s garbage collector will eventually destroy the object and close the open file for you\"\n\nhttps://docs.python.org/3.5/tutorial/inputoutput.html#reading-and-writing-files\n\nSo it is a nit.","commit_id":"cac7351b0ee9716f1be01e8711d6ed3a237362ca"}],"releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"9e4dc576331fcf82a0aff95b6106eba2497dc836","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The user data argument to rebuild was passing the filename as is as userdata."},{"line_number":5,"context_line":"    Now this passes the contents of the filename as intended."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f79a3b5_3824afc2","line":5,"range":{"start_line":5,"start_character":36,"end_line":5,"end_character":48},"updated":"2018-10-03 04:56:10.000000000","message":"nit: the file?","commit_id":"cac7351b0ee9716f1be01e8711d6ed3a237362ca"}]}
