Example #1
0
    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 ("")
Example #2
0
    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
Example #3
0
    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)
Example #4
0
    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 ("")
Example #5
0
 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
Example #6
0
 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
Example #7
0
 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, "  "))
Example #8
0
 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, "  "))
Example #9
0
    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
Example #10
0
    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)
Example #11
0
    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 ("")
Example #12
0
    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 ("")
Example #13
0
    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