Index: owners.py |
diff --git a/owners.py b/owners.py |
index c53f0123d09cb9e7edb03d05278b42da9522f112..cc667beea3c575f527470d9bd25269b4e95c6bae 100644 |
--- a/owners.py |
+++ b/owners.py |
@@ -115,13 +115,15 @@ class Database(object): |
# (This is implicitly true for the root directory). |
self.stop_looking = set(['']) |
- def reviewers_for(self, files): |
+ def reviewers_for(self, files, author): |
"""Returns a suggested set of reviewers that will cover the files. |
- files is a sequence of paths relative to (and under) self.root.""" |
+ files is a sequence of paths relative to (and under) self.root. |
+ If author is nonempty, we ensure it is not included in the set returned |
+ in order avoid suggesting the author as a reviewer for their own changes.""" |
self._check_paths(files) |
self._load_data_needed_for(files) |
- suggested_owners = self._covering_set_of_owners_for(files) |
+ suggested_owners = self._covering_set_of_owners_for(files, author) |
if EVERYONE in suggested_owners: |
if len(suggested_owners) > 1: |
suggested_owners.remove(EVERYONE) |
@@ -236,9 +238,9 @@ class Database(object): |
('%s is not a "set" directive, "*", ' |
'or an email address: "%s"' % (line_type, directive))) |
- def _covering_set_of_owners_for(self, files): |
+ def _covering_set_of_owners_for(self, files, author): |
dirs_remaining = set(self._enclosing_dir_with_owners(f) for f in files) |
- all_possible_owners = self._all_possible_owners(dirs_remaining) |
+ all_possible_owners = self._all_possible_owners(dirs_remaining, author) |
suggested_owners = set() |
while dirs_remaining: |
owner = self.lowest_cost_owner(all_possible_owners, dirs_remaining) |
@@ -247,7 +249,7 @@ class Database(object): |
dirs_remaining -= dirs_to_remove |
return suggested_owners |
- def _all_possible_owners(self, dirs): |
+ def _all_possible_owners(self, dirs, author): |
"""Returns a list of (potential owner, distance-from-dir) tuples; a |
distance of 1 is the lowest/closest possible distance (which makes the |
subsequent math easier).""" |
@@ -257,6 +259,8 @@ class Database(object): |
distance = 1 |
while True: |
for owner in self.owners_for.get(dirname, []): |
+ if author and owner == author: |
+ continue |
all_possible_owners.setdefault(owner, []) |
# If the same person is in multiple OWNERS files above a given |
# directory, only count the closest one. |