Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: owners.py

Issue 9621012: Show a list of directories missing OWNER reviewers on upload, and show directories rather than file… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Addressing Dirk's comments Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | presubmit_canned_checks.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « no previous file | presubmit_canned_checks.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698