)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"it does not detect this: module.Class.foo \u003d Mock()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"This limitation may be removed by adding a configurable recursion depth"},{"line_number":66,"context_line":"to the mock search algorithm."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Recommended Mocking Patterns:"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bab921fb_30a8d11f","line":66,"updated":"2015-04-25 20:24:08.000000000","message":"Looks like you added configurable recursion.  ;) Could you update the commit message, please?","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    pass"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"@patch.multiple(utils, execute_with_timeout\u003dDEFAULT,"},{"line_number":101,"context_line":"\t\tgenerate_random_password\u003dMagicMock(return_value\u003d1))"},{"line_number":102,"context_line":"def test_case(self, generate_random_password, execute_with_timeout):"},{"line_number":103,"context_line":"    pass"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bab921fb_307fb1ac","line":101,"updated":"2015-04-25 20:24:08.000000000","message":"probably best to remove the tabs while you\u0027re at it","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def test_case(self):"},{"line_number":115,"context_line":"    with patch.multiple(utils, execute_with_timeout_mock\u003dDEFAULT,"},{"line_number":116,"context_line":"\t\t\tgenerate_random_password\u003dMagicMock("},{"line_number":117,"context_line":"\t\t\t\treturn_value\u003d1)) as mocks:"},{"line_number":118,"context_line":"     \tpassword_mock \u003d mocks[\u0027generate_random_password\u0027]"},{"line_number":119,"context_line":"     \texecute_mock \u003d mocks[\u0027execute_with_timeout_mock\u0027]"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Change-Id: Ia487fada249aa903410a1a3fb3f717d6e0d581d2"},{"line_number":122,"context_line":"Closes-Bug: 1447833"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bab921fb_906f9dfb","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":55},"updated":"2015-04-25 20:24:08.000000000","message":"ditto","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"}],"doc/source/dev/testing.rst":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    caller may be hit by a non-functional - or worse - crippled module member"},{"line_number":29,"context_line":"    because some other (potentially totally unrelated) test case failed to"},{"line_number":30,"context_line":"    restore it."},{"line_number":31,"context_line":"    "},{"line_number":32,"context_line":"    - Dangling mock references shared across different test modules may"},{"line_number":33,"context_line":"    lead to unexpected results/behavior in multi-threaded environments. One"},{"line_number":34,"context_line":"    example could be a test case failing because a mock got called multiple"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bab921fb_b0418165","line":31,"updated":"2015-04-25 20:24:08.000000000","message":"docs shouldn\u0027t have \u0027dangling spaces\u0027  ;)","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"dangling mock objects after each test."},{"line_number":50,"context_line":"It does that by recording mock instances in loaded modules before and after"},{"line_number":51,"context_line":"a test case. It marks the test as failed and reports the leaked reference if it"},{"line_number":52,"context_line":"finds any. "},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Recommended Mocking Patterns"},{"line_number":55,"context_line":"----------------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bab921fb_502465c3","line":52,"updated":"2015-04-25 20:24:08.000000000","message":"ditto","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def setUp(self):"},{"line_number":64,"context_line":"        super(CouchbaseBackupTests, self).setUp()"},{"line_number":65,"context_line":"        self.exe_timeout_patch \u003d patch.object(utils, \u0027execute_with_timeout\u0027)"},{"line_number":66,"context_line":"    "},{"line_number":67,"context_line":"    def test_case(self):"},{"line_number":68,"context_line":"        # This line can be moved to the setUp() method if the mock object"},{"line_number":69,"context_line":"        # is not needed."}],"source_content_type":"text/x-rst","patch_set":4,"id":"bab921fb_505d8545","line":66,"updated":"2015-04-25 20:24:08.000000000","message":"ditto","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # This line can be moved to the setUp() method if the mock object"},{"line_number":69,"context_line":"        # is not needed."},{"line_number":70,"context_line":"        mock_object \u003d self.exe_timeout_patch.start()"},{"line_number":71,"context_line":"    "},{"line_number":72,"context_line":"    def tearDown(self):"},{"line_number":73,"context_line":"        super(CouchbaseBackupTests, self).tearDown()"},{"line_number":74,"context_line":"        self.exe_timeout_patch.stop()"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bab921fb_3056912a","line":71,"updated":"2015-04-25 20:24:08.000000000","message":"ditto","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    @patch.object(os, \u0027popen\u0027)"},{"line_number":86,"context_line":"    def test_case(self, popen_mock, execute_with_timeout_mock):"},{"line_number":87,"context_line":"        pass"},{"line_number":88,"context_line":"    "},{"line_number":89,"context_line":"    @patch.multiple(utils, execute_with_timeout\u003dDEFAULT,"},{"line_number":90,"context_line":"    generate_random_password\u003dMagicMock(return_value\u003d1))"},{"line_number":91,"context_line":"    def test_case(self, generate_random_password, execute_with_timeout):"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bab921fb_f032590f","line":88,"updated":"2015-04-25 20:24:08.000000000","message":"ditto","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        pass"},{"line_number":88,"context_line":"    "},{"line_number":89,"context_line":"    @patch.multiple(utils, execute_with_timeout\u003dDEFAULT,"},{"line_number":90,"context_line":"    generate_random_password\u003dMagicMock(return_value\u003d1))"},{"line_number":91,"context_line":"    def test_case(self, generate_random_password, execute_with_timeout):"},{"line_number":92,"context_line":"        pass"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bab921fb_f62252a2","line":90,"updated":"2015-04-25 20:24:08.000000000","message":"this line should be indented more to comply with pep8 ;)","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"3acc60225ed7ae44e5b73e3325c136b1abb64f2e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        with patch.object(utils, \u0027generate_random_password\u0027) as pwd_mock:"},{"line_number":102,"context_line":"            # Using the mocked implementation of \u0027generate_random_password\u0027."},{"line_number":103,"context_line":"        # Again code using the actual implementation of the method."},{"line_number":104,"context_line":"    "},{"line_number":105,"context_line":"    def test_case(self):"},{"line_number":106,"context_line":"        with patch.multiple(utils, execute_with_timeout_mock\u003dDEFAULT,"},{"line_number":107,"context_line":"                            generate_random_password\u003dMagicMock("}],"source_content_type":"text/x-rst","patch_set":4,"id":"bab921fb_b03861ef","line":104,"updated":"2015-04-25 20:24:08.000000000","message":"ditto","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"b9f57fb6dbd7863de3c7587730184a1509494108","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        pass"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @patch.multiple(utils, execute_with_timeout\u003dDEFAULT,"},{"line_number":90,"context_line":"    \t\t\t\tgenerate_random_password\u003dMagicMock(return_value\u003d1))"},{"line_number":91,"context_line":"    def test_case(self, generate_random_password, execute_with_timeout):"},{"line_number":92,"context_line":"        pass"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5ad0253b_4f6c719c","line":90,"updated":"2015-04-28 18:03:59.000000000","message":"tabs ...","commit_id":"9a197b7a3f987ddb1af252fb26f3d355627f5abc"}],"trove/tests/unittests/guestagent/test_backups.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"f74104289568a14455ae26f860292506bbfdf4dc","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        self.backup_runner_patch.stop()"},{"line_number":331,"context_line":"        self.exec_timeout_patch.stop()"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    # FIXME(pmalik): I think there is a problem with the current implementation"},{"line_number":334,"context_line":"    # of the BackupRunner. It checks for the \u0027process\u0027 attribute on __exist__"},{"line_number":335,"context_line":"    # and terminates the process if any."},{"line_number":336,"context_line":"    # It however always initializes the process to \u0027None\u0027 in the __init__."}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_808c5380","line":333,"updated":"2015-04-24 02:53:25.000000000","message":"I think the BackupRunner should be fixed. The extra patching here would not be then necessary.","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4efeafec9a0c0dacc1add934d800635d89c5bb31","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        self.backup_runner_patch.stop()"},{"line_number":331,"context_line":"        self.exec_timeout_patch.stop()"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    # FIXME(pmalik): I think there is a problem with the current implementation"},{"line_number":334,"context_line":"    # of the BackupRunner. It checks for the \u0027process\u0027 attribute on __exist__"},{"line_number":335,"context_line":"    # and terminates the process if any."},{"line_number":336,"context_line":"    # It however always initializes the process to \u0027None\u0027 in the __init__."}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_f6cc92bc","line":333,"in_reply_to":"bab921fb_808c5380","updated":"2015-04-25 20:32:27.000000000","message":"Hmm, maybe we should expedite your fix instead of hacking the test here ... just an idea for now ...","commit_id":"d021c85091d1869973b30ea226e95cae7a42f9f0"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"ed999b5e830d3fc5717872b848bfabcbad37fa1c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from trove.guestagent.strategies.restore.mysql_impl import MySQLRestoreMixin"},{"line_number":23,"context_line":"from trove.guestagent.strategies.backup import mysql_impl"},{"line_number":24,"context_line":"from trove.tests.unittests import trove_testtools"},{"line_number":25,"context_line":"from testtools.testcase import ExpectedException"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"BACKUP_XTRA_CLS \u003d (\"trove.guestagent.strategies.backup.\""},{"line_number":28,"context_line":"                   \"mysql_impl.InnoBackupEx\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ad0253b_9e13dc5c","line":25,"updated":"2015-04-28 18:54:59.000000000","message":"Shouldn\u0027t this be after mock.* and before trove.* ?","commit_id":"d5180be8a2e7dcd61a56f9f25cd10b660e4c6082"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"fa88c3d9ce1c77c3323019c7a0657c222036740d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from trove.guestagent.strategies.restore.mysql_impl import MySQLRestoreMixin"},{"line_number":23,"context_line":"from trove.guestagent.strategies.backup import mysql_impl"},{"line_number":24,"context_line":"from trove.tests.unittests import trove_testtools"},{"line_number":25,"context_line":"from testtools.testcase import ExpectedException"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"BACKUP_XTRA_CLS \u003d (\"trove.guestagent.strategies.backup.\""},{"line_number":28,"context_line":"                   \"mysql_impl.InnoBackupEx\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_59f4cef0","line":25,"in_reply_to":"5ad0253b_9e13dc5c","updated":"2015-05-04 21:41:00.000000000","message":"Same question here. I wonder why PEP8 passes on this?","commit_id":"d5180be8a2e7dcd61a56f9f25cd10b660e4c6082"}],"trove/tests/unittests/guestagent/test_service.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"ed999b5e830d3fc5717872b848bfabcbad37fa1c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from trove.tests.unittests import trove_testtools"},{"line_number":16,"context_line":"from mock import Mock"},{"line_number":17,"context_line":"from mock import patch"},{"line_number":18,"context_line":"from trove.guestagent import service"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ad0253b_1ed0ec52","line":15,"updated":"2015-04-28 18:54:59.000000000","message":"Should go last in the list","commit_id":"d5180be8a2e7dcd61a56f9f25cd10b660e4c6082"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"fa88c3d9ce1c77c3323019c7a0657c222036740d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from trove.tests.unittests import trove_testtools"},{"line_number":16,"context_line":"from mock import Mock"},{"line_number":17,"context_line":"from mock import patch"},{"line_number":18,"context_line":"from trove.guestagent import service"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_f9d95a84","line":15,"in_reply_to":"5ad0253b_1ed0ec52","updated":"2015-05-04 21:41:00.000000000","message":"Ditto.","commit_id":"d5180be8a2e7dcd61a56f9f25cd10b660e4c6082"}]}
