triage-guesser allowing long strings to match the middle of filenames too
For example, JobScheduler may indicate work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
Bug: 155117785
Change-Id: I12b69584b1d57d288a847d8fd56ec5d7bae3bd1b
diff --git a/development/triage-guesser.py b/development/triage-guesser.py
index a15b62e..1ed7987 100755
--- a/development/triage-guesser.py
+++ b/development/triage-guesser.py
@@ -78,7 +78,22 @@
self.resultsCache[name] = filePaths
return self.resultsCache[name]
-class InterestingFileFinder(object):
+ def tryToIdentifyFile(self, nameComponent):
+ if len(nameComponent) < 1:
+ return []
+ queries = [nameComponent + ".*", "nameComponent*"]
+ if len(nameComponent) >= 10:
+ # For a sufficiently specific query, allow it to match the middle of a filename too
+ queries.append("*" + nameComponent + ".*")
+ for query in queries:
+ matches = self.findIname(query)
+ if len(matches) > 0 and len(matches) <= 4:
+ # We found a small enough number of matches to have
+ # reasonable confidence in having found the right file
+ return matches
+ return []
+
+class InterestingWordChooser(object):
def __init__(self):
return
@@ -87,7 +102,7 @@
words = [word for word in words if len(word) >= 4]
words.sort(key=len, reverse=True)
return words
-interestingFileFinder = InterestingFileFinder()
+interestingWordChooser = InterestingWordChooser()
class GitLogger(object):
def __init__(self):
@@ -104,18 +119,17 @@
self.fileFinder = fileFinder
def recommend(self, bug):
- interestingWords = interestingFileFinder.findInterestingWords(bug.description)
+ interestingWords = interestingWordChooser.findInterestingWords(bug.description)
for word in interestingWords:
- for queryString in [word + "*", word + ".*"]:
- filePaths = self.fileFinder.findIname(queryString)
- if len(filePaths) > 0 and len(filePaths) <= 4:
- candidateAuthors = []
- for path in filePaths:
- thisAuthor = gitLogger.gitLog1Author(path)
- if len(candidateAuthors) == 0 or thisAuthor != candidateAuthors[-1]:
- candidateAuthors.append(thisAuthor)
- if len(candidateAuthors) == 1:
- return AssigneeRecommendation(candidateAuthors, "last touched " + os.path.basename(filePaths[0]))
+ filePaths = self.fileFinder.tryToIdentifyFile(word)
+ if len(filePaths) > 0:
+ candidateAuthors = []
+ for path in filePaths:
+ thisAuthor = gitLogger.gitLog1Author(path)
+ if len(candidateAuthors) == 0 or thisAuthor != candidateAuthors[-1]:
+ candidateAuthors.append(thisAuthor)
+ if len(candidateAuthors) == 1:
+ return AssigneeRecommendation(candidateAuthors, "last touched " + os.path.basename(filePaths[0]))
return None
class OwnersRule(RecommenderRule):
@@ -124,10 +138,10 @@
self.fileFinder = fileFinder
def recommend(self, bug):
- interestingWords = interestingFileFinder.findInterestingWords(bug.description)
+ interestingWords = interestingWordChooser.findInterestingWords(bug.description)
for word in interestingWords:
- for queryString in [word + "*", word + ".*"]:
- filePaths = self.fileFinder.findIname(queryString)
+ filePaths = self.fileFinder.tryToIdentifyFile(word)
+ if len(filePaths) > 0:
commonPrefix = os.path.commonprefix(filePaths)
dirToCheck = commonPrefix
if len(dirToCheck) < 1: