Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import optparse | 6 import optparse |
| 7 import os | 7 import os |
| 8 import re | 8 import re |
| 9 import string | 9 import string |
| 10 import sys | 10 import sys |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 if (version['minor'] > minor): | 162 if (version['minor'] > minor): |
| 163 return True | 163 return True |
| 164 elif (version['minor'] < minor): | 164 elif (version['minor'] < minor): |
| 165 return False | 165 return False |
| 166 | 166 |
| 167 if (version['patch'] >= patch): | 167 if (version['patch'] >= patch): |
| 168 return True | 168 return True |
| 169 else: | 169 else: |
| 170 return False | 170 return False |
| 171 | 171 |
| 172 def checkoutRevision(url, revision, branch_url, revert=False): | 172 def checkoutRevision(url, revision, branch_url, revert=False, pop=True): |
| 173 files_info = getFileInfo(url, revision) | 173 files_info = getFileInfo(url, revision) |
| 174 paths = getBestMergePaths2(files_info, revision) | 174 paths = getBestMergePaths2(files_info, revision) |
| 175 export_map = getBestExportPathsMap2(files_info, revision) | 175 export_map = getBestExportPathsMap2(files_info, revision) |
| 176 | 176 |
| 177 command = 'svn checkout -N ' + branch_url | 177 command = 'svn checkout -N ' + branch_url |
| 178 print command | 178 print command |
| 179 os.system(command) | 179 os.system(command) |
| 180 | 180 |
| 181 match = re.search(r"^[a-z]+://.*/(.*)", branch_url) | 181 match = re.search(r"^[a-z]+://.*/(.*)", branch_url) |
| 182 | 182 |
| 183 if match: | 183 if match: |
| 184 os.chdir(match.group(1)) | 184 os.chdir(match.group(1)) |
| 185 | 185 |
| 186 # This line is extremely important due to the way svn behaves in the | 186 # This line is extremely important due to the way svn behaves in the |
| 187 # set-depths action. If parents aren't handled before children, the child | 187 # set-depths action. If parents aren't handled before children, the child |
| 188 # directories get clobbered and the merge step fails. | 188 # directories get clobbered and the merge step fails. |
| 189 paths.sort() | 189 paths.sort() |
| 190 | 190 |
| 191 # Checkout the directories that already exist | 191 # Checkout the directories that already exist |
| 192 for path in paths: | 192 for path in paths: |
| 193 if (export_map.has_key(path) and not revert): | 193 if (export_map.has_key(path) and not revert): |
| 194 print "Exclude new directory " + path | 194 print "Exclude new directory " + path |
| 195 continue | 195 continue |
| 196 subpaths = path.split('/') | 196 subpaths = path.split('/') |
| 197 subpaths.pop(0) | 197 if pop: |
| 198 subpaths.pop(0) | |
|
M-A Ruel
2013/01/29 23:04:10
Could you add a one line comment why it's done? I
| |
| 198 base = '' | 199 base = '' |
| 199 for subpath in subpaths: | 200 for subpath in subpaths: |
| 200 base += '/' + subpath | 201 base += '/' + subpath |
| 201 # This logic ensures that you don't empty out any directories | 202 # This logic ensures that you don't empty out any directories |
| 202 if not os.path.exists("." + base): | 203 if not os.path.exists("." + base): |
| 203 command = ('svn update --depth empty ' + "." + base) | 204 command = ('svn update --depth empty ' + "." + base) |
| 204 print command | 205 print command |
| 205 os.system(command) | 206 os.system(command) |
| 206 | 207 |
| 207 if (revert): | 208 if (revert): |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 509 f = open("drover.properties") | 510 f = open("drover.properties") |
| 510 exec(f) | 511 exec(f) |
| 511 f.close() | 512 f.close() |
| 512 if FILE_PATTERN: | 513 if FILE_PATTERN: |
| 513 file_pattern_ = FILE_PATTERN | 514 file_pattern_ = FILE_PATTERN |
| 514 | 515 |
| 515 if options.revert and options.branch: | 516 if options.revert and options.branch: |
| 516 url = BRANCH_URL.replace("$branch", options.branch) | 517 url = BRANCH_URL.replace("$branch", options.branch) |
| 517 elif options.merge and options.sbranch: | 518 elif options.merge and options.sbranch: |
| 518 url = BRANCH_URL.replace("$branch", options.sbranch) | 519 url = BRANCH_URL.replace("$branch", options.sbranch) |
| 520 elif options.revert and options.url: | |
| 521 url = options.url | |
| 522 file_pattern_ = r"[ ]+([MADUC])[ ]+((/.*)/(.*))" | |
| 519 else: | 523 else: |
| 520 url = TRUNK_URL | 524 url = TRUNK_URL |
| 521 | 525 |
| 522 working = options.workdir or DEFAULT_WORKING | 526 working = options.workdir or DEFAULT_WORKING |
| 523 | 527 |
| 524 if options.local: | 528 if options.local: |
| 525 working = os.getcwd() | 529 working = os.getcwd() |
| 526 if not inCheckoutRoot(working): | 530 if not inCheckoutRoot(working): |
| 527 print "'%s' appears not to be the root of a working copy" % working | 531 print "'%s' appears not to be the root of a working copy" % working |
| 528 return 1 | 532 return 1 |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 556 mergeRevision(url, revision) | 560 mergeRevision(url, revision) |
| 557 # "Export" files that were added from the source and add them to branch | 561 # "Export" files that were added from the source and add them to branch |
| 558 exportRevision(url, revision) | 562 exportRevision(url, revision) |
| 559 # Delete directories that were deleted (file deletes are handled in the | 563 # Delete directories that were deleted (file deletes are handled in the |
| 560 # merge). | 564 # merge). |
| 561 deleteRevision(url, revision) | 565 deleteRevision(url, revision) |
| 562 elif options.revert: | 566 elif options.revert: |
| 563 action = "Revert" | 567 action = "Revert" |
| 564 if options.branch: | 568 if options.branch: |
| 565 url = BRANCH_URL.replace("$branch", options.branch) | 569 url = BRANCH_URL.replace("$branch", options.branch) |
| 566 checkoutRevision(url, revision, url, True) | 570 pop_em = (options.url == None or options.url == '') |
|
M-A Ruel
2013/01/29 23:04:10
pop_em = not options.url
| |
| 571 checkoutRevision(url, revision, url, True, pop_em) | |
| 567 revertRevision(url, revision) | 572 revertRevision(url, revision) |
| 568 revertExportRevision(url, revision) | 573 revertExportRevision(url, revision) |
| 569 | 574 |
| 570 # Check the base url so we actually find the author who made the change | 575 # Check the base url so we actually find the author who made the change |
| 571 if options.auditor: | 576 if options.auditor: |
| 572 author = options.auditor | 577 author = options.auditor |
| 573 else: | 578 else: |
| 574 author = getAuthor(url, revision) | 579 author = getAuthor(url, revision) |
| 575 if not author: | 580 if not author: |
| 576 author = getAuthor(TRUNK_URL, revision) | 581 author = getAuthor(TRUNK_URL, revision) |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 640 option_parser.add_option('-M', '--milestone', type="int", | 645 option_parser.add_option('-M', '--milestone', type="int", |
| 641 help='Milestone to revert or merge from') | 646 help='Milestone to revert or merge from') |
| 642 option_parser.add_option('-l', '--local', action='store_true', | 647 option_parser.add_option('-l', '--local', action='store_true', |
| 643 help='Local working copy to merge to') | 648 help='Local working copy to merge to') |
| 644 option_parser.add_option('-s', '--sbranch', | 649 option_parser.add_option('-s', '--sbranch', |
| 645 help='Source branch for merge') | 650 help='Source branch for merge') |
| 646 option_parser.add_option('-r', '--revert', type="int", | 651 option_parser.add_option('-r', '--revert', type="int", |
| 647 help='Revision to revert') | 652 help='Revision to revert') |
| 648 option_parser.add_option('-w', '--workdir', | 653 option_parser.add_option('-w', '--workdir', |
| 649 help='subdir to use for the revert') | 654 help='subdir to use for the revert') |
| 655 option_parser.add_option('-u', '--url', | |
| 656 help='svn url to use for the revert') | |
| 650 option_parser.add_option('-a', '--auditor', | 657 option_parser.add_option('-a', '--auditor', |
| 651 help='overrides the author for reviewer') | 658 help='overrides the author for reviewer') |
| 652 option_parser.add_option('', '--revertbot', action='store_true', | 659 option_parser.add_option('', '--revertbot', action='store_true', |
| 653 default=False) | 660 default=False) |
| 654 option_parser.add_option('', '--revertbot-commit', action='store_true', | 661 option_parser.add_option('', '--revertbot-commit', action='store_true', |
| 655 default=False) | 662 default=False) |
| 656 option_parser.add_option('', '--revertbot-reviewers') | 663 option_parser.add_option('', '--revertbot-reviewers') |
| 657 options, args = option_parser.parse_args() | 664 options, args = option_parser.parse_args() |
| 658 | 665 |
| 659 if not options.merge and not options.revert: | 666 if not options.merge and not options.revert: |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 673 | 680 |
| 674 if options.branch and options.milestone: | 681 if options.branch and options.milestone: |
| 675 option_parser.error("--branch cannot be used with --milestone") | 682 option_parser.error("--branch cannot be used with --milestone") |
| 676 return 1 | 683 return 1 |
| 677 | 684 |
| 678 return drover(options, args) | 685 return drover(options, args) |
| 679 | 686 |
| 680 | 687 |
| 681 if __name__ == "__main__": | 688 if __name__ == "__main__": |
| 682 sys.exit(main()) | 689 sys.exit(main()) |
| OLD | NEW |