)]}'
{"zuul/ansible/base/callback/zuul_json.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94b1a2bc0a93279dd961155465d827c09e1259b1","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        # For now, just read in the old file and write it all out again"},{"line_number":180,"context_line":"        # This may well not scale from a memory perspective- but let\u0027s see how"},{"line_number":181,"context_line":"        # it goes."},{"line_number":182,"context_line":"        first_time \u003d not os.path.exists(self.output_path)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if first_time:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_5a5617d1","line":181,"updated":"2019-08-22 23:56:09.000000000","message":"This comment is no longer accurate.","commit_id":"7dac722e8b0e3be872f4db2522e6b408ccfcfbf5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"5f07e424ae973594714327fe874f805166ef889d","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        # For now, just read in the old file and write it all out again"},{"line_number":180,"context_line":"        # This may well not scale from a memory perspective- but let\u0027s see how"},{"line_number":181,"context_line":"        # it goes."},{"line_number":182,"context_line":"        first_time \u003d not os.path.exists(self.output_path)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if first_time:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_fbbb420c","line":181,"in_reply_to":"7faddb67_5a5617d1","updated":"2019-08-23 08:40:46.000000000","message":"Done","commit_id":"7dac722e8b0e3be872f4db2522e6b408ccfcfbf5"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94b1a2bc0a93279dd961155465d827c09e1259b1","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        outfile.seek(0, 2)"},{"line_number":193,"context_line":"        # Remove three bytes to eat the trailing newline written by the"},{"line_number":194,"context_line":"        # json.dump. This puts the \u0027,\u0027 on the end of lines."},{"line_number":195,"context_line":"        outfile.seek(outfile.tell() - 3)"},{"line_number":196,"context_line":"        if not first_time:"},{"line_number":197,"context_line":"            outfile.write(\u0027,\\n\u0027)"},{"line_number":198,"context_line":"        json.dump(self.playbook, outfile,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_5ab29708","line":195,"updated":"2019-08-22 23:56:09.000000000","message":"The comment here mentions bytes however we have opened the file in text mode.\n\nIf we opened the file in byte mode we would be able to replace these two seeks with:\n\n  outfile.seek(-3, 2)\n\nHowever json supports utf8 so I guess opening in text mode is safest for that.","commit_id":"7dac722e8b0e3be872f4db2522e6b408ccfcfbf5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"5f07e424ae973594714327fe874f805166ef889d","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        outfile.seek(0, 2)"},{"line_number":193,"context_line":"        # Remove three bytes to eat the trailing newline written by the"},{"line_number":194,"context_line":"        # json.dump. This puts the \u0027,\u0027 on the end of lines."},{"line_number":195,"context_line":"        outfile.seek(outfile.tell() - 3)"},{"line_number":196,"context_line":"        if not first_time:"},{"line_number":197,"context_line":"            outfile.write(\u0027,\\n\u0027)"},{"line_number":198,"context_line":"        json.dump(self.playbook, outfile,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_5bbff6fb","line":195,"in_reply_to":"7faddb67_5ab29708","updated":"2019-08-23 08:40:46.000000000","message":"Actually, I tried that, and you get:\n\nio.UnsupportedOperation: can\u0027t do nonzero end-relative seeks\n\nI don\u0027t think utf-8 multi-byte is relevant in this case because we\u0027re the ones writing the data and we know what it is. None of these characters are multi-byte, so we\u0027re in byte/char equiv land.","commit_id":"7dac722e8b0e3be872f4db2522e6b408ccfcfbf5"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"5b4989885860eeb94a993e2b3a425be66c6fe438","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            self._append_playbook(outfile, first_time)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _append_playbook(self, outfile, first_time):"},{"line_number":189,"context_line":"        outfile.seek(0, 2)"},{"line_number":190,"context_line":"        # Remove three bytes to eat the trailing newline written by the"},{"line_number":191,"context_line":"        # json.dump. This puts the \u0027,\u0027 on the end of lines."},{"line_number":192,"context_line":"        outfile.seek(outfile.tell() - 3)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_6e70ca09","line":189,"range":{"start_line":189,"start_character":24,"end_line":189,"end_character":25},"updated":"2019-08-26 18:21:25.000000000","message":"nit: this could be replaced by os.SEEK_END.","commit_id":"d495f2f2af7ff47e95c94b290a95f5b38dd1833d"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"d2848d464b3f1eed100fb92a576178c2b0161e74","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            self._append_playbook(outfile, first_time)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _append_playbook(self, outfile, first_time):"},{"line_number":189,"context_line":"        outfile.seek(0, 2)"},{"line_number":190,"context_line":"        # Remove three bytes to eat the trailing newline written by the"},{"line_number":191,"context_line":"        # json.dump. This puts the \u0027,\u0027 on the end of lines."},{"line_number":192,"context_line":"        outfile.seek(outfile.tell() - 3)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_48629bdb","line":189,"range":{"start_line":189,"start_character":24,"end_line":189,"end_character":25},"in_reply_to":"7faddb67_6e70ca09","updated":"2019-08-27 07:43:45.000000000","message":"Done","commit_id":"d495f2f2af7ff47e95c94b290a95f5b38dd1833d"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"5b4989885860eeb94a993e2b3a425be66c6fe438","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        outfile.seek(0, 2)"},{"line_number":190,"context_line":"        # Remove three bytes to eat the trailing newline written by the"},{"line_number":191,"context_line":"        # json.dump. This puts the \u0027,\u0027 on the end of lines."},{"line_number":192,"context_line":"        outfile.seek(outfile.tell() - 3)"},{"line_number":193,"context_line":"        if not first_time:"},{"line_number":194,"context_line":"            outfile.write(\u0027,\\n\u0027)"},{"line_number":195,"context_line":"        json.dump(self.playbook, outfile,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_ae4fa2bc","line":192,"updated":"2019-08-26 18:21:25.000000000","message":"outfile.tell() could also be replaced by a file_len procedure that does the seek_end and return tell()","commit_id":"d495f2f2af7ff47e95c94b290a95f5b38dd1833d"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"d2848d464b3f1eed100fb92a576178c2b0161e74","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        outfile.seek(0, 2)"},{"line_number":190,"context_line":"        # Remove three bytes to eat the trailing newline written by the"},{"line_number":191,"context_line":"        # json.dump. This puts the \u0027,\u0027 on the end of lines."},{"line_number":192,"context_line":"        outfile.seek(outfile.tell() - 3)"},{"line_number":193,"context_line":"        if not first_time:"},{"line_number":194,"context_line":"            outfile.write(\u0027,\\n\u0027)"},{"line_number":195,"context_line":"        json.dump(self.playbook, outfile,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_e86027d2","line":192,"in_reply_to":"7faddb67_ae4fa2bc","updated":"2019-08-27 07:43:45.000000000","message":"Yes, good call. Done in a followup.","commit_id":"d495f2f2af7ff47e95c94b290a95f5b38dd1833d"}]}
