)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5a0035ee2de42b899bfd9c4af6659149d1b3d99b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ERROR:kolla.common.utils:nova-compute-ironic Failed with status: push_error"},{"line_number":30,"context_line":"ERROR:kolla.common.utils:nova-conductor Failed with status: push_error"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: Id2ab97bf4c0dc3423268a0ea435b56f4a65f7196"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_d0cd545d","line":32,"updated":"2019-10-14 12:24:42.000000000","message":"Needs a bug","commit_id":"efc3344dd3105becde84b8a12efb247812703d41"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"15288c39fc59afc74a63b397092355a22bc00af7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ERROR:kolla.common.utils:nova-compute-ironic Failed with status: push_error"},{"line_number":30,"context_line":"ERROR:kolla.common.utils:nova-conductor Failed with status: push_error"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: Id2ab97bf4c0dc3423268a0ea435b56f4a65f7196"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_702ca0ab","line":32,"in_reply_to":"3fa7e38b_d0cd545d","updated":"2019-10-14 12:53:56.000000000","message":"Done","commit_id":"efc3344dd3105becde84b8a12efb247812703d41"}],"kolla/image/build.py":[{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"beb320cc3333a0d12d5f8850057606f413ee0734","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                                  \u0027 (root)\u0027)"},{"line_number":351,"context_line":"            image.status \u003d STATUS_CONNECTION_ERROR"},{"line_number":352,"context_line":"        except PushError as message:"},{"line_number":353,"context_line":"            self.logger.error(message)"},{"line_number":354,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":355,"context_line":"        except Exception:"},{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_507ba48a","line":353,"range":{"start_line":353,"start_character":24,"end_line":353,"end_character":29},"updated":"2019-10-14 11:48:41.000000000","message":"error() as we want to print message and consider it done\n\nexception() would also add traceback which is not needed as we got here on purpose","commit_id":"69cd3d16480c1a5dc5556e1ec1e8021250a0f251"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"85e6f0b6f3796a49cb179abca16354705da77d7c","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                                  \u0027 have the correct privileges to run Docker\u0027"},{"line_number":350,"context_line":"                                  \u0027 (root)\u0027)"},{"line_number":351,"context_line":"            image.status \u003d STATUS_CONNECTION_ERROR"},{"line_number":352,"context_line":"        except PushError as message:"},{"line_number":353,"context_line":"            self.logger.error(message)"},{"line_number":354,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":355,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_6357ea59","line":352,"range":{"start_line":352,"start_character":28,"end_line":352,"end_character":35},"updated":"2019-10-15 10:12:24.000000000","message":"This name is a bit odd - it\u0027s an exception. We don\u0027t need a variable if we do logger.exception.","commit_id":"0e4fc9070ec575ed4f43221b72687a28129c10eb"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"85e6f0b6f3796a49cb179abca16354705da77d7c","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                                  \u0027 (root)\u0027)"},{"line_number":351,"context_line":"            image.status \u003d STATUS_CONNECTION_ERROR"},{"line_number":352,"context_line":"        except PushError as message:"},{"line_number":353,"context_line":"            self.logger.error(message)"},{"line_number":354,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":355,"context_line":"        except Exception:"},{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_0367164f","line":353,"range":{"start_line":353,"start_character":24,"end_line":353,"end_character":29},"updated":"2019-10-15 10:12:24.000000000","message":"exception","commit_id":"0e4fc9070ec575ed4f43221b72687a28129c10eb"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"e26a369f47765b4ef45593a69b8c5e1e17241584","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                                  \u0027 (root)\u0027)"},{"line_number":351,"context_line":"            image.status \u003d STATUS_CONNECTION_ERROR"},{"line_number":352,"context_line":"        except PushError as message:"},{"line_number":353,"context_line":"            self.logger.error(message)"},{"line_number":354,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":355,"context_line":"        except Exception:"},{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_9542593d","line":353,"range":{"start_line":353,"start_character":24,"end_line":353,"end_character":29},"in_reply_to":"3fa7e38b_0367164f","updated":"2019-10-15 10:45:31.000000000","message":"current code:\n\nINFO:kolla.common.utils:Attempt number: 1 to run task: PushTask(base) \nINFO:kolla.common.utils.base:Trying to push the image\nERROR:kolla.common.utils.base:Get https://some.example.com:8432/v2/: dial tcp: lookup some.example.com: no such host\nINFO:kolla.common.utils:\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nwith self.logger.exception():\n\nINFO:kolla.common.utils.base:Trying to push the image\nERROR:kolla.common.utils.base:Get https://some.example.com:8432/v2/: dial tcp: lookup some.example.com: no such host\nTraceback (most recent call last):\n  File \"/home/hrw/devel/kolla/kolla/kolla/image/build.py\", line 346, in run\n    self.push_image(image)\n  File \"/home/hrw/devel/kolla/kolla/kolla/image/build.py\", line 379, in push_image\n    raise PushError(response[\u0027errorDetail\u0027][\u0027message\u0027])\nkolla.image.build.PushError: Get https://some.example.com:8432/v2/: dial tcp: lookup some.example.com: no such host\nINFO:kolla.common.utils:\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n\nI do not want that traceback.","commit_id":"0e4fc9070ec575ed4f43221b72687a28129c10eb"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"347c9a7b20b62b1531583887483ac1788fe18def","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                                  \u0027 (root)\u0027)"},{"line_number":351,"context_line":"            image.status \u003d STATUS_CONNECTION_ERROR"},{"line_number":352,"context_line":"        except PushError as message:"},{"line_number":353,"context_line":"            self.logger.error(message)"},{"line_number":354,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":355,"context_line":"        except Exception:"},{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_b51e7509","line":353,"range":{"start_line":353,"start_character":24,"end_line":353,"end_character":29},"in_reply_to":"3fa7e38b_9542593d","updated":"2019-10-15 11:05:10.000000000","message":"fair enough","commit_id":"0e4fc9070ec575ed4f43221b72687a28129c10eb"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"2b5b4ef4c5b3f19a991a9a34834b9a944c4d45cb","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        except PushError as exception:"},{"line_number":353,"context_line":"            self.logger.error(exception)"},{"line_number":354,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":355,"context_line":"        except Exception:"},{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"},{"line_number":357,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":358,"context_line":"        finally:"},{"line_number":359,"context_line":"            if (image.status not in STATUS_ERRORS"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_0e1c1a76","line":356,"range":{"start_line":355,"start_character":15,"end_line":356,"end_character":63},"updated":"2019-10-15 14:49:03.000000000","message":"a bit unrelated but maybe it\u0027s worth to expose the exception\u0027s type/message here anyway as \u0027unknown\u0027 is not helpful","commit_id":"b520a28a574e580c57487d45d6f052d72f33ec47"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"2b5b4ef4c5b3f19a991a9a34834b9a944c4d45cb","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"},{"line_number":357,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":358,"context_line":"        finally:"},{"line_number":359,"context_line":"            if (image.status not in STATUS_ERRORS"},{"line_number":360,"context_line":"                    and image.status !\u003d STATUS_UNPROCESSED):"},{"line_number":361,"context_line":"                self.logger.info(\u0027Pushed successfully\u0027)"},{"line_number":362,"context_line":"                self.success \u003d True"},{"line_number":363,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_ee141e4f","line":360,"range":{"start_line":359,"start_character":16,"end_line":360,"end_character":60},"updated":"2019-10-15 14:49:03.000000000","message":"why touch this?","commit_id":"b520a28a574e580c57487d45d6f052d72f33ec47"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"fb09901b3faa0af3798ceb919960e48b845f71cb","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"},{"line_number":357,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":358,"context_line":"        finally:"},{"line_number":359,"context_line":"            if (image.status not in STATUS_ERRORS"},{"line_number":360,"context_line":"                    and image.status !\u003d STATUS_UNPROCESSED):"},{"line_number":361,"context_line":"                self.logger.info(\u0027Pushed successfully\u0027)"},{"line_number":362,"context_line":"                self.success \u003d True"},{"line_number":363,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_44b67140","line":360,"range":{"start_line":359,"start_character":16,"end_line":360,"end_character":60},"in_reply_to":"3fa7e38b_ee141e4f","updated":"2019-10-15 16:00:17.000000000","message":"Done","commit_id":"b520a28a574e580c57487d45d6f052d72f33ec47"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"0e9a05b3a62e7740b497641947dc70dafbad2cba","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"},{"line_number":357,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":358,"context_line":"        finally:"},{"line_number":359,"context_line":"            if (image.status not in STATUS_ERRORS and"},{"line_number":360,"context_line":"                    image.status !\u003d STATUS_UNPROCESSED):"},{"line_number":361,"context_line":"                self.logger.info(\u0027Pushed successfully\u0027)"},{"line_number":362,"context_line":"                self.success \u003d True"},{"line_number":363,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_6725a55b","line":360,"range":{"start_line":359,"start_character":12,"end_line":360,"end_character":56},"updated":"2019-10-16 07:21:40.000000000","message":"follow-up: ideally just create the STATUS_PUSHED","commit_id":"52cac09d3d0b8dcdbc8d68a0bcc8092008220309"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"6b49323324b12f97ed0025ba10e2f1083deab84c","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"},{"line_number":357,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":358,"context_line":"        finally:"},{"line_number":359,"context_line":"            if (image.status not in STATUS_ERRORS and"},{"line_number":360,"context_line":"                    image.status !\u003d STATUS_UNPROCESSED):"},{"line_number":361,"context_line":"                self.logger.info(\u0027Pushed successfully\u0027)"},{"line_number":362,"context_line":"                self.success \u003d True"},{"line_number":363,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_47c8a953","line":360,"range":{"start_line":359,"start_character":12,"end_line":360,"end_character":56},"in_reply_to":"3fa7e38b_277fad15","updated":"2019-10-16 07:35:06.000000000","message":"yeah, this needs evaluation (debt paying)","commit_id":"52cac09d3d0b8dcdbc8d68a0bcc8092008220309"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"c4ef7e81c31a41573eb2a0adc44d59a39659326e","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"},{"line_number":357,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":358,"context_line":"        finally:"},{"line_number":359,"context_line":"            if (image.status not in STATUS_ERRORS and"},{"line_number":360,"context_line":"                    image.status !\u003d STATUS_UNPROCESSED):"},{"line_number":361,"context_line":"                self.logger.info(\u0027Pushed successfully\u0027)"},{"line_number":362,"context_line":"                self.success \u003d True"},{"line_number":363,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_277fad15","line":360,"range":{"start_line":359,"start_character":12,"end_line":360,"end_character":56},"in_reply_to":"3fa7e38b_6725a55b","updated":"2019-10-16 07:29:25.000000000","message":"STATUS_BUILT is fine as we would need to replace more checks if STATUS_PUSHED gets added","commit_id":"52cac09d3d0b8dcdbc8d68a0bcc8092008220309"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"7333366bdd7a041a622c7b62e5ee5507d9e65c85","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"},{"line_number":357,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":358,"context_line":"        finally:"},{"line_number":359,"context_line":"            if (image.status not in STATUS_ERRORS and"},{"line_number":360,"context_line":"                    image.status !\u003d STATUS_UNPROCESSED):"},{"line_number":361,"context_line":"                self.logger.info(\u0027Pushed successfully\u0027)"},{"line_number":362,"context_line":"                self.success \u003d True"},{"line_number":363,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_87dd4142","line":360,"range":{"start_line":359,"start_character":12,"end_line":360,"end_character":56},"in_reply_to":"3fa7e38b_6725a55b","updated":"2019-10-16 07:22:41.000000000","message":"or well, can it be not success here anyway?","commit_id":"52cac09d3d0b8dcdbc8d68a0bcc8092008220309"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"c4ef7e81c31a41573eb2a0adc44d59a39659326e","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            self.logger.exception(\u0027Unknown error when pushing\u0027)"},{"line_number":357,"context_line":"            image.status \u003d STATUS_PUSH_ERROR"},{"line_number":358,"context_line":"        finally:"},{"line_number":359,"context_line":"            if (image.status not in STATUS_ERRORS and"},{"line_number":360,"context_line":"                    image.status !\u003d STATUS_UNPROCESSED):"},{"line_number":361,"context_line":"                self.logger.info(\u0027Pushed successfully\u0027)"},{"line_number":362,"context_line":"                self.success \u003d True"},{"line_number":363,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_0770713f","line":360,"range":{"start_line":359,"start_character":12,"end_line":360,"end_character":56},"in_reply_to":"3fa7e38b_87dd4142","updated":"2019-10-16 07:29:25.000000000","message":"hard to tell","commit_id":"52cac09d3d0b8dcdbc8d68a0bcc8092008220309"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"0e9a05b3a62e7740b497641947dc70dafbad2cba","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                raise PushError(response[\u0027errorDetail\u0027][\u0027message\u0027])"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        # Reset any previous errors."},{"line_number":382,"context_line":"        image.status \u003d STATUS_BUILT"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"class BuildTask(DockerTask):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_8728e132","line":382,"range":{"start_line":382,"start_character":23,"end_line":382,"end_character":35},"updated":"2019-10-16 07:21:40.000000000","message":"follow-up (p2): STATUS_PUSHED","commit_id":"52cac09d3d0b8dcdbc8d68a0bcc8092008220309"}],"kolla/tests/test_build.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"baaf776fc37a753ecbafd8188819f44a2ccc44ea","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        self.assertFalse(pusher.success)"},{"line_number":93,"context_line":"        self.assertEqual(build.STATUS_PUSH_ERROR, self.image.status)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @mock.patch(\u0027docker.version\u0027, \u00273.0.0\u0027)"},{"line_number":96,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"},{"line_number":97,"context_line":"    @mock.patch(\u0027docker.APIClient\u0027)"},{"line_number":98,"context_line":"    def test_push_image_failure_retry(self, mock_client):"},{"line_number":99,"context_line":"        self.dc \u003d mock_client"},{"line_number":100,"context_line":"        mock_client().push.side_effect \u003d [Exception, []]"},{"line_number":101,"context_line":"        pusher \u003d build.PushTask(self.conf, self.image)"},{"line_number":102,"context_line":"        pusher.run()"},{"line_number":103,"context_line":"        mock_client().push.assert_called_once_with("},{"line_number":104,"context_line":"            self.image.canonical_name, decode\u003dTrue, stream\u003dTrue)"},{"line_number":105,"context_line":"        self.assertFalse(pusher.success)"},{"line_number":106,"context_line":"        self.assertEqual(build.STATUS_PUSH_ERROR, self.image.status)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # Try again, this time without exception."},{"line_number":109,"context_line":"        pusher.reset()"},{"line_number":110,"context_line":"        pusher.run()"},{"line_number":111,"context_line":"        self.assertEqual(2, mock_client().push.call_count)"},{"line_number":112,"context_line":"        self.assertTrue(pusher.success)"},{"line_number":113,"context_line":"        self.assertEqual(build.STATUS_BUILT, self.image.status)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"},{"line_number":116,"context_line":"    @mock.patch(\u0027docker.APIClient\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_90ecbcbb","side":"PARENT","line":113,"range":{"start_line":95,"start_character":0,"end_line":113,"end_character":63},"updated":"2019-10-14 12:25:40.000000000","message":"The fact that you need to remove this shows that retries are broken","commit_id":"cf525a990059b684dae971a1905ea280d4866ed5"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"096d0180321fbffb153faa3118b83ccc8d44b23e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    @mock.patch(\u0027docker.APIClient\u0027)"},{"line_number":85,"context_line":"    def test_push_image_failure(self, mock_client):"},{"line_number":86,"context_line":"        self.dc \u003d mock_client"},{"line_number":87,"context_line":"        mock_client().push.side_effect \u003d build.PushError(\u0027mock push failure\u0027)"},{"line_number":88,"context_line":"        pusher \u003d build.PushTask(self.conf, self.image)"},{"line_number":89,"context_line":"        pusher.run()"},{"line_number":90,"context_line":"        mock_client().push.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_b5cc3589","line":87,"updated":"2019-10-15 11:10:47.000000000","message":"This isn\u0027t quite what happens inside push_image, client.push is a generator which yields dicts. How about:\n\nmock_client().push.return_value \u003d [{\u0027errorDetail\u0027: \u0027foo\u0027}]","commit_id":"4971fd8b1b5d85519ad18129d895c1cf36a1cf80"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"4701e7cb5c4694bb734ae8d400ef984471f96650","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    @mock.patch(\u0027docker.APIClient\u0027)"},{"line_number":85,"context_line":"    def test_push_image_failure(self, mock_client):"},{"line_number":86,"context_line":"        self.dc \u003d mock_client"},{"line_number":87,"context_line":"        mock_client().push.side_effect \u003d build.PushError(\u0027mock push failure\u0027)"},{"line_number":88,"context_line":"        pusher \u003d build.PushTask(self.conf, self.image)"},{"line_number":89,"context_line":"        pusher.run()"},{"line_number":90,"context_line":"        mock_client().push.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_b85c2c4b","line":87,"in_reply_to":"3fa7e38b_b5cc3589","updated":"2019-10-15 12:58:17.000000000","message":"Done","commit_id":"4971fd8b1b5d85519ad18129d895c1cf36a1cf80"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"096d0180321fbffb153faa3118b83ccc8d44b23e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        pusher.run()"},{"line_number":112,"context_line":"        self.assertEqual(2, mock_client().push.call_count)"},{"line_number":113,"context_line":"        self.assertTrue(pusher.success)"},{"line_number":114,"context_line":"        self.assertEqual(build.STATUS_BUILT, self.image.status)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"},{"line_number":117,"context_line":"    @mock.patch(\u0027docker.APIClient\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_55c70165","line":114,"updated":"2019-10-15 11:10:47.000000000","message":"Please add new tests to cover the case where docker gives you an error message, and leave these to cover the general Exception case.","commit_id":"4971fd8b1b5d85519ad18129d895c1cf36a1cf80"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"4701e7cb5c4694bb734ae8d400ef984471f96650","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        pusher.run()"},{"line_number":112,"context_line":"        self.assertEqual(2, mock_client().push.call_count)"},{"line_number":113,"context_line":"        self.assertTrue(pusher.success)"},{"line_number":114,"context_line":"        self.assertEqual(build.STATUS_BUILT, self.image.status)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"},{"line_number":117,"context_line":"    @mock.patch(\u0027docker.APIClient\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_58573827","line":114,"in_reply_to":"3fa7e38b_55c70165","updated":"2019-10-15 12:58:17.000000000","message":"Done","commit_id":"4971fd8b1b5d85519ad18129d895c1cf36a1cf80"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"d74ac56033c403302d0da5e781a03ad196852efc","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        self.assertTrue(pusher.success)"},{"line_number":115,"context_line":"        self.assertEqual(build.STATUS_BUILT, self.image.status)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch(\u0027docker.version\u0027, \u00273.0.0\u0027)"},{"line_number":118,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"},{"line_number":119,"context_line":"    @mock.patch(\u0027docker.APIClient\u0027)"},{"line_number":120,"context_line":"    def test_push_image_failure_error(self, mock_client):"},{"line_number":121,"context_line":"        \"\"\"Docker connected, failure to push\"\"\""},{"line_number":122,"context_line":"        self.dc \u003d mock_client"},{"line_number":123,"context_line":"        mock_client().push.return_value \u003d [{\u0027errorDetail\u0027: {\u0027message\u0027:"},{"line_number":124,"context_line":"                                                            \u0027mock push fail\u0027}}]"},{"line_number":125,"context_line":"        pusher \u003d build.PushTask(self.conf, self.image)"},{"line_number":126,"context_line":"        pusher.run()"},{"line_number":127,"context_line":"        mock_client().push.assert_called_once_with("},{"line_number":128,"context_line":"            self.image.canonical_name, decode\u003dTrue, stream\u003dTrue)"},{"line_number":129,"context_line":"        self.assertFalse(pusher.success)"},{"line_number":130,"context_line":"        self.assertEqual(build.STATUS_PUSH_ERROR, self.image.status)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @mock.patch(\u0027docker.version\u0027, \u00273.0.0\u0027)"},{"line_number":133,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_e7e3d532","line":130,"range":{"start_line":117,"start_character":0,"end_line":130,"end_character":68},"updated":"2019-10-16 06:56:21.000000000","message":"this one is redundant with below","commit_id":"52cac09d3d0b8dcdbc8d68a0bcc8092008220309"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"0e9a05b3a62e7740b497641947dc70dafbad2cba","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        self.assertTrue(pusher.success)"},{"line_number":115,"context_line":"        self.assertEqual(build.STATUS_BUILT, self.image.status)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch(\u0027docker.version\u0027, \u00273.0.0\u0027)"},{"line_number":118,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"},{"line_number":119,"context_line":"    @mock.patch(\u0027docker.APIClient\u0027)"},{"line_number":120,"context_line":"    def test_push_image_failure_error(self, mock_client):"},{"line_number":121,"context_line":"        \"\"\"Docker connected, failure to push\"\"\""},{"line_number":122,"context_line":"        self.dc \u003d mock_client"},{"line_number":123,"context_line":"        mock_client().push.return_value \u003d [{\u0027errorDetail\u0027: {\u0027message\u0027:"},{"line_number":124,"context_line":"                                                            \u0027mock push fail\u0027}}]"},{"line_number":125,"context_line":"        pusher \u003d build.PushTask(self.conf, self.image)"},{"line_number":126,"context_line":"        pusher.run()"},{"line_number":127,"context_line":"        mock_client().push.assert_called_once_with("},{"line_number":128,"context_line":"            self.image.canonical_name, decode\u003dTrue, stream\u003dTrue)"},{"line_number":129,"context_line":"        self.assertFalse(pusher.success)"},{"line_number":130,"context_line":"        self.assertEqual(build.STATUS_PUSH_ERROR, self.image.status)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @mock.patch(\u0027docker.version\u0027, \u00273.0.0\u0027)"},{"line_number":133,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_0714f1e7","line":130,"range":{"start_line":117,"start_character":0,"end_line":130,"end_character":68},"in_reply_to":"3fa7e38b_e7e3d532","updated":"2019-10-16 07:21:40.000000000","message":"hrw explained these mirror non-error unit tests","commit_id":"52cac09d3d0b8dcdbc8d68a0bcc8092008220309"}]}
