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

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: Uncommented owners unit test 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') | presubmit_canned_checks.py » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: owners.py
===================================================================
--- owners.py (revision 125361)
+++ owners.py (working copy)
@@ -79,24 +79,40 @@
"""Returns whether every file is owned by at least one reviewer."""
return not self.files_not_covered_by(files, reviewers)
- def files_not_covered_by(self, files, reviewers):
- """Returns the set of files that are not owned by at least one reviewer.
+ def directories_not_covered_by(self, files, reviewers):
+ """Returns the set of directories that are not owned by a reviewer.
+ See files_not_covered_by() for details.
+ """
+ return self.files_not_covered_by(files, reviewers, directories=True)
+
+ def files_not_covered_by(self, files, reviewers, directories=False):
Dirk Pranke 2012/03/07 21:51:47 With your change in presubmit_canned_checks, I thi
Pam (message me for reviews) 2012/03/07 22:21:11 Done. It slightly changes the special-cased behavi
+ """Returns the set of items that are not owned by at least one reviewer.
+
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.
+ if directories is True, returns a set of directories; otherwise,
+ returns a set of files.
+ """
self._check_paths(files)
self._check_reviewers(reviewers)
- if not reviewers:
+ if not reviewers and not directories:
return files
self._load_data_needed_for(files)
files_by_dir = self._files_by_dir(files)
- covered_dirs = self._dirs_covered_by(reviewers)
+ if reviewers:
+ covered_dirs = self._dirs_covered_by(reviewers)
+ else:
+ covered_dirs = set()
uncovered_files = []
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)
+ if directories:
+ uncovered_files.append(self._enclosing_dir_with_owners(d))
+ else:
+ uncovered_files.extend(files_in_d)
return set(uncovered_files)
def _check_paths(self, files):
@@ -129,6 +145,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') | presubmit_canned_checks.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698