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

Unified Diff: checkout.py

Issue 264823003: Add black/whitelisting to apply_issue (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 6 years, 7 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
« apply_issue.py ('K') | « apply_issue.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: checkout.py
diff --git a/checkout.py b/checkout.py
index 022076c402218ea329ea0832969aa4eba955eef0..b0221040c29eed3909207070fd5a42fdf03d80fc 100644
--- a/checkout.py
+++ b/checkout.py
@@ -132,7 +132,7 @@ class CheckoutBase(object):
raise NotImplementedError()
def apply_patch(self, patches, post_processors=None, verbose=False,
- name=None, email=None):
+ name=None, email=None, whitelist=None, blacklist=None):
M-A Ruel 2014/05/06 18:49:08 I think you are doing it at the wrong abstraction
Ryan Tseng 2014/05/06 19:31:53 Done.
"""Applies a patch and returns the list of modified files.
This function should throw patch.UnsupportedPatchFormat or
@@ -167,13 +167,17 @@ class RawCheckout(CheckoutBase):
pass
def apply_patch(self, patches, post_processors=None, verbose=False,
- name=None, email=None):
+ name=None, email=None, whitelist=None, blacklist=None):
"""Ignores svn properties."""
post_processors = post_processors or self.post_processors or []
for p in patches:
stdout = []
try:
filepath = os.path.join(self.project_path, p.filename)
+ if blacklist and p.filename in blacklist:
+ continue
+ if whitelist and p.filename not in whitelist:
+ continue
if p.is_delete:
os.remove(filepath)
stdout.append('Deleted.')
@@ -352,11 +356,15 @@ class SvnCheckout(CheckoutBase, SvnMixIn):
return self._revert(revision)
def apply_patch(self, patches, post_processors=None, verbose=False,
- name=None, email=None):
+ name=None, email=None, whitelist=None, blacklist=None):
post_processors = post_processors or self.post_processors or []
for p in patches:
stdout = []
try:
+ if blacklist and p.filename in blacklist:
+ continue
+ if whitelist and p.filename not in whitelist:
+ continue
filepath = os.path.join(self.project_path, p.filename)
# It is important to use credentials=False otherwise credentials could
# leak in the error message. Credentials are not necessary here for the
@@ -632,11 +640,14 @@ class GitCheckout(CheckoutBase):
return unicode(self._check_output_git(['rev-parse', 'HEAD']).strip())
def apply_patch(self, patches, post_processors=None, verbose=False,
- name=None, email=None):
+ name=None, email=None, whitelist=None, blacklist=None):
"""Applies a patch on 'working_branch' and switches to it.
Also commits the changes on the local branch.
+ If ignore_deps is set, then files matching deps will not get patched.
+ If deps_only is set, then only files matching deps will get patched.
+
Ignores svn properties and raise an exception on unexpected ones.
"""
post_processors = post_processors or self.post_processors or []
@@ -650,6 +661,10 @@ class GitCheckout(CheckoutBase):
for index, p in enumerate(patches):
stdout = []
try:
+ if blacklist and p.filename in blacklist:
+ continue
+ if whitelist and p.filename not in whitelist:
+ continue
filepath = os.path.join(self.project_path, p.filename)
if p.is_delete:
if (not os.path.exists(filepath) and
@@ -689,6 +704,8 @@ class GitCheckout(CheckoutBase):
# applies here to figure out if the property will be correctly
# handled.
stdout.append('Property %s=%s' % (name, value))
+ # TODO(hinoka): Also remove the executable flag if svn:executabe
+ # is not set yet the file is executable.
if not name in (
'svn:eol-style', 'svn:executable', 'svn:mime-type'):
raise patch.UnsupportedPatchFormat(
@@ -725,8 +742,13 @@ class GitCheckout(CheckoutBase):
found_files = self._check_output_git(
['diff', base_ref, '--ignore-submodules',
'--name-only']).splitlines(False)
- assert sorted(patches.filenames) == sorted(found_files), (
- sorted(patches.filenames), sorted(found_files))
+ expected_files = patches.filenames
+ if whitelist:
+ expected_files = whitelist
+ if blacklist:
+ expected_files = [f for f in expected_files if f not in blacklist]
+ assert sorted(expected_files) == sorted(found_files), (
+ sorted(expected_files), sorted(found_files))
def commit(self, commit_message, user):
"""Commits, updates the commit message and pushes."""
@@ -825,9 +847,15 @@ class ReadOnlyCheckout(object):
return self.checkout.get_settings(key)
def apply_patch(self, patches, post_processors=None, verbose=False,
- name=None, email=None):
+ name=None, email=None, whitelist=None, blacklist=None):
+ if not whitelist:
+ whitelist = []
+ if not blacklist:
+ blacklist = []
return self.checkout.apply_patch(
- patches, post_processors or self.post_processors, verbose)
+ patches, post_processors or self.post_processors, verbose,
+ whitelist=whitelist,
+ blacklist=blacklist)
def commit(self, message, user): # pylint: disable=R0201
logging.info('Would have committed for %s with message: %s' % (
« apply_issue.py ('K') | « apply_issue.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698