diff --git a/apply_issue.py b/apply_issue.py index 75ea60918..91fe2f7f5 100755 --- a/apply_issue.py +++ b/apply_issue.py @@ -87,10 +87,17 @@ def main(): 'is detected.') parser.add_option('-b', '--base_ref', help='Base git ref to patch on top of, ' 'used for verification.') + parser.add_option('--whitelist', action='append', default=[], + help='Patch only specified file(s).') + parser.add_option('--blacklist', action='append', default=[], + help='Don\'t patch specified file(s).') parser.add_option('-d', '--ignore_deps', action='store_true', help='Don\'t run gclient sync on DEPS changes.') options, args = parser.parse_args() + if options.whitelist and options.blacklist: + parser.error('Cannot specify both --whitelist and --blacklist') + if options.password and options.private_key_file: parser.error('-k and -w options are incompatible') if options.email and options.email_file: @@ -185,6 +192,12 @@ def main(): options.issue, options.patchset, options.server, options.issue) return 1 + if options.whitelist: + patchset.patches = [patch for patch in patchset.patches + if patch.filename in options.whitelist] + if options.blacklist: + patchset.patches = [patch for patch in patchset.patches + if patch.filename not in options.blacklist] for patch in patchset.patches: print(patch) full_dir = os.path.abspath(options.root_dir) diff --git a/checkout.py b/checkout.py index 022076c40..06b2d3b0f 100644 --- a/checkout.py +++ b/checkout.py @@ -726,7 +726,9 @@ class GitCheckout(CheckoutBase): ['diff', base_ref, '--ignore-submodules', '--name-only']).splitlines(False) assert sorted(patches.filenames) == sorted(found_files), ( - sorted(patches.filenames), sorted(found_files)) + 'Found extra %s locally, %s not patched' % ( + sorted(set(found_files) - set(patches.filenames)), + sorted(set(patches.filenames) - set(found_files)))) def commit(self, commit_message, user): """Commits, updates the commit message and pushes."""