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

Unified Diff: drover.py

Issue 12670008: Extend drover so it can revert any chrome revision. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 7 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: drover.py
diff --git a/drover.py b/drover.py
index 22e9b7d790609371338fc71a23224fe7900e7fc9..945b97e0b2d15642a62fe58b190c83d25b91f5a5 100755
--- a/drover.py
+++ b/drover.py
@@ -3,6 +3,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import datetime
import optparse
import os
import re
@@ -72,15 +73,13 @@ def gclUpload(revision, author):
def getSVNInfo(url, revision):
info = {}
- try:
- svn_info = subprocess2.check_output(
- ['svn', 'info', '%s@%s' % (url, revision)]).splitlines()
- for line in svn_info:
- match = re.search(r"(.*?):(.*)", line)
- if match:
- info[match.group(1).strip()] = match.group(2).strip()
- except subprocess2.CalledProcessError:
- pass
+ svn_info = subprocess2.capture(
+ ['svn', 'info', '--non-interactive', '%s@%s' % (url, revision)],
+ stderr=subprocess2.VOID).splitlines()
+ for line in svn_info:
+ match = re.search(r"(.*?):(.*)", line)
+ if match:
+ info[match.group(1).strip()] = match.group(2).strip()
return info
def isSVNDirty():
@@ -491,6 +490,8 @@ def drover(options, args):
# Initialize some variables used below. They can be overwritten by
# the drover.properties file.
BASE_URL = "svn://svn.chromium.org/chrome"
+ REVERT_ALT_URLS = ['svn://svn.chromium.org/chrome-internal',
+ 'svn://svn.chromium.org/native_client']
TRUNK_URL = BASE_URL + "/trunk/src"
BRANCH_URL = BASE_URL + "/branches/$branch/src"
SKIP_CHECK_WORKING = True
@@ -521,11 +522,12 @@ def drover(options, args):
file_pattern_ = FILE_PATTERN
if options.revert and options.branch:
+ print 'Note: --branch is usually not needed for reverts.'
url = BRANCH_URL.replace("$branch", options.branch)
elif options.merge and options.sbranch:
url = BRANCH_URL.replace("$branch", options.sbranch)
- elif options.revert and options.url:
- url = options.url
+ elif options.revert:
+ url = options.url or BASE_URL
file_pattern_ = r"[ ]+([MADUC])[ ]+((/.*)/(.*))"
else:
url = TRUNK_URL
@@ -541,6 +543,20 @@ def drover(options, args):
prompt("Working copy contains uncommitted files. Continue?")):
return 1
+ if options.revert and not options.no_alt_urls:
+ for cur_url in [url] + REVERT_ALT_URLS:
+ try:
+ commit_date_str = getSVNInfo(
+ cur_url, options.revert).get('Last Changed Date', 'x').split()[0]
+ commit_date = datetime.datetime.strptime(commit_date_str, '%Y-%m-%d')
+ if (datetime.datetime.now() - commit_date).days < 120:
+ if cur_url != url:
+ print 'Guessing svn repo: %s.' % cur_url,
+ print 'Use --no-alt-urls to disable heuristic.'
+ url = cur_url
+ break
+ except ValueError:
+ pass
command = 'svn log ' + url + " -r "+str(revision) + " -v"
os.system(command)
@@ -572,8 +588,6 @@ def drover(options, args):
deleteRevision(url, revision)
elif options.revert:
action = "Revert"
- if options.branch:
- url = BRANCH_URL.replace("$branch", options.branch)
pop_em = not options.url
checkoutRevision(url, revision, url, True, pop_em)
revertRevision(url, revision)
@@ -672,11 +686,13 @@ def main():
help='svn url to use for the revert')
option_parser.add_option('-a', '--auditor',
help='overrides the author for reviewer')
- option_parser.add_option('', '--revertbot', action='store_true',
+ option_parser.add_option('--revertbot', action='store_true',
default=False)
- option_parser.add_option('', '--revertbot-commit', action='store_true',
+ option_parser.add_option('--no-alt-urls', action='store_true',
+ help='Disable heuristics used to determine svn url')
+ option_parser.add_option('--revertbot-commit', action='store_true',
default=False)
- option_parser.add_option('', '--revertbot-reviewers')
+ option_parser.add_option('--revertbot-reviewers')
options, args = option_parser.parse_args()
if not options.merge and not options.revert:
« 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