)]}'
{"nova/cmd/manage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6baaf0b6bb3ee365c0e760667f4117fe3bf59da5","unresolved":false,"context_lines":[{"line_number":955,"context_line":"        table_to_rows_archived \u003d db.archive_deleted_rows(admin_context,"},{"line_number":956,"context_line":"                                                         max_rows)"},{"line_number":957,"context_line":"        if verbose:"},{"line_number":958,"context_line":"            # TODO(mriedem): Pass the 2nd column header for rows affected once"},{"line_number":959,"context_line":"            # that\u0027s in cliutils.print_dict and sync\u0027ed back to nova."},{"line_number":960,"context_line":"            cliutils.print_dict(table_to_rows_archived, _(\u0027Table\u0027))"},{"line_number":961,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_ffc80f24","line":958,"updated":"2015-10-08 16:10:12.000000000","message":"I can do this now since my o-i changes are merged, I need to do a sync change as a dependency for this.","commit_id":"28a4a4f60f9988341ad02ecca46d726572bd483f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"427560e97dee9b81a15684c29e06cb8dca553e58","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        if verbose:"},{"line_number":958,"context_line":"            # TODO(mriedem): Pass the 2nd column header for rows affected once"},{"line_number":959,"context_line":"            # that\u0027s in cliutils.print_dict and sync\u0027ed back to nova."},{"line_number":960,"context_line":"            cliutils.print_dict(table_to_rows_archived, _(\u0027Table\u0027))"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"    @args(\u0027--delete\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027delete\u0027,"},{"line_number":963,"context_line":"          help\u003d\u0027If specified, automatically delete any records found where \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_103380ac","line":960,"updated":"2015-10-08 14:56:37.000000000","message":"Per Johns comment about an empty dict, I should probably check if table_to_rows_archived is empty and if so, print out a message just saying there was nothing to do.","commit_id":"28a4a4f60f9988341ad02ecca46d726572bd483f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7c3f9ab35537475fd6ac46a11752f5cc83969eb2","unresolved":false,"context_lines":[{"line_number":74,"context_line":"from nova import context"},{"line_number":75,"context_line":"from nova import db"},{"line_number":76,"context_line":"from nova.db import migration"},{"line_number":77,"context_line":"from nova import exception"},{"line_number":78,"context_line":"from nova.i18n import _"},{"line_number":79,"context_line":"from nova import objects"},{"line_number":80,"context_line":"from nova.openstack.common import cliutils"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a26ad4f_3f6855f5","line":77,"updated":"2015-10-27 20:42:36.000000000","message":"It\u0027s imported here.  The code would explode if it weren\u0027t imported.","commit_id":"e37279b4597371fc5c362455edeb1cf7760fa728"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"eba2fabb6a57f44ab32bfaae88c1d4651af5086b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"from nova import context"},{"line_number":75,"context_line":"from nova import db"},{"line_number":76,"context_line":"from nova.db import migration"},{"line_number":77,"context_line":"from nova import exception"},{"line_number":78,"context_line":"from nova.i18n import _"},{"line_number":79,"context_line":"from nova import objects"},{"line_number":80,"context_line":"from nova.openstack.common import cliutils"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a26ad4f_36b5cdcc","line":77,"in_reply_to":"1a26ad4f_3f6855f5","updated":"2015-10-28 11:26:36.000000000","message":"Oh I\u0027m so sorry. Couldn\u0027t found it yesterday :)","commit_id":"e37279b4597371fc5c362455edeb1cf7760fa728"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"a3a5cf6a894052083b288a186a2c1cb44ad29b1c","unresolved":false,"context_lines":[{"line_number":957,"context_line":"                cliutils.print_dict(table_to_rows_archived, _(\u0027Table\u0027),"},{"line_number":958,"context_line":"                                    dict_value\u003d_(\u0027Number of Rows Archived\u0027))"},{"line_number":959,"context_line":"            else:"},{"line_number":960,"context_line":"                print(_(\u0027Nothing was archived.\u0027))"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"    @args(\u0027--delete\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027delete\u0027,"},{"line_number":963,"context_line":"          help\u003d\u0027If specified, automatically delete any records found where \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a26ad4f_cbdc1049","line":960,"updated":"2015-10-27 14:47:23.000000000","message":"It looks like \u0027_\u0027 is not imported. And possibly we don\u0027t need translation here.","commit_id":"e37279b4597371fc5c362455edeb1cf7760fa728"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7c3f9ab35537475fd6ac46a11752f5cc83969eb2","unresolved":false,"context_lines":[{"line_number":957,"context_line":"                cliutils.print_dict(table_to_rows_archived, _(\u0027Table\u0027),"},{"line_number":958,"context_line":"                                    dict_value\u003d_(\u0027Number of Rows Archived\u0027))"},{"line_number":959,"context_line":"            else:"},{"line_number":960,"context_line":"                print(_(\u0027Nothing was archived.\u0027))"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"    @args(\u0027--delete\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027delete\u0027,"},{"line_number":963,"context_line":"          help\u003d\u0027If specified, automatically delete any records found where \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a26ad4f_1f4a3984","line":960,"in_reply_to":"1a26ad4f_cbdc1049","updated":"2015-10-27 20:42:36.000000000","message":"See above. And strings being marked for translation is not consistent in here, but this is a CLI so I think it should be marked, plus the other print statement in this method / command is translatable.","commit_id":"e37279b4597371fc5c362455edeb1cf7760fa728"}],"nova/db/api.py":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"61da00c66687934f285dd310743bb4fc507e7db8","unresolved":false,"context_lines":[{"line_number":1906,"context_line":""},{"line_number":1907,"context_line":"        {"},{"line_number":1908,"context_line":"            \u0027instances\u0027: 5,"},{"line_number":1909,"context_line":"            \u0027block_device_mapping: 5,"},{"line_number":1910,"context_line":"            \u0027pci_devices\u0027: 2,"},{"line_number":1911,"context_line":"        }"},{"line_number":1912,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a2ca52d_0af3bd9f","line":1909,"range":{"start_line":1909,"start_character":13,"end_line":1909,"end_character":33},"updated":"2015-10-14 06:15:49.000000000","message":"Supernit repeat.","commit_id":"e14c26c9e27f0846cb1cb2f8b80a522f69ddd462"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a795306e599c1e2e411391c00034a19a632b8eb","unresolved":false,"context_lines":[{"line_number":1906,"context_line":""},{"line_number":1907,"context_line":"        {"},{"line_number":1908,"context_line":"            \u0027instances\u0027: 5,"},{"line_number":1909,"context_line":"            \u0027block_device_mapping: 5,"},{"line_number":1910,"context_line":"            \u0027pci_devices\u0027: 2,"},{"line_number":1911,"context_line":"        }"},{"line_number":1912,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a2ca52d_63e53736","line":1909,"in_reply_to":"5a2ca52d_0af3bd9f","updated":"2015-10-16 15:41:18.000000000","message":"I\u0027ll clean this up quick.","commit_id":"e14c26c9e27f0846cb1cb2f8b80a522f69ddd462"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"74c624232dda76b0e4ee0825f529df7bc1800c29","unresolved":false,"context_lines":[{"line_number":6059,"context_line":"        rows_archived \u003d _archive_deleted_rows_for_table("},{"line_number":6060,"context_line":"            context, tablename, max_rows\u003dmax_rows - total_rows_archived)"},{"line_number":6061,"context_line":"        total_rows_archived +\u003d rows_archived"},{"line_number":6062,"context_line":"        # Only report results for tables that had updates."},{"line_number":6063,"context_line":"        if rows_archived:"},{"line_number":6064,"context_line":"            table_to_rows_archived[tablename] \u003d rows_archived"},{"line_number":6065,"context_line":"        if total_rows_archived \u003e\u003d max_rows:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_9a333f14","line":6062,"updated":"2015-10-08 10:25:51.000000000","message":"Not 100% sure we want this, a zero result seems interesting, in some ways, like \"hey all done here\". But I can see arguments both ways.\n\nJust thinking about the case where no rows are archived at all, you just get an empty dict on the CLI.\n\nI am on the fence, I think this is fine.","commit_id":"28a4a4f60f9988341ad02ecca46d726572bd483f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"427560e97dee9b81a15684c29e06cb8dca553e58","unresolved":false,"context_lines":[{"line_number":6059,"context_line":"        rows_archived \u003d _archive_deleted_rows_for_table("},{"line_number":6060,"context_line":"            context, tablename, max_rows\u003dmax_rows - total_rows_archived)"},{"line_number":6061,"context_line":"        total_rows_archived +\u003d rows_archived"},{"line_number":6062,"context_line":"        # Only report results for tables that had updates."},{"line_number":6063,"context_line":"        if rows_archived:"},{"line_number":6064,"context_line":"            table_to_rows_archived[tablename] \u003d rows_archived"},{"line_number":6065,"context_line":"        if total_rows_archived \u003e\u003d max_rows:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_f05fe4e2","line":6062,"in_reply_to":"7a2fa921_9a333f14","updated":"2015-10-08 14:56:37.000000000","message":"There are something like 54 rows so I just didn\u0027t want to dump like a bunch of 0s in a table since it\u0027d seem to be noise to me, but in a production environment running this chances are things might not be 0 for most tables, I\u0027m not sure.  Depends on what you allow in your cloud.","commit_id":"28a4a4f60f9988341ad02ecca46d726572bd483f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"df4e17c66daff719d04fbb266c8f5013d05553cd","unresolved":false,"context_lines":[{"line_number":6042,"context_line":""},{"line_number":6043,"context_line":"        {"},{"line_number":6044,"context_line":"            \u0027instances\u0027: 5,"},{"line_number":6045,"context_line":"            \u0027block_device_mapping: 5,"},{"line_number":6046,"context_line":"            \u0027pci_devices\u0027: 2,"},{"line_number":6047,"context_line":"        }"},{"line_number":6048,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a2fa921_002507ad","line":6045,"updated":"2015-10-12 08:22:53.000000000","message":"supernit, missing \u0027 at end of block_device_mapping","commit_id":"e14c26c9e27f0846cb1cb2f8b80a522f69ddd462"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2a795306e599c1e2e411391c00034a19a632b8eb","unresolved":false,"context_lines":[{"line_number":6042,"context_line":""},{"line_number":6043,"context_line":"        {"},{"line_number":6044,"context_line":"            \u0027instances\u0027: 5,"},{"line_number":6045,"context_line":"            \u0027block_device_mapping: 5,"},{"line_number":6046,"context_line":"            \u0027pci_devices\u0027: 2,"},{"line_number":6047,"context_line":"        }"},{"line_number":6048,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a2ca52d_23d2df5c","line":6045,"in_reply_to":"7a2fa921_002507ad","updated":"2015-10-16 15:41:18.000000000","message":"Done","commit_id":"e14c26c9e27f0846cb1cb2f8b80a522f69ddd462"}],"nova/tests/unit/test_nova_manage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6baaf0b6bb3ee365c0e760667f4117fe3bf59da5","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        mock_db_archive.assert_called_once_with(mock.ANY, 20)"},{"line_number":394,"context_line":"        output \u003d sys.stdout.getvalue()"},{"line_number":395,"context_line":"        if verbose:"},{"line_number":396,"context_line":"            # TODO(mriedem): assert the actual expected table output once the"},{"line_number":397,"context_line":"            # table is sorted in cliutils.print_dict."},{"line_number":398,"context_line":"            self.assertThat(output,"},{"line_number":399,"context_line":"                            testtools.matchers.MatchesRegex("}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_ffefaf84","line":396,"updated":"2015-10-08 16:10:12.000000000","message":"I can handle this now.","commit_id":"28a4a4f60f9988341ad02ecca46d726572bd483f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"61da00c66687934f285dd310743bb4fc507e7db8","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        mock_db_archive.assert_called_once_with(20)"},{"line_number":392,"context_line":"        output \u003d sys.stdout.getvalue()"},{"line_number":393,"context_line":"        if verbose:"},{"line_number":394,"context_line":"            expected \u003d \u0027\u0027\u0027\\"},{"line_number":395,"context_line":"+-----------+-------------------------+"},{"line_number":396,"context_line":"| Table     | Number of Rows Archived |"},{"line_number":397,"context_line":"+-----------+-------------------------+"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a2ca52d_8a5a6d82","line":394,"updated":"2015-10-14 06:15:49.000000000","message":"I have never seen this syntax for a trailing slash in a multi-line string before. So there you go.","commit_id":"e14c26c9e27f0846cb1cb2f8b80a522f69ddd462"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06e5ba176280e16e6fc4255620a203ea9747cde6","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        mock_db_archive.assert_called_once_with(20)"},{"line_number":392,"context_line":"        output \u003d sys.stdout.getvalue()"},{"line_number":393,"context_line":"        if verbose:"},{"line_number":394,"context_line":"            expected \u003d \u0027\u0027\u0027\\"},{"line_number":395,"context_line":"+-----------+-------------------------+"},{"line_number":396,"context_line":"| Table     | Number of Rows Archived |"},{"line_number":397,"context_line":"+-----------+-------------------------+"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a2ca52d_9a57fb01","line":394,"in_reply_to":"5a2ca52d_8a5a6d82","updated":"2015-10-14 19:42:22.000000000","message":"Blatant copy from cliutils tests in oslo-incubator.","commit_id":"e14c26c9e27f0846cb1cb2f8b80a522f69ddd462"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"006666e3561d01a107f3e2c940b88d7d8c5e63c4","unresolved":false,"context_lines":[{"line_number":401,"context_line":"\u0027\u0027\u0027"},{"line_number":402,"context_line":"            self.assertEqual(expected, output)"},{"line_number":403,"context_line":"        else:"},{"line_number":404,"context_line":"            self.assertEqual(0, len(output))"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def test_archive_deleted_rows(self):"},{"line_number":407,"context_line":"        # Tests that we don\u0027t show any table output (not verbose)."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_147f5bab","line":404,"updated":"2015-10-19 17:11:25.000000000","message":"maybe\n    self.assertEqual(\u0027\u0027, output) ?","commit_id":"e37279b4597371fc5c362455edeb1cf7760fa728"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"006666e3561d01a107f3e2c940b88d7d8c5e63c4","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        self.commands.archive_deleted_rows(20, verbose\u003dTrue)"},{"line_number":418,"context_line":"        mock_db_archive.assert_called_once_with(20)"},{"line_number":419,"context_line":"        output \u003d sys.stdout.getvalue()"},{"line_number":420,"context_line":"        self.assertIn(\u0027Nothing was archived.\u0027, output)"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    @mock.patch.object(migration, \u0027db_null_instance_uuid_scan\u0027,"},{"line_number":423,"context_line":"                       return_value\u003d{\u0027foo\u0027: 0})"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_14567b29","line":420,"updated":"2015-10-19 17:11:25.000000000","message":"maybe\n    self.assertEqual(\u0027Nothing was archived.\\n\u0027, output) ?","commit_id":"e37279b4597371fc5c362455edeb1cf7760fa728"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bef90cacad7851a46abc4613abc43f62c5f3875c","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        self.commands.archive_deleted_rows(20, verbose\u003dTrue)"},{"line_number":418,"context_line":"        mock_db_archive.assert_called_once_with(20)"},{"line_number":419,"context_line":"        output \u003d sys.stdout.getvalue()"},{"line_number":420,"context_line":"        self.assertIn(\u0027Nothing was archived.\u0027, output)"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    @mock.patch.object(migration, \u0027db_null_instance_uuid_scan\u0027,"},{"line_number":423,"context_line":"                       return_value\u003d{\u0027foo\u0027: 0})"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_0ae501a7","line":420,"in_reply_to":"3a29b11f_14567b29","updated":"2015-10-26 14:02:25.000000000","message":"That wouldn\u0027t work because it\u0027s a translatable message object so it\u0027s unicode, so you\u0027d have to deal with that here.  Which is why I use assertIn since it\u0027s just simpler.","commit_id":"e37279b4597371fc5c362455edeb1cf7760fa728"}]}
