Add review scores to listing
Surely any review listing would be sadly incomplete without the review scores? Change-Id: I655ce598b5e9b9377f813f98305bf1654a34e894
This commit is contained in:
61
git-review
61
git-review
@@ -54,6 +54,7 @@ _has_color = None
|
|||||||
class colors:
|
class colors:
|
||||||
yellow = '\033[33m'
|
yellow = '\033[33m'
|
||||||
green = '\033[92m'
|
green = '\033[92m'
|
||||||
|
red = '\033[91m'
|
||||||
reset = '\033[0m'
|
reset = '\033[0m'
|
||||||
|
|
||||||
|
|
||||||
@@ -469,16 +470,55 @@ class Hacker:
|
|||||||
return cls(h.get('username'), h.get('name'), h.get('email'))
|
return cls(h.get('username'), h.get('name'), h.get('email'))
|
||||||
|
|
||||||
|
|
||||||
|
class Approval:
|
||||||
|
CodeReviewed, Approved, Submitted, Verified = range(4)
|
||||||
|
|
||||||
|
type_map = {
|
||||||
|
'CRVW': CodeReviewed,
|
||||||
|
'APRV': Approved,
|
||||||
|
'SUBM': Submitted,
|
||||||
|
'VRIF': Verified,
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, type, value):
|
||||||
|
self.type = type
|
||||||
|
self.value = value
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def parse(cls, a):
|
||||||
|
return cls(cls.type_map[a['type']], int(a['value']))
|
||||||
|
|
||||||
|
|
||||||
class PatchSet:
|
class PatchSet:
|
||||||
def __init__(self, revision, ref):
|
def __init__(self, revision, ref, approvals):
|
||||||
self.revision = revision
|
self.revision = revision
|
||||||
self.ref = ref
|
self.ref = ref
|
||||||
|
self.approvals = approvals
|
||||||
|
|
||||||
|
def _score(self, approval_type):
|
||||||
|
values = [a.value for a in self.approvals if a.type == approval_type]
|
||||||
|
if not values:
|
||||||
|
return 0
|
||||||
|
return max(values) if all(v > 0 for v in values) else min(values)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def code_review_score(self):
|
||||||
|
return self._score(Approval.CodeReviewed)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def verified_score(self):
|
||||||
|
return self._score(Approval.Verified)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def approved_score(self):
|
||||||
|
return self._score(Approval.Approved)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def parse(cls, ps):
|
def parse(cls, ps):
|
||||||
if not ps:
|
if not ps:
|
||||||
return None
|
return None
|
||||||
return cls(ps.get('revision'), ps.get('ref'))
|
return cls(ps.get('revision'), ps.get('ref'),
|
||||||
|
[Approval.parse(a) for a in ps.get('approvals', [])])
|
||||||
|
|
||||||
|
|
||||||
class Review:
|
class Review:
|
||||||
@@ -546,6 +586,7 @@ def list_reviews(remote, branch):
|
|||||||
project_name = parse_git_show(remote, "Push")[-1]
|
project_name = parse_git_show(remote, "Push")[-1]
|
||||||
|
|
||||||
(status, reviews) = run_ssh_query(remote,
|
(status, reviews) = run_ssh_query(remote,
|
||||||
|
"--current-patch-set",
|
||||||
"status:open",
|
"status:open",
|
||||||
"project:" + project_name,
|
"project:" + project_name,
|
||||||
"branch:" + branch)
|
"branch:" + branch)
|
||||||
@@ -560,7 +601,21 @@ def list_reviews(remote, branch):
|
|||||||
if check_color_support():
|
if check_color_support():
|
||||||
change = colors.yellow + change + colors.reset
|
change = colors.yellow + change + colors.reset
|
||||||
owner = colors.yellow + owner + colors.reset
|
owner = colors.yellow + owner + colors.reset
|
||||||
print("%s %s (%s)" % (change, r.subject, owner))
|
|
||||||
|
def format_score(prefix, value, neg=True):
|
||||||
|
score = prefix + "="
|
||||||
|
score += ("%-2d" if neg else "%d") % (value,)
|
||||||
|
if value and check_color_support():
|
||||||
|
color = colors.green if value > 0 else colors.red
|
||||||
|
score = color + score + colors.reset
|
||||||
|
return score
|
||||||
|
|
||||||
|
rscore = format_score("R", r.patchset.code_review_score)
|
||||||
|
vscore = format_score("V", r.patchset.verified_score)
|
||||||
|
ascore = format_score("A", r.patchset.approved_score, neg=False)
|
||||||
|
|
||||||
|
print("%s [%s %s %s] %s (%s)" %
|
||||||
|
(change, rscore, vscore, ascore, r.subject, owner))
|
||||||
count += 1
|
count += 1
|
||||||
except:
|
except:
|
||||||
print("Could not parse json query response:", sys.exc_info()[1])
|
print("Could not parse json query response:", sys.exc_info()[1])
|
||||||
|
|||||||
Reference in New Issue
Block a user