Chromium Code Reviews| Index: apply_issue.py |
| diff --git a/apply_issue.py b/apply_issue.py |
| index 41e133baa083b58e197da1dff879acee7133fee3..09ba8062a12eb5f057a9897e416520aba377260b 100755 |
| --- a/apply_issue.py |
| +++ b/apply_issue.py |
| @@ -166,52 +166,86 @@ def main(): |
| options.patchset = properties['patchsets'][-1] |
| print('No patchset specified. Using patchset %d' % options.patchset) |
| - print('Downloading the patch.') |
|
rmistry
2015/06/03 13:30:01
The diff here looks worse than it is.
This whole
|
| - try: |
| - patchset = obj.get_patch(options.issue, options.patchset) |
| - except urllib2.HTTPError as e: |
| - print( |
| - 'Failed to fetch the patch for issue %d, patchset %d.\n' |
| - 'Try visiting %s/%d') % ( |
| - 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) |
| - scm_type = scm.determine_scm(full_dir) |
| - if scm_type == 'svn': |
| - scm_obj = checkout.SvnCheckout(full_dir, None, None, None, None) |
| - elif scm_type == 'git': |
| - scm_obj = checkout.GitCheckout(full_dir, None, None, None, None) |
| - elif scm_type == None: |
| - scm_obj = checkout.RawCheckout(full_dir, None, None) |
| - else: |
| - parser.error('Couldn\'t determine the scm') |
| - |
| - # TODO(maruel): HACK, remove me. |
| - # When run a build slave, make sure buildbot knows that the checkout was |
| - # modified. |
| - if options.root_dir == 'src' and getpass.getuser() == 'chrome-bot': |
| - # See sourcedirIsPatched() in: |
| - # http://src.chromium.org/viewvc/chrome/trunk/tools/build/scripts/slave/ |
| - # chromium_commands.py?view=markup |
| - open('.buildbot-patched', 'w').close() |
| - |
| - print('\nApplying the patch.') |
| - try: |
| - scm_obj.apply_patch(patchset, verbose=True) |
| - except checkout.PatchApplicationFailed as e: |
| - print(str(e)) |
| - print('CWD=%s' % os.getcwd()) |
| - print('Checkout path=%s' % scm_obj.project_path) |
| - return 1 |
| + issues_patchsets_to_apply = [(options.issue, options.patchset)] |
| + depends_on_info = obj.get_depends_on_patchset(options.issue, options.patchset) |
| + while depends_on_info: |
| + depends_on_info_tokens = depends_on_info.split(':') |
| + depends_on_issue = int(depends_on_info_tokens[0]) |
| + depends_on_patchset = int(depends_on_info_tokens[1]) |
| + try: |
| + depends_on_info = obj.get_depends_on_patchset(depends_on_issue, |
| + depends_on_patchset) |
| + issues_patchsets_to_apply.insert(0, (depends_on_issue, |
| + depends_on_patchset)) |
| + except urllib2.HTTPError: |
| + print ('The patchset that was marked as a dependency no longer ' |
| + 'exists: %s/%d/#ps%d' % ( |
| + options.server, depends_on_issue, depends_on_patchset)) |
| + depends_on_info = None |
| + |
| + num_issues_patchsets_to_apply = len(issues_patchsets_to_apply) |
| + if num_issues_patchsets_to_apply > 1: |
| + print 'apply_issue.py found %d dependent CLs.' % ( |
| + num_issues_patchsets_to_apply - 1) |
| + print 'They will be applied in the following order:' |
| + num = 1 |
| + for issue_to_apply, patchset_to_apply in issues_patchsets_to_apply: |
| + print ' #%d %s/%d/#ps%d' % ( |
| + num, options.server, issue_to_apply, patchset_to_apply) |
| + num += 1 |
| + |
| + for issue_to_apply, patchset_to_apply in issues_patchsets_to_apply: |
| + issue_url = '%s/%d/#ps%d' % (options.server, issue_to_apply, |
| + patchset_to_apply) |
| + print('Downloading patch from %s' % issue_url) |
| + try: |
| + patchset = obj.get_patch(issue_to_apply, patchset_to_apply) |
| + except urllib2.HTTPError as e: |
| + print( |
| + 'Failed to fetch the patch for issue %d, patchset %d.\n' |
| + 'Try visiting %s/%d') % ( |
| + issue_to_apply, patchset_to_apply, |
| + options.server, issue_to_apply) |
| + 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) |
| + scm_type = scm.determine_scm(full_dir) |
| + if scm_type == 'svn': |
| + scm_obj = checkout.SvnCheckout(full_dir, None, None, None, None) |
| + elif scm_type == 'git': |
| + scm_obj = checkout.GitCheckout(full_dir, None, None, None, None) |
| + elif scm_type == None: |
| + scm_obj = checkout.RawCheckout(full_dir, None, None) |
| + else: |
| + parser.error('Couldn\'t determine the scm') |
| + |
| + # TODO(maruel): HACK, remove me. |
| + # When run a build slave, make sure buildbot knows that the checkout was |
| + # modified. |
| + if options.root_dir == 'src' and getpass.getuser() == 'chrome-bot': |
| + # See sourcedirIsPatched() in: |
| + # http://src.chromium.org/viewvc/chrome/trunk/tools/build/scripts/slave/ |
| + # chromium_commands.py?view=markup |
| + open('.buildbot-patched', 'w').close() |
| + |
| + print('\nApplying the patch from %s' % issue_url) |
| + try: |
| + scm_obj.apply_patch(patchset, verbose=True) |
| + except checkout.PatchApplicationFailed as e: |
| + print(str(e)) |
| + print('CWD=%s' % os.getcwd()) |
| + print('Checkout path=%s' % scm_obj.project_path) |
| + return 1 |
| if ('DEPS' in map(os.path.basename, patchset.filenames) |
| and not options.ignore_deps): |