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

Side by Side Diff: drover.py

Issue 12111002: Add support for svn paths in the revert (removes need for .properties file). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 #In the normal case, where no url override is specified and it's just
198 # chromium source, it's necessary to remove the 'trunk' from the filepath,
199 # since in the checkout we include 'trunk' or 'branch/\d+'.
200 #
201 # However, when a url is specified we want to preserve that because it's
202 # a part of the filepath and necessary for path operations on svn (because
203 # frankly, we are checking out the correct top level, and not hacking it).
204 if pop:
205 subpaths.pop(0)
198 base = '' 206 base = ''
199 for subpath in subpaths: 207 for subpath in subpaths:
200 base += '/' + subpath 208 base += '/' + subpath
201 # This logic ensures that you don't empty out any directories 209 # This logic ensures that you don't empty out any directories
202 if not os.path.exists("." + base): 210 if not os.path.exists("." + base):
203 command = ('svn update --depth empty ' + "." + base) 211 command = ('svn update --depth empty ' + "." + base)
204 print command 212 print command
205 os.system(command) 213 os.system(command)
206 214
207 if (revert): 215 if (revert):
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 f = open("drover.properties") 517 f = open("drover.properties")
510 exec(f) 518 exec(f)
511 f.close() 519 f.close()
512 if FILE_PATTERN: 520 if FILE_PATTERN:
513 file_pattern_ = FILE_PATTERN 521 file_pattern_ = FILE_PATTERN
514 522
515 if options.revert and options.branch: 523 if options.revert and options.branch:
516 url = BRANCH_URL.replace("$branch", options.branch) 524 url = BRANCH_URL.replace("$branch", options.branch)
517 elif options.merge and options.sbranch: 525 elif options.merge and options.sbranch:
518 url = BRANCH_URL.replace("$branch", options.sbranch) 526 url = BRANCH_URL.replace("$branch", options.sbranch)
527 elif options.revert and options.url:
528 url = options.url
529 file_pattern_ = r"[ ]+([MADUC])[ ]+((/.*)/(.*))"
519 else: 530 else:
520 url = TRUNK_URL 531 url = TRUNK_URL
521 532
522 working = options.workdir or DEFAULT_WORKING 533 working = options.workdir or DEFAULT_WORKING
523 534
524 if options.local: 535 if options.local:
525 working = os.getcwd() 536 working = os.getcwd()
526 if not inCheckoutRoot(working): 537 if not inCheckoutRoot(working):
527 print "'%s' appears not to be the root of a working copy" % working 538 print "'%s' appears not to be the root of a working copy" % working
528 return 1 539 return 1
(...skipping 27 matching lines...) Expand all
556 mergeRevision(url, revision) 567 mergeRevision(url, revision)
557 # "Export" files that were added from the source and add them to branch 568 # "Export" files that were added from the source and add them to branch
558 exportRevision(url, revision) 569 exportRevision(url, revision)
559 # Delete directories that were deleted (file deletes are handled in the 570 # Delete directories that were deleted (file deletes are handled in the
560 # merge). 571 # merge).
561 deleteRevision(url, revision) 572 deleteRevision(url, revision)
562 elif options.revert: 573 elif options.revert:
563 action = "Revert" 574 action = "Revert"
564 if options.branch: 575 if options.branch:
565 url = BRANCH_URL.replace("$branch", options.branch) 576 url = BRANCH_URL.replace("$branch", options.branch)
566 checkoutRevision(url, revision, url, True) 577 pop_em = not options.url
578 checkoutRevision(url, revision, url, True, pop_em)
567 revertRevision(url, revision) 579 revertRevision(url, revision)
568 revertExportRevision(url, revision) 580 revertExportRevision(url, revision)
569 581
570 # Check the base url so we actually find the author who made the change 582 # Check the base url so we actually find the author who made the change
571 if options.auditor: 583 if options.auditor:
572 author = options.auditor 584 author = options.auditor
573 else: 585 else:
574 author = getAuthor(url, revision) 586 author = getAuthor(url, revision)
575 if not author: 587 if not author:
576 author = getAuthor(TRUNK_URL, revision) 588 author = getAuthor(TRUNK_URL, revision)
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 option_parser.add_option('-M', '--milestone', type="int", 652 option_parser.add_option('-M', '--milestone', type="int",
641 help='Milestone to revert or merge from') 653 help='Milestone to revert or merge from')
642 option_parser.add_option('-l', '--local', action='store_true', 654 option_parser.add_option('-l', '--local', action='store_true',
643 help='Local working copy to merge to') 655 help='Local working copy to merge to')
644 option_parser.add_option('-s', '--sbranch', 656 option_parser.add_option('-s', '--sbranch',
645 help='Source branch for merge') 657 help='Source branch for merge')
646 option_parser.add_option('-r', '--revert', type="int", 658 option_parser.add_option('-r', '--revert', type="int",
647 help='Revision to revert') 659 help='Revision to revert')
648 option_parser.add_option('-w', '--workdir', 660 option_parser.add_option('-w', '--workdir',
649 help='subdir to use for the revert') 661 help='subdir to use for the revert')
662 option_parser.add_option('-u', '--url',
663 help='svn url to use for the revert')
650 option_parser.add_option('-a', '--auditor', 664 option_parser.add_option('-a', '--auditor',
651 help='overrides the author for reviewer') 665 help='overrides the author for reviewer')
652 option_parser.add_option('', '--revertbot', action='store_true', 666 option_parser.add_option('', '--revertbot', action='store_true',
653 default=False) 667 default=False)
654 option_parser.add_option('', '--revertbot-commit', action='store_true', 668 option_parser.add_option('', '--revertbot-commit', action='store_true',
655 default=False) 669 default=False)
656 option_parser.add_option('', '--revertbot-reviewers') 670 option_parser.add_option('', '--revertbot-reviewers')
657 options, args = option_parser.parse_args() 671 options, args = option_parser.parse_args()
658 672
659 if not options.merge and not options.revert: 673 if not options.merge and not options.revert:
(...skipping 13 matching lines...) Expand all
673 687
674 if options.branch and options.milestone: 688 if options.branch and options.milestone:
675 option_parser.error("--branch cannot be used with --milestone") 689 option_parser.error("--branch cannot be used with --milestone")
676 return 1 690 return 1
677 691
678 return drover(options, args) 692 return drover(options, args)
679 693
680 694
681 if __name__ == "__main__": 695 if __name__ == "__main__":
682 sys.exit(main()) 696 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698