You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "showuon (via GitHub)" <gi...@apache.org> on 2023/04/06 02:16:53 UTC

[GitHub] [kafka] showuon commented on a diff in pull request #11096: Adding reviewers.py to help tag reviewers in commit message

showuon commented on code in PR #11096:
URL: https://github.com/apache/kafka/pull/11096#discussion_r1159217911


##########
reviewers.py:
##########
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from collections import defaultdict
+import operator
+import os
+import re
+
+
+def prompt_for_user():
+    while True:
+        try:
+            user_input = input("\nName or email (case insensitive): ") 
+        except (KeyboardInterrupt, EOFError):
+            return None
+        clean_input = user_input.strip().lower()
+        if clean_input != "":
+            return clean_input
+
+
+if __name__ == "__main__":
+    print("Utility to help generate 'Reviewers' string for Pull Requests. Use Ctrl+D or Ctrl+C to exit")
+    
+    stream = os.popen("git log | grep Reviewers")
+    lines = stream.readlines()
+    all_reviewers = defaultdict(int)
+    for line in lines:
+        stripped = line.strip().lstrip("Reviewers: ")
+        reviewers = stripped.split(",")
+        for reviewer in reviewers:
+            all_reviewers[reviewer.strip()] += 1 
+    parsed_reviewers = []
+
+    for item in all_reviewers.items():
+        m = re.match("(?P<name>.*)\s<(?P<email>.*)>", item[0])
+        if m is not None and len(m.groups()) == 2:
+            if item[1] > 2:
+                parsed_reviewers.append((m.group("name"), m.group("email"), item[1]))
+    
+    selected_reviewers = []
+    while True:
+        if len(selected_reviewers) != 0:
+            print(f"Reviewers so far: {selected_reviewers}")
+        user_input = prompt_for_user()
+        if user_input is None:
+            break
+        candidates = []
+        for reviewer, email, count in parsed_reviewers:
+            if reviewer.lower().startswith(user_input) or email.lower().startswith(user_input):
+                candidates.append((reviewer, email, count))
+            if len(candidates) == 10:
+                break
+        if len(candidates) == 0:
+            continue
+
+        print("\nPossible matches (in order of most recent):")

Review Comment:
   Should we mention we only list top 10 candidates?



##########
reviewers.py:
##########
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from collections import defaultdict
+import operator
+import os
+import re
+
+
+def prompt_for_user():
+    while True:
+        try:
+            user_input = input("\nName or email (case insensitive): ") 

Review Comment:
   nit: Since we're just checking the prefix of the name (or email), not sure if we should mention that here.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: jira-unsubscribe@kafka.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org