def format_body(msg, limit=None): if msg.is_patch: return _format_patch(msg, limit) text = Markup("") line_no = 0 for line in msg.body.replace("\r", "").split("\n"): line_no += 1 if line_no == limit: break if line.startswith(">"): text += (Markup("<span class='text-muted'>") + escape(line) + Markup("</span>\n")) else: text += escape(line + "\n") return text.rstrip()
def _format_patch(msg, limit=None): text = Markup("") is_diff = False # Predict the starting lines of each file name patch = msg.patch() file_lines = { " {} ".format(f.path): f for f in patch.added_files + patch.modified_files + patch.removed_files } line_no = 0 for line in msg.body.replace("\r", "").split("\n"): line_no += 1 if line_no == limit: text = text.rstrip() text += Markup( "\n<span class='text-muted'>[message trimmed]</span>") break if not is_diff: f = next( (key for key in file_lines.keys() if line.startswith(key)), None) if f != None: f = file_lines[f] text += Markup(" <a href='#{}'>{}</a>".format( escape(msg.message_id) + "+" + escape(f.path), escape(f.path))) try: stat = line[line.rindex(" ") + 1:] line = line[:line.rindex(" ") + 1] if "+" in stat and "-" in stat: removed = stat[stat.index("-"):] added = stat[:stat.index("-")] stat = Markup( ("<span class='text-success'>{}</span>" + "<span class='text-danger'>{}</span>").format( escape(added), escape(removed))) elif "-" in stat: stat = Markup( "<span class='text-danger'>{}</span>".format( escape(stat))) elif "+" in stat: stat = Markup( "<span class='text-success'>{}</span>".format( escape(stat))) else: stat = escape(stat) except ValueError: stat = Markup("") text += escape(line[len(f.path) + 1:]) text += escape(stat) text += Markup("\n") else: text += escape(line + "\n") if line.startswith("diff"): is_diff = True else: if line.strip() == "--": text += escape(line + "\n") elif line.startswith("---"): path = line[4:].lstrip("a/") text += ( Markup("<a href='#{0}' id='{0}' class='text-info'>".format( escape(msg.message_id) + "+" + escape(path))) + escape(line) + Markup("</a>\n")) elif line.startswith("+++"): text += (Markup("<span class='text-info'>") + escape(line) + Markup("</span>\n")) elif line.startswith("+"): text += (Markup("<span class='text-success'>") + Markup( ("<a class='text-success' href='#{0}-{1}' " + "id='{0}-{1}'>+</a>").format(escape( msg.message_id), line_no)) + escape(line[1:]) + Markup("</span>\n")) elif line.startswith("-"): text += (Markup("<span class='text-danger'>") + Markup( ("<a class='text-danger' href='#{0}-{1}' " + "id='{0}-{1}'>-</a>").format(escape( msg.message_id), line_no)) + escape(line[1:]) + Markup("</span>\n")) elif line.startswith(" "): text += (Markup("<a href='#{0}-{1}' id='{0}-{1}'> </a>".format( escape(msg.message_id), line_no)) + escape(line[1:] + "\n")) else: text += escape(line + "\n") return text.rstrip()