def format_comments(allcomments, bots, usecolor): comments = [] for comment in allcomments: if not comment.is_reviewer_in_list(bots): comments.append(comment) if len(comments) == 0: print (format_color(" No comments", usecolor, fg="grey")) print ("") print ("") else: for comment in comments: if comment.file is not None: print (" %s: (%s) %s:%d" % (format_color(comment.reviewer.name, usecolor, styles=["bold"]), comment.reviewer.username, comment.file, comment.line)) else: print (" %s: (%s)" % (format_color(comment.reviewer.name, usecolor, styles=["bold"]), comment.reviewer.username)) print ("") print (CommandComments.wrap_text(comment.message, " ")) print ("") print ("")
def votes_mapfunc(rep, col, row): patch = row.get_current_patch() if patch is None: LOG.error("No patch") return "" if col == "tests": coltype = "v" elif col == "reviews": coltype = "c" else: coltype = "w" votes = ReportBaseChange.get_approval_votes(patch) data = "%2s" % votes[coltype]["summary"] if rep.usecolor: if votes[coltype]["total"]["-2"] > 0: # Hard-nack from core return format_color(data, fg="red", styles=["bold"]) elif votes[coltype]["total"]["2"] > 0: # Approval from core return format_color(data, fg="green", styles=["bold"]) elif votes[coltype]["total"]["-1"] > 0: # Soft-nack from any return format_color(data, fg="red", styles=[]) elif votes[coltype]["total"]["1"] > 0: # Approval from any return format_color(data, fg="green", styles=[]) else: return data else: return data
def format_change(change, bots, usecolor, currentpatch, patchnum): print (format_color("Change %s (%s)" % (change.url, change.id), usecolor, fg="red", styles=["bold"])) print ("") print (" %s" % change.subject) print ("") print ("") patches = change.patches if currentpatch: patches = patches[-1:] elif patchnum: patches = patches[patchnum-1:patchnum] for patch in patches: print (format_color("Patch %d (%s)" % (patch.number, patch.revision), usecolor, fg="blue", styles=["bold"])) print ("") comments = [] comments.extend(patch.comments) prefix = "Patch Set %d" % patch.number for comment in change.comments: if comment.message.startswith(prefix): comments.append(comment) CommandComments.format_comments(comments, bots, usecolor)
def approvals_mapfunc(rep, col, row): patch = row.get_current_patch() if patch is None: LOG.error("No patch") return "" vals = {} neg = False plus = False for approval in patch.approvals: got_type = approval.action[0:1].lower() if got_type not in vals: vals[got_type] = [] vals[got_type].append(str(approval.value)) if approval.action == ModelApproval.ACTION_REVIEWED and approval.value > 1: plus = True if approval.value < 0: neg = True keys = list(vals.keys()) keys.sort(reverse=True) data = " ".join( map(lambda val: "%s=%s" % (val, ",".join(vals[val])), keys)) if neg and rep.usecolor: return format_color(data, fg="red") elif plus and rep.usecolor: return format_color(data, fg="green") else: return data
def approvals_mapfunc(rep, col, row): patch = row.get_current_patch() if patch is None: LOG.error("No patch") return "" vals = {} neg=False plus=False for approval in patch.approvals: got_type = approval.action[0:1].lower() if got_type not in vals: vals[got_type] = [] vals[got_type].append(str(approval.value)) if approval.action == ModelApproval.ACTION_REVIEWED and approval.value > 1: plus=True if approval.value < 0: neg=True keys = list(vals.keys()) keys.sort(reverse=True) data = " ".join(map(lambda val: "%s=%s" % (val, ",".join(vals[val])), keys)) if neg and rep.usecolor: return format_color(data, fg="red") elif plus and rep.usecolor: return format_color(data, fg="green") else: return data
def format_comment(comment, user, usecolor): if comment == "": return print (" %s (%s) wrote:" % (format_color(user.name, usecolor, styles=["bold"]), user.username)) print ("") print (CommandComments.wrap_text(comment, " "))
def approvals_mapfunc(rep, col, row): patch = row.get_current_patch() if patch is None: LOG.error("No patch") return "" votes = ReportBaseChange.get_approval_votes(patch) keys = list(votes.keys()) keys.sort(reverse=True) data = " ".join(map(lambda val: "%s=%s" % (val, votes[val]["details"]), keys)) if rep.usecolor: if votes["w"]["total"]["1"] > 0: # Stuff pending merge return format_color(data, fg="blue", styles=["bold"]) elif votes["w"]["total"]["-1"] > 0: # Work-in-progress return format_color(data, fg="magenta", styles=[]) elif votes["c"]["total"]["-2"] > 0: # Hard-nack from core return format_color(data, fg="red", styles=["bold"]) elif votes["c"]["total"]["-1"] > 0 or votes["v"]["total"]["-1"] > 0: # Nack from any or bots return format_color(data, fg="red", styles=[]) elif votes["c"]["total"]["2"] > 0: # Approval from core return format_color(data, fg="green", styles=["bold"]) elif votes["c"]["total"]["1"] > 0: # Approval from any return format_color(data, fg="green", styles=[]) else: return data else: return data
def format_change(change, bots, usecolor, currentpatch, patchnum): print (format_color("Change %s (%s)" % (change.url, change.id), usecolor, fg="red", styles=["bold"])) print ("") print (" %s" % change.subject) print ("") print ("") patches = change.patches if currentpatch: patches = patches[-1:] elif patchnum: patches = patches[patchnum-1:patchnum] for patch in patches: print (format_color("Patch %d (%s)" % (patch.number, patch.revision), usecolor, fg="blue", styles=["bold"])) print ("") comments = [] comments.extend(patch.comments) prefix = "Patch Set %d:" % patch.number abandoned = 0 for comment in change.comments: if comment.message.startswith(prefix): comments.append(comment) if comment.message.startswith(prefix + ": Abandoned"): abandoned = patch.number elif comment.message.startswith("Restored") and abandoned == patch.number: comments.append(comment) CommandComments.format_comments(comments, bots, usecolor)
def format_event(event, bots, projects, usecolor): if event.user is None or event.change is None: return if event.is_user_in_list(bots): return if len(projects) > 0 and event.change.project not in projects: return change = event.change print (format_color("Change %s (%s)" % (change.url, change.id), usecolor, fg="red", styles=["bold"])) print ("") print (" Project: %s" % change.project) print (" Subject: %s" % change.subject) if type(event) == ModelEventChangeRestore: print (" Action: %s" % format_color("change restored", styles=["bold"])) elif type(event) == ModelEventChangeAbandon: print (" Action: %s" % format_color("change abandoned", styles=["bold"])) elif type(event) == ModelEventChangeMerge: print (" Action: %s" % format_color("change merged", styles=["bold"])) elif type(event) == ModelEventCommentAdd: print (" Action: %s" % format_color("comment added", styles=["bold"])) if len(event.approvals) > 0: print (" Votes: %s" % format_color(CommandWatch.format_approvals(event.approvals), usecolor, fg="blue", styles=["bold"])) elif type(event) == ModelEventPatchCreate: print (" Action: %s" % format_color("change restored", styles=["bold"])) if type(event) == ModelEventCommentAdd: print ("") CommandWatch.format_comment(event.comment, event.user, usecolor) print ("") print ("")
def approvals_mapfunc(rep, col, row): patch = row.get_current_patch() if patch is None: LOG.error("No patch") return "" vals = {} votes = { "c": { "-2": 0, "-1": 0, "0": 0, "1": 0, "2": 0 }, "v": { "-2": 0, "-1": 0, "0": 0, "1": 0, "2": 0 }, "w": { "-1": 0, "0": 0, "1": 0 }, } for approval in patch.approvals: got_type = approval.action[0:1].lower() if got_type not in vals: vals[got_type] = [] vals[got_type].append(str(approval.value)) votes[got_type][str(approval.value)] = votes[got_type][str(approval.value)] + 1 keys = list(vals.keys()) keys.sort(reverse=True) data = " ".join(map(lambda val: "%s=%s" % (val, ",".join(vals[val])), keys)) if rep.usecolor: if votes["w"]["1"] > 0: # Stuff pending merge return format_color(data, fg="blue", styles=["bold"]) elif votes["w"]["-1"] > 0: # Work-in-progress return format_color(data, fg="magenta", styles=[]) elif votes["c"]["-2"] > 0: # Hard-nack from core return format_color(data, fg="red", styles=["bold"]) elif votes["c"]["-1"] > 0 or votes["v"]["-1"] > 0: # Nack from any or bots return format_color(data, fg="red", styles=[]) elif votes["c"]["2"] > 0: # Approval from core return format_color(data, fg="green", styles=["bold"]) elif votes["c"]["1"] > 0: # Approval from any return format_color(data, fg="green", styles=[]) else: return data else: return data