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

Unified Diff: gcl.py

Issue 4218006: Add rietveld member to ChangeInfo and use this value to contact rietveld. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 10 years, 2 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 | tests/gcl_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gcl.py
diff --git a/gcl.py b/gcl.py
index fb355e5860de9af9fe832d9c2d9277cf4865e835..058837a1e631571c73be09e6f326e8f089410845 100755
--- a/gcl.py
+++ b/gcl.py
@@ -274,22 +274,13 @@ class ChangeInfo(object):
files: a list of 2 tuple containing (status, filename) of changed files,
with paths being relative to the top repository directory.
local_root: Local root directory
+ rietveld: rietveld server for this change
"""
-
+ # Kept for unit test support. This is for the old format, it's deprecated.
_SEPARATOR = "\n-----\n"
- # The info files have the following format:
- # issue_id, patchset\n (, patchset is optional)
- # _SEPARATOR\n
- # filepath1\n
- # filepath2\n
- # .
- # .
- # filepathn\n
- # _SEPARATOR\n
- # description
def __init__(self, name, issue, patchset, description, files, local_root,
- needs_upload=False):
+ rietveld, needs_upload=False):
self.name = name
self.issue = int(issue)
self.patchset = int(patchset)
@@ -300,6 +291,10 @@ class ChangeInfo(object):
self.patch = None
self._local_root = local_root
self.needs_upload = needs_upload
+ self.rietveld = rietveld
+ if not self.rietveld:
+ # Set the default value.
+ self.rietveld = GetCodeReviewSetting('CODE_REVIEW_SERVER')
def NeedsUpload(self):
return self.needs_upload
@@ -337,6 +332,7 @@ class ChangeInfo(object):
'needs_upload': self.NeedsUpload(),
'files': self.GetFiles(),
'description': self.description,
+ 'rietveld': self.rietveld,
}, sort_keys=True, indent=2)
gclient_utils.FileWrite(GetChangelistInfoFile(self.name), data)
@@ -348,13 +344,46 @@ class ChangeInfo(object):
"""Closes the Rietveld issue for this changelist."""
data = [("description", self.description),]
ctype, body = upload.EncodeMultipartFormData(data, [])
- SendToRietveld("/%d/close" % self.issue, body, ctype)
+ self.SendToRietveld('/%d/close' % self.issue, body, ctype)
def UpdateRietveldDescription(self):
"""Sets the description for an issue on Rietveld."""
data = [("description", self.description),]
ctype, body = upload.EncodeMultipartFormData(data, [])
- SendToRietveld("/%d/description" % self.issue, body, ctype)
+ self.SendToRietveld('/%d/description' % self.issue, body, ctype)
+
+ def GetIssueDescription(self):
+ """Returns the issue description from Rietveld."""
+ return self.SendToRietveld('/%d/description' % self.issue)
+
+ def PrimeLint(self):
+ """Do background work on Rietveld to lint the file so that the results are
+ ready when the issue is viewed."""
+ if self.issue and self.patchset:
+ self.SendToRietveld('/lint/issue%s_%s' % (self.issue, self.patchset),
+ timeout=1)
+
+ def SendToRietveld(self, request_path, payload=None,
+ content_type="application/octet-stream", timeout=None):
+ """Send a POST/GET to Rietveld. Returns the response body."""
+ if not self.rietveld:
+ ErrorExit(CODEREVIEW_SETTINGS_FILE_NOT_FOUND)
+ def GetUserCredentials():
+ """Prompts the user for a username and password."""
+ email = upload.GetEmail('Email (login for uploading to %s)' %
+ self.rietveld)
+ password = getpass.getpass('Password for %s: ' % email)
+ return email, password
+ rpc_server = upload.HttpRpcServer(self.rietveld,
+ GetUserCredentials,
+ save_cookies=True)
+ try:
+ return rpc_server.Send(request_path, payload, content_type, timeout)
+ except urllib2.URLError:
+ if timeout is None:
+ ErrorExit('Error accessing url %s' % request_path)
+ else:
+ return None
def MissingTests(self):
"""Returns True if the change looks like it needs unit tests but has none.
@@ -453,7 +482,7 @@ class ChangeInfo(object):
if not os.path.exists(info_file):
if fail_on_not_found:
ErrorExit("Changelist " + changename + " not found.")
- return ChangeInfo(changename, 0, 0, '', None, local_root,
+ return ChangeInfo(changename, 0, 0, '', None, local_root, rietveld=None,
needs_upload=False)
content = gclient_utils.FileRead(info_file, 'r')
save = False
@@ -484,13 +513,24 @@ class ChangeInfo(object):
files[files.index(item)] = (status, item[1])
change_info = ChangeInfo(changename, values['issue'], values['patchset'],
values['description'], files,
- local_root, values['needs_upload'])
+ local_root, values.get('rietveld'),
+ values['needs_upload'])
if save:
change_info.Save()
return change_info
@staticmethod
def _LoadOldFormat(content):
+ # The info files have the following format:
+ # issue_id, patchset\n (, patchset is optional)
+ # _SEPARATOR\n
+ # filepath1\n
+ # filepath2\n
+ # .
+ # .
+ # filepathn\n
+ # _SEPARATOR\n
+ # description
split_data = content.split(ChangeInfo._SEPARATOR, 2)
if len(split_data) != 3:
raise ValueError('Bad change format')
@@ -534,7 +574,7 @@ def LoadChangelistInfoForMultiple(changenames, local_root, fail_on_not_found,
"""
changes = changenames.split(',')
aggregate_change_info = ChangeInfo(changenames, 0, 0, '', None, local_root,
- needs_upload=False)
+ rietveld=None, needs_upload=False)
for change in changes:
aggregate_change_info._files += ChangeInfo.Load(change,
local_root,
@@ -615,34 +655,6 @@ def GetFilesNotInCL():
return modified_files[""]
-def SendToRietveld(request_path, payload=None,
- content_type="application/octet-stream", timeout=None):
- """Send a POST/GET to Rietveld. Returns the response body."""
- server = GetCodeReviewSetting("CODE_REVIEW_SERVER")
- if not server:
- ErrorExit(CODEREVIEW_SETTINGS_FILE_NOT_FOUND)
- def GetUserCredentials():
- """Prompts the user for a username and password."""
- email = upload.GetEmail("Email (login for uploading to %s)" % server)
- password = getpass.getpass("Password for %s: " % email)
- return email, password
- rpc_server = upload.HttpRpcServer(server,
- GetUserCredentials,
- save_cookies=True)
- try:
- return rpc_server.Send(request_path, payload, content_type, timeout)
- except urllib2.URLError:
- if timeout is None:
- ErrorExit("Error accessing url %s" % request_path)
- else:
- return None
-
-
-def GetIssueDescription(issue):
- """Returns the issue description from Rietveld."""
- return SendToRietveld("/%d/description" % issue)
-
-
def ListFiles(show_unknown_files):
files = GetModifiedFiles()
cl_keys = files.keys()
@@ -783,10 +795,7 @@ def CMDupload(change_info, args):
args.append("--send_mail")
upload_arg = ["upload.py", "-y"]
- server = GetCodeReviewSetting("CODE_REVIEW_SERVER")
- if not server:
- ErrorExit(CODEREVIEW_SETTINGS_FILE_NOT_FOUND)
- upload_arg.append("--server=%s" % server)
+ upload_arg.append("--server=%s" % change_info.rietveld)
upload_arg.extend(args)
desc_file = ""
@@ -837,7 +846,6 @@ def CMDupload(change_info, args):
# shows the correct base.
previous_cwd = os.getcwd()
os.chdir(change_info.GetLocalRoot())
-
# If we have a lot of files with long paths, then we won't be able to fit
# the command to "svn diff". Instead, we generate the diff manually for
# each file and concatenate them before passing it to upload.py.
@@ -851,17 +859,9 @@ def CMDupload(change_info, args):
if desc_file:
os.remove(desc_file)
-
- # Do background work on Rietveld to lint the file so that the results are
- # ready when the issue is viewed.
- SendToRietveld("/lint/issue%s_%s" % (issue, patchset), timeout=0.5)
-
- # Move back before considering try, so GetCodeReviewSettings is
- # consistent.
+ change_info.PrimeLint()
os.chdir(previous_cwd)
-
print "*** Upload does not submit a try; use gcl try to submit a try. ***"
-
return 0
@@ -933,13 +933,11 @@ def CMDcommit(change_info, args):
commit_cmd = ["svn", "commit"]
if change_info.issue:
# Get the latest description from Rietveld.
- change_info.description = GetIssueDescription(change_info.issue)
+ change_info.description = change_info.GetIssueDescription()
commit_message = change_info.description.replace('\r\n', '\n')
if change_info.issue:
- server = GetCodeReviewSetting("CODE_REVIEW_SERVER")
- if not server:
- ErrorExit(CODEREVIEW_SETTINGS_FILE_NOT_FOUND)
+ server = change_info.rietveld
if not server.startswith("http://") and not server.startswith("https://"):
server = "http://" + server
commit_message += ('\nReview URL: %s/%d' % (server, change_info.issue))
@@ -1006,7 +1004,7 @@ def CMDchange(args):
if change_info.issue and not change_info.NeedsUpload():
try:
- description = GetIssueDescription(change_info.issue)
+ description = change_info.GetIssueDescription()
except urllib2.HTTPError, err:
if err.code == 404:
# The user deleted the issue in Rietveld, so forget the old issue id.
@@ -1114,7 +1112,6 @@ def CMDlint(change_info, args):
# shows the correct base.
previous_cwd = os.getcwd()
os.chdir(change_info.GetLocalRoot())
-
# Process cpplints arguments if any.
filenames = cpplint.ParseArguments(args + change_info.GetFileNames())
« no previous file with comments | « no previous file | tests/gcl_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698