)]}'
{"ironic/drivers/modules/image_cache.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"036e98901016422de7e456552cf007ca6d7eb099","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                \"to %(dst_path)s, error: %(exc)s\","},{"line_number":172,"context_line":"                {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":173,"context_line":"                 \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":174,"context_line":"        finally:"},{"line_number":175,"context_line":"            utils.rmtree_without_raise(tmp_dir)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @lockutils.synchronized(\u0027master_image\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d78448b1","line":174,"updated":"2018-11-12 11:16:08.000000000","message":"Yeah, we need to raise an ironic exception instead of the confusing OSError.","commit_id":"bb0fce1178d63d5af08730347f47f82ab9a436df"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"e3eddadb5a68e5b3e34e9ee2ad6bb6d60cc39ec4","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                \"to %(dst_path)s, error: %(exc)s\","},{"line_number":172,"context_line":"                {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":173,"context_line":"                 \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":174,"context_line":"        finally:"},{"line_number":175,"context_line":"            utils.rmtree_without_raise(tmp_dir)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @lockutils.synchronized(\u0027master_image\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8b7f9367","line":174,"updated":"2018-11-12 05:15:09.000000000","message":"we need to reraise this exception.\n\nI also think the exception catching covers more than it should, if we have some issue in the _fetch, will be also reported as linking issue, which is not appropriate.","commit_id":"bb0fce1178d63d5af08730347f47f82ab9a436df"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"c01b26333212508537ead1535cc1fd46a2e30ba0","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                \"to %(dst_path)s, error: %(exc)s\","},{"line_number":172,"context_line":"                {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":173,"context_line":"                 \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":174,"context_line":"        finally:"},{"line_number":175,"context_line":"            utils.rmtree_without_raise(tmp_dir)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @lockutils.synchronized(\u0027master_image\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_516a88b3","line":174,"in_reply_to":"3f79a3b5_8b7f9367","updated":"2018-11-12 08:42:24.000000000","message":"Hi Kaifeng, thanks for the review \u003d)\n\nYeah it makes sense, so to handle the exception and reraise does it make sense to you add a try/except block for the os.link code?","commit_id":"bb0fce1178d63d5af08730347f47f82ab9a436df"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"c01b26333212508537ead1535cc1fd46a2e30ba0","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                \"to %(dst_path)s, error: %(exc)s\","},{"line_number":172,"context_line":"                {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":173,"context_line":"                 \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":174,"context_line":"        finally:"},{"line_number":175,"context_line":"            utils.rmtree_without_raise(tmp_dir)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @lockutils.synchronized(\u0027master_image\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_964a567f","line":174,"in_reply_to":"3f79a3b5_8b7f9367","updated":"2018-11-12 08:42:24.000000000","message":"It makes sense for sure! I will push another patch for that. Thanks!","commit_id":"bb0fce1178d63d5af08730347f47f82ab9a436df"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"760a9f06e6a2d4337280d1281c67692fe762189c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        :param dest_path: destination file path"},{"line_number":153,"context_line":"        :param ctx: context"},{"line_number":154,"context_line":"        :param force_raw: boolean value, whether to convert the image to raw"},{"line_number":155,"context_line":"                          format"},{"line_number":156,"context_line":"        \"\"\""},{"line_number":157,"context_line":"        # TODO(ghe): timeout and retry for downloads"},{"line_number":158,"context_line":"        # TODO(ghe): logging when image cannot be created"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_bd5f2adc","line":155,"updated":"2018-11-12 15:23:40.000000000","message":"nit: It might be better to add the exception.","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"78ae175dcdb4e8c41d70ab102b98750d3f303463","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        :param dest_path: destination file path"},{"line_number":153,"context_line":"        :param ctx: context"},{"line_number":154,"context_line":"        :param force_raw: boolean value, whether to convert the image to raw"},{"line_number":155,"context_line":"                          format"},{"line_number":156,"context_line":"        \"\"\""},{"line_number":157,"context_line":"        # TODO(ghe): timeout and retry for downloads"},{"line_number":158,"context_line":"        # TODO(ghe): logging when image cannot be created"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_bd9deafd","line":155,"in_reply_to":"3f79a3b5_bd5f2adc","updated":"2018-11-12 19:08:40.000000000","message":"I will update in the next ps","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"23b440379cab5758460865b62c604fab453409d8","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        :param dest_path: destination file path"},{"line_number":153,"context_line":"        :param ctx: context"},{"line_number":154,"context_line":"        :param force_raw: boolean value, whether to convert the image to raw"},{"line_number":155,"context_line":"                          format"},{"line_number":156,"context_line":"        \"\"\""},{"line_number":157,"context_line":"        # TODO(ghe): timeout and retry for downloads"},{"line_number":158,"context_line":"        # TODO(ghe): logging when image cannot be created"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b44655a8","line":155,"in_reply_to":"3f79a3b5_bd9deafd","updated":"2018-11-13 14:54:55.000000000","message":"Done","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"760a9f06e6a2d4337280d1281c67692fe762189c","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            os.link(tmp_path, master_path)"},{"line_number":167,"context_line":"            os.link(master_path, dest_path)"},{"line_number":168,"context_line":"        except OSError as exc:"},{"line_number":169,"context_line":"            msg \u003d (\"Could not link image %(img_href)s from %(src_path)s \""},{"line_number":170,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_5dfa9610","line":169,"updated":"2018-11-12 15:23:40.000000000","message":"It would be better to wrap this message with _() because this is visible for users.","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"78ae175dcdb4e8c41d70ab102b98750d3f303463","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            os.link(tmp_path, master_path)"},{"line_number":167,"context_line":"            os.link(master_path, dest_path)"},{"line_number":168,"context_line":"        except OSError as exc:"},{"line_number":169,"context_line":"            msg \u003d (\"Could not link image %(img_href)s from %(src_path)s \""},{"line_number":170,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_7d61920f","line":169,"in_reply_to":"3f79a3b5_5dfa9610","updated":"2018-11-12 19:08:40.000000000","message":"Ack","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d18c827f650bc8aa3c4423613aa9abcc18688019","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            os.link(tmp_path, master_path)"},{"line_number":167,"context_line":"            os.link(master_path, dest_path)"},{"line_number":168,"context_line":"        except OSError as exc:"},{"line_number":169,"context_line":"            msg \u003d (\"Could not link image %(img_href)s from %(src_path)s \""},{"line_number":170,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_7a10b1ab","line":169,"in_reply_to":"3f79a3b5_5dfa9610","updated":"2018-11-13 01:41:03.000000000","message":"I remember we didn\u0027t translate log messages a few cycles ago, we only prefix _() with messages exposed from the API, no?","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"23b440379cab5758460865b62c604fab453409d8","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            os.link(tmp_path, master_path)"},{"line_number":167,"context_line":"            os.link(master_path, dest_path)"},{"line_number":168,"context_line":"        except OSError as exc:"},{"line_number":169,"context_line":"            msg \u003d (\"Could not link image %(img_href)s from %(src_path)s \""},{"line_number":170,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_34c8051f","line":169,"in_reply_to":"3f79a3b5_7a10b1ab","updated":"2018-11-13 14:54:55.000000000","message":"I didnt change in the next ps, but if necessary i will","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"760a9f06e6a2d4337280d1281c67692fe762189c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":173,"context_line":"            LOG.exception(msg)"},{"line_number":174,"context_line":"            raise exception.IronicException(msg)"},{"line_number":175,"context_line":"        finally:"},{"line_number":176,"context_line":"            utils.rmtree_without_raise(tmp_dir)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1d1f3e0b","line":173,"updated":"2018-11-12 15:23:40.000000000","message":"LOG.error might be enough.","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"78ae175dcdb4e8c41d70ab102b98750d3f303463","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":173,"context_line":"            LOG.exception(msg)"},{"line_number":174,"context_line":"            raise exception.IronicException(msg)"},{"line_number":175,"context_line":"        finally:"},{"line_number":176,"context_line":"            utils.rmtree_without_raise(tmp_dir)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ce782e2d","line":173,"in_reply_to":"3f79a3b5_1d1f3e0b","updated":"2018-11-12 19:08:40.000000000","message":"ok","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"23b440379cab5758460865b62c604fab453409d8","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":173,"context_line":"            LOG.exception(msg)"},{"line_number":174,"context_line":"            raise exception.IronicException(msg)"},{"line_number":175,"context_line":"        finally:"},{"line_number":176,"context_line":"            utils.rmtree_without_raise(tmp_dir)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_54cd812d","line":173,"in_reply_to":"3f79a3b5_ce782e2d","updated":"2018-11-13 14:54:55.000000000","message":"Done","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"760a9f06e6a2d4337280d1281c67692fe762189c","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":173,"context_line":"            LOG.exception(msg)"},{"line_number":174,"context_line":"            raise exception.IronicException(msg)"},{"line_number":175,"context_line":"        finally:"},{"line_number":176,"context_line":"            utils.rmtree_without_raise(tmp_dir)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_9df90ec7","line":174,"updated":"2018-11-12 15:23:40.000000000","message":"I prefer using a more specific exception such as  ImageDownloadFailed.","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d18c827f650bc8aa3c4423613aa9abcc18688019","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":173,"context_line":"            LOG.exception(msg)"},{"line_number":174,"context_line":"            raise exception.IronicException(msg)"},{"line_number":175,"context_line":"        finally:"},{"line_number":176,"context_line":"            utils.rmtree_without_raise(tmp_dir)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_da630546","line":174,"in_reply_to":"3f79a3b5_4e8ade12","updated":"2018-11-13 01:41:03.000000000","message":"I think this make sense because it\u0027s part of the image download process.\n\nYou can also add your new exception, if you want to be more specific on this.","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"78ae175dcdb4e8c41d70ab102b98750d3f303463","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":172,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":173,"context_line":"            LOG.exception(msg)"},{"line_number":174,"context_line":"            raise exception.IronicException(msg)"},{"line_number":175,"context_line":"        finally:"},{"line_number":176,"context_line":"            utils.rmtree_without_raise(tmp_dir)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_4e8ade12","line":174,"in_reply_to":"3f79a3b5_9df90ec7","updated":"2018-11-12 19:08:40.000000000","message":"The problem is more that the hard link will fail not sure if ImageDownloadFailed would be correct in that case","commit_id":"5db7b2a9407428ee9edae6770510798c6c1c60ff"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"c6f37bf660d6db30a7444c4fa274a4c1785bae45","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            os.link(tmp_path, master_path)"},{"line_number":170,"context_line":"            os.link(master_path, dest_path)"},{"line_number":171,"context_line":"        except OSError as exc:"},{"line_number":172,"context_line":"            msg \u003d (\"Could not link image %(img_href)s from %(src_path)s \""},{"line_number":173,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":174,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":175,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":176,"context_line":"            LOG.error(msg)"},{"line_number":177,"context_line":"            raise exception.ImageDownloadFailed(msg)"},{"line_number":178,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_2d10b0f4","line":175,"range":{"start_line":172,"start_character":18,"end_line":175,"end_character":55},"updated":"2018-11-14 06:01:58.000000000","message":"Log translation is required as message is being passed to the exception at L177. Wrap this message with _().","commit_id":"38b7c7dbf80476d32826a73a95a79dd256fa2772"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"69ec6268ac4d678525a8d10ace4df0e73f77ec84","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            os.link(tmp_path, master_path)"},{"line_number":170,"context_line":"            os.link(master_path, dest_path)"},{"line_number":171,"context_line":"        except OSError as exc:"},{"line_number":172,"context_line":"            msg \u003d (\"Could not link image %(img_href)s from %(src_path)s \""},{"line_number":173,"context_line":"                   \"to %(dst_path)s, error: %(exc)s\","},{"line_number":174,"context_line":"                   {\u0027img_href\u0027: href, \u0027src_path\u0027: master_path,"},{"line_number":175,"context_line":"                    \u0027dst_path\u0027: dest_path, \u0027exc\u0027: exc})"},{"line_number":176,"context_line":"            LOG.error(msg)"},{"line_number":177,"context_line":"            raise exception.ImageDownloadFailed(msg)"},{"line_number":178,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_9038f79e","line":175,"range":{"start_line":172,"start_character":18,"end_line":175,"end_character":55},"in_reply_to":"3f79a3b5_2d10b0f4","updated":"2018-11-14 08:38:11.000000000","message":"Done","commit_id":"38b7c7dbf80476d32826a73a95a79dd256fa2772"}],"ironic/tests/unit/drivers/modules/test_image_cache.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"c6f37bf660d6db30a7444c4fa274a4c1785bae45","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                          self.cache._download_image,"},{"line_number":221,"context_line":"                          self.uuid, self.master_path, self.dest_path)"},{"line_number":222,"context_line":"        self.assertTrue(mock_fetch.called)"},{"line_number":223,"context_line":"        self.assertTrue(mock_link.called)"},{"line_number":224,"context_line":"        self.assertTrue(mock_log.error.called)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_adc840a7","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":41},"updated":"2018-11-14 06:01:58.000000000","message":"It should be:\nself.assertEqual(2, mock_link.call_count)","commit_id":"38b7c7dbf80476d32826a73a95a79dd256fa2772"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"69ec6268ac4d678525a8d10ace4df0e73f77ec84","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                          self.cache._download_image,"},{"line_number":221,"context_line":"                          self.uuid, self.master_path, self.dest_path)"},{"line_number":222,"context_line":"        self.assertTrue(mock_fetch.called)"},{"line_number":223,"context_line":"        self.assertTrue(mock_link.called)"},{"line_number":224,"context_line":"        self.assertTrue(mock_log.error.called)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b095f333","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":41},"in_reply_to":"3f79a3b5_adc840a7","updated":"2018-11-14 08:38:11.000000000","message":"Done","commit_id":"38b7c7dbf80476d32826a73a95a79dd256fa2772"}],"releasenotes/notes/invalid_cross_device_link-7ecf3543a8ada09f.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"036e98901016422de7e456552cf007ca6d7eb099","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Handle OSError exception when trying to create hard link and provide"},{"line_number":5,"context_line":"    better log information."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3f79a3b5_77b9b479","line":5,"updated":"2018-11-12 11:16:08.000000000","message":"something like \"Propertly reports an error when the image cache and the image HTTP or TFTP location are on different file system, causing hard linking to fail.\"","commit_id":"bb0fce1178d63d5af08730347f47f82ab9a436df"}]}
