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

Side by Side Diff: gcl.py

Issue 5015005: Fix XSRF token in gcl so we don't need to hack rietveld anymore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 10 years, 1 month 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/python 1 #!/usr/bin/python
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2010 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 """\ 6 """\
7 Wrapper script around Rietveld's upload.py that simplifies working with groups 7 Wrapper script around Rietveld's upload.py that simplifies working with groups
8 of files. 8 of files.
9 """ 9 """
10 10
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 'rietveld': self.rietveld, 336 'rietveld': self.rietveld,
337 }, sort_keys=True, indent=2) 337 }, sort_keys=True, indent=2)
338 gclient_utils.FileWrite(GetChangelistInfoFile(self.name), data) 338 gclient_utils.FileWrite(GetChangelistInfoFile(self.name), data)
339 339
340 def Delete(self): 340 def Delete(self):
341 """Removes the changelist information from disk.""" 341 """Removes the changelist information from disk."""
342 os.remove(GetChangelistInfoFile(self.name)) 342 os.remove(GetChangelistInfoFile(self.name))
343 343
344 def CloseIssue(self): 344 def CloseIssue(self):
345 """Closes the Rietveld issue for this changelist.""" 345 """Closes the Rietveld issue for this changelist."""
346 data = [("description", self.description),] 346 # Newer versions of Rietveld require us to pass an XSRF token to POST, so
347 # we fetch it from the server.
348 xsrf_token = self.SendToRietveld(
349 '/xsrf_token',
350 extra_headers={'X-Requesting-XSRF-Token': '1'})
351
352 # You cannot close an issue with a GET.
353 # We pass an empty string for the data so it is a POST rather than a GET.
354 data = [("description", self.description),
355 ("xsrf_token", xsrf_token)]
347 ctype, body = upload.EncodeMultipartFormData(data, []) 356 ctype, body = upload.EncodeMultipartFormData(data, [])
348 self.SendToRietveld('/%d/close' % self.issue, body, ctype) 357 self.SendToRietveld('/%d/close' % self.issue, payload=body,
358 content_type=ctype)
349 359
350 def UpdateRietveldDescription(self): 360 def UpdateRietveldDescription(self):
351 """Sets the description for an issue on Rietveld.""" 361 """Sets the description for an issue on Rietveld."""
352 data = [("description", self.description),] 362 data = [("description", self.description),]
353 ctype, body = upload.EncodeMultipartFormData(data, []) 363 ctype, body = upload.EncodeMultipartFormData(data, [])
354 self.SendToRietveld('/%d/description' % self.issue, body, ctype) 364 self.SendToRietveld('/%d/description' % self.issue, payload=body,
365 content_type=ctype)
355 366
356 def GetIssueDescription(self): 367 def GetIssueDescription(self):
357 """Returns the issue description from Rietveld.""" 368 """Returns the issue description from Rietveld."""
358 return self.SendToRietveld('/%d/description' % self.issue) 369 return self.SendToRietveld('/%d/description' % self.issue)
359 370
360 def PrimeLint(self): 371 def PrimeLint(self):
361 """Do background work on Rietveld to lint the file so that the results are 372 """Do background work on Rietveld to lint the file so that the results are
362 ready when the issue is viewed.""" 373 ready when the issue is viewed."""
363 if self.issue and self.patchset: 374 if self.issue and self.patchset:
364 self.SendToRietveld('/lint/issue%s_%s' % (self.issue, self.patchset), 375 self.SendToRietveld('/lint/issue%s_%s' % (self.issue, self.patchset),
365 timeout=1) 376 timeout=1)
366 377
367 def SendToRietveld(self, request_path, payload=None, 378 def SendToRietveld(self, request_path, timeout=None, **kwargs):
368 content_type="application/octet-stream", timeout=None):
369 """Send a POST/GET to Rietveld. Returns the response body.""" 379 """Send a POST/GET to Rietveld. Returns the response body."""
370 if not self.rietveld: 380 if not self.rietveld:
371 ErrorExit(CODEREVIEW_SETTINGS_FILE_NOT_FOUND) 381 ErrorExit(CODEREVIEW_SETTINGS_FILE_NOT_FOUND)
372 def GetUserCredentials(): 382 def GetUserCredentials():
373 """Prompts the user for a username and password.""" 383 """Prompts the user for a username and password."""
374 email = upload.GetEmail('Email (login for uploading to %s)' % 384 email = upload.GetEmail('Email (login for uploading to %s)' %
375 self.rietveld) 385 self.rietveld)
376 password = getpass.getpass('Password for %s: ' % email) 386 password = getpass.getpass('Password for %s: ' % email)
377 return email, password 387 return email, password
378 rpc_server = upload.HttpRpcServer(self.rietveld, 388 rpc_server = upload.HttpRpcServer(self.rietveld,
379 GetUserCredentials, 389 GetUserCredentials,
380 save_cookies=True) 390 save_cookies=True)
381 try: 391 try:
382 return rpc_server.Send(request_path, payload, content_type, timeout) 392 return rpc_server.Send(request_path, timeout=timeout, **kwargs)
383 except urllib2.URLError: 393 except urllib2.URLError:
384 if timeout is None: 394 if timeout is None:
385 ErrorExit('Error accessing url %s' % request_path) 395 ErrorExit('Error accessing url %s' % request_path)
386 else: 396 else:
387 return None 397 return None
388 398
389 def MissingTests(self): 399 def MissingTests(self):
390 """Returns True if the change looks like it needs unit tests but has none. 400 """Returns True if the change looks like it needs unit tests but has none.
391 401
392 A change needs unit tests if it contains any new source files or methods. 402 A change needs unit tests if it contains any new source files or methods.
(...skipping 986 matching lines...) Expand 10 before | Expand all | Expand 10 after
1379 if e.code != 500: 1389 if e.code != 500:
1380 raise 1390 raise
1381 print >> sys.stderr, ( 1391 print >> sys.stderr, (
1382 'AppEngine is misbehaving and returned HTTP %d, again. Keep faith ' 1392 'AppEngine is misbehaving and returned HTTP %d, again. Keep faith '
1383 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e)) 1393 'and retry or visit go/isgaeup.\n%s') % (e.code, str(e))
1384 return 1 1394 return 1
1385 1395
1386 1396
1387 if __name__ == "__main__": 1397 if __name__ == "__main__":
1388 sys.exit(main(sys.argv[1:])) 1398 sys.exit(main(sys.argv[1:]))
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