Spaces:
Running
Running
File size: 2,186 Bytes
cc857c8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import json, re, sys
d = json.load(open(sys.argv[1]))
KW = re.compile(r"(supersed|in favou?r of|duplicate of|already (been )?(fixed|merged|resolved)|fixed (by|in|with) #|resolved (by|in) #|closed by #|done in #|addressed (in|by) #)", re.I)
def merged_refs(n, created):
out = []
for e in n["timelineItems"]["nodes"]:
s = e.get("source") or e.get("subject")
if s and s.get("__typename") == "PullRequest" and s.get("merged") and s["number"] != n["number"]:
out.append({"pr": s["number"], "title": s["title"], "mergedAt": s["mergedAt"],
"closes": bool(e.get("willCloseTarget")) or e["__typename"] == "ConnectedEvent",
"base": s.get("baseRefName")})
c = e.get("canonical")
if c: out.append({"dup": c["number"], "state": c["state"]})
return out
def hints(n):
return [{"by": c["author"]["login"] if c["author"] else None, "at": c["createdAt"], "text": c["body"][:400]}
for c in n["comments"]["nodes"] if KW.search(c["body"])]
cands = []
for kind in ("issues", "prs"):
for n in d[kind]:
refs, h = merged_refs(n, n["createdAt"]), hints(n)
sup = []
if kind == "prs":
for iss in n["closingIssuesReferences"]["nodes"]:
for p in iss["closedByPullRequestsReferences"]["nodes"]:
if p["merged"] and p["number"] != n["number"]:
sup.append({"issue": iss["number"], "issue_state": iss["state"], "merged_pr": p["number"]})
if refs or h or sup:
score = 3 if (any(r.get("closes") for r in refs) or sup) else 2 if h else 1
cands.append({"kind": kind[:-1].replace("pr", "pr"), "number": n["number"], "title": n["title"],
"author": (n["author"] or {}).get("login"), "created": n["createdAt"], "updated": n["updatedAt"],
"draft": n.get("isDraft"), "merged_refs": refs, "hint_comments": h, "sibling_merged": sup, "score": score})
cands.sort(key=lambda c: -c["score"])
json.dump(cands, open(sys.argv[2], "w"), indent=1)
from collections import Counter
print(Counter((c["kind"], c["score"]) for c in cands))
|