| Index: git_cl.py
|
| diff --git a/git_cl.py b/git_cl.py
|
| index 6f2f56177d2dbeffdde1e7b7516c853c362b26e1..3706830e9b952f09e6208f3f44ee8d3aea597549 100755
|
| --- a/git_cl.py
|
| +++ b/git_cl.py
|
| @@ -337,6 +337,7 @@ class Changelist(object):
|
| self.description = None
|
| self.has_patchset = False
|
| self.patchset = None
|
| + self._rpc_server = None
|
|
|
| def GetBranch(self):
|
| """Returns the short branch name, e.g. 'master'."""
|
| @@ -464,6 +465,13 @@ or verify this branch is set up to track another (via the --track argument to
|
| swallow_stderr=True, error_ok=True)
|
| self.has_patchset = False
|
|
|
| + def GetPatchSetDiff(self, issue):
|
| + # Grab the last patchset of the issue first.
|
| + data = json.loads(self._RpcServer().Send('/api/%s' % issue))
|
| + patchset = data['patchsets'][-1]
|
| + return self._RpcServer().Send(
|
| + '/download/issue%s_%s.diff' % (issue, patchset))
|
| +
|
| def SetIssue(self, issue):
|
| """Set this branch's issue. If issue=0, clears the issue."""
|
| if issue:
|
| @@ -493,8 +501,10 @@ or verify this branch is set up to track another (via the --track argument to
|
| def _RpcServer(self):
|
| """Returns an upload.RpcServer() to access this review's rietveld instance.
|
| """
|
| - server = self.GetRietveldServer()
|
| - return upload.GetRpcServer(server, save_cookies=True)
|
| + if not self._rpc_server:
|
| + server = self.GetRietveldServer()
|
| + self._rpc_server = upload.GetRpcServer(server, save_cookies=True)
|
| + return self._rpc_server
|
|
|
| def _IssueSetting(self):
|
| """Return the git setting that stores this change's issue."""
|
| @@ -1220,23 +1230,16 @@ def CMDpatch(parser, args):
|
| if re.match(r'\d+', issue_arg):
|
| # Input is an issue id. Figure out the URL.
|
| issue = issue_arg
|
| - server = settings.GetDefaultServerUrl()
|
| - fetch = urllib2.urlopen('%s/%s' % (server, issue)).read()
|
| - m = re.search(r'/download/issue[0-9]+_[0-9]+.diff', fetch)
|
| - if not m:
|
| - DieWithError('Must pass an issue ID or full URL for '
|
| - '\'Download raw patch set\'')
|
| - url = '%s%s' % (server, m.group(0).strip())
|
| + patch_data = Changelist().GetPatchSetDiff(issue)
|
| else:
|
| # Assume it's a URL to the patch. Default to http.
|
| issue_url = FixUrl(issue_arg)
|
| match = re.match(r'.*?/issue(\d+)_\d+.diff', issue_url)
|
| - if match:
|
| - issue = match.group(1)
|
| - url = issue_arg
|
| - else:
|
| + if not match:
|
| DieWithError('Must pass an issue ID or full URL for '
|
| '\'Download raw patch set\'')
|
| + issue = match.group(1)
|
| + patch_data = urllib2.urlopen(issue_arg).read()
|
|
|
| if options.newbranch:
|
| if options.force:
|
| @@ -1251,7 +1254,6 @@ def CMDpatch(parser, args):
|
| if top:
|
| os.chdir(top)
|
|
|
| - patch_data = urllib2.urlopen(url).read()
|
| # Git patches have a/ at the beginning of source paths. We strip that out
|
| # with a sed script rather than the -p flag to patch so we can feed either
|
| # Git or svn-style patches into the same apply command.
|
|
|