Index: owners.py |
=================================================================== |
--- owners.py (revision 125361) |
+++ owners.py (working copy) |
@@ -76,28 +76,36 @@ |
return self._covering_set_of_owners_for(files) |
def files_are_covered_by(self, files, reviewers): |
Dirk Pranke
2012/03/08 07:19:48
I meant that I don't think anyone calls this routi
|
- """Returns whether every file is owned by at least one reviewer.""" |
- return not self.files_not_covered_by(files, reviewers) |
+ """Returns whether every file is owned by at least one reviewer. |
- def files_not_covered_by(self, files, reviewers): |
- """Returns the set of files that are not owned by at least one reviewer. |
+ If reviewers is empty, returns False if there are any files at all. |
+ """ |
+ if files and not reviewers: |
+ return False |
+ return not self.directories_not_covered_by(files, reviewers) |
+ def directories_not_covered_by(self, files, reviewers): |
+ """Returns the set of directories that are not owned by a reviewer. |
+ |
+ Determines which of the given files are not owned by at least one of the |
+ reviewers, then returns a set containing the applicable enclosing |
+ directories, i.e. the ones upward from the files that have OWNERS files. |
+ |
Args: |
files is a sequence of paths relative to (and under) self.root. |
- reviewers is a sequence of strings matching self.email_regexp.""" |
+ reviewers is a sequence of strings matching self.email_regexp. |
+ """ |
self._check_paths(files) |
self._check_reviewers(reviewers) |
- if not reviewers: |
- return files |
self._load_data_needed_for(files) |
files_by_dir = self._files_by_dir(files) |
Dirk Pranke
2012/03/08 07:19:48
You no longer need the files, just the dirs, so yo
Pam (message me for reviews)
2012/03/08 09:11:54
Thanks, I should have seen that. No more coding at
|
covered_dirs = self._dirs_covered_by(reviewers) |
- uncovered_files = [] |
+ uncovered_dirs = [] |
for d, files_in_d in files_by_dir.iteritems(): |
if not self._is_dir_covered_by(d, covered_dirs): |
- uncovered_files.extend(files_in_d) |
- return set(uncovered_files) |
+ uncovered_dirs.append(self._enclosing_dir_with_owners(d)) |
+ return set(uncovered_dirs) |
def _check_paths(self, files): |
def _is_under(f, pfx): |
@@ -129,6 +137,15 @@ |
dirname = self.os_path.dirname(dirname) |
return dirname in covered_dirs |
+ def _enclosing_dir_with_owners(self, directory): |
+ """Returns the innermost enclosing directory that has an OWNERS file.""" |
+ dirpath = directory |
+ while not dirpath in self.owners_for: |
+ if self._stop_looking(dirpath): |
+ break |
+ dirpath = self.os_path.dirname(dirpath) |
+ return dirpath |
+ |
def _load_data_needed_for(self, files): |
for f in files: |
dirpath = self.os_path.dirname(f) |