| Index: git_cl.py
|
| diff --git a/git_cl.py b/git_cl.py
|
| index c78207bdc9ee4f1ab1541ec1ca74238d8621b377..fd795778b51c583816f963a6547a1f4f30568e60 100755
|
| --- a/git_cl.py
|
| +++ b/git_cl.py
|
| @@ -40,6 +40,7 @@ from third_party import colorama
|
| from third_party import httplib2
|
| from third_party import upload
|
| import auth
|
| +import checkout
|
| import clang_format
|
| import commit_queue
|
| import dart_format
|
| @@ -990,12 +991,6 @@ class _ParsedIssueNumberArgument(object):
|
| return self.issue is not None
|
|
|
|
|
| -class _RietveldParsedIssueNumberArgument(_ParsedIssueNumberArgument):
|
| - def __init__(self, *args, **kwargs):
|
| - self.patch_url = kwargs.pop('patch_url', None)
|
| - super(_RietveldParsedIssueNumberArgument, self).__init__(*args, **kwargs)
|
| -
|
| -
|
| def ParseIssueNumberArgument(arg):
|
| """Parses the issue argument and returns _ParsedIssueNumberArgument."""
|
| fail_result = _ParsedIssueNumberArgument()
|
| @@ -1812,10 +1807,6 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase):
|
| def GetMostRecentPatchset(self):
|
| return self.GetIssueProperties()['patchsets'][-1]
|
|
|
| - def GetPatchSetDiff(self, issue, patchset):
|
| - return self.RpcServer().get(
|
| - '/download/issue%s_%s.diff' % (issue, patchset))
|
| -
|
| def GetIssueProperties(self):
|
| if self._props is None:
|
| issue = self.GetIssue()
|
| @@ -1972,8 +1963,6 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase):
|
|
|
| def CMDPatchWithParsedIssue(self, parsed_issue_arg, reject, nocommit,
|
| directory):
|
| - # TODO(maruel): Use apply_issue.py
|
| -
|
| # PatchIssue should never be called with a dirty tree. It is up to the
|
| # caller to check this, but just in case we assert here since the
|
| # consequences of the caller not checking this could be dire.
|
| @@ -1983,47 +1972,13 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase):
|
| if parsed_issue_arg.hostname:
|
| self._rietveld_server = 'https://%s' % parsed_issue_arg.hostname
|
|
|
| - if (isinstance(parsed_issue_arg, _RietveldParsedIssueNumberArgument) and
|
| - parsed_issue_arg.patch_url):
|
| - assert parsed_issue_arg.patchset
|
| - patchset = parsed_issue_arg.patchset
|
| - patch_data = urllib2.urlopen(parsed_issue_arg.patch_url).read()
|
| - else:
|
| - patchset = parsed_issue_arg.patchset or self.GetMostRecentPatchset()
|
| - patch_data = self.GetPatchSetDiff(self.GetIssue(), patchset)
|
| -
|
| - # Switch up to the top-level directory, if necessary, in preparation for
|
| - # applying the patch.
|
| - top = settings.GetRelativeRoot()
|
| - if top:
|
| - os.chdir(top)
|
| -
|
| - # 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.
|
| - # re.sub() should be used but flags=re.MULTILINE is only in python 2.7.
|
| + patchset = parsed_issue_arg.patchset or self.GetMostRecentPatchset()
|
| + patchset_object = self.RpcServer().get_patch(self.GetIssue(), patchset)
|
| + scm_obj = checkout.GitCheckout(settings.GetRoot(), None, None, None, None)
|
| try:
|
| - patch_data = subprocess2.check_output(
|
| - ['sed', '-e', 's|^--- a/|--- |; s|^+++ b/|+++ |'], stdin=patch_data)
|
| - except subprocess2.CalledProcessError:
|
| - DieWithError('Git patch mungling failed.')
|
| - logging.info(patch_data)
|
| -
|
| - # We use "git apply" to apply the patch instead of "patch" so that we can
|
| - # pick up file adds.
|
| - # The --index flag means: also insert into the index (so we catch adds).
|
| - cmd = ['git', 'apply', '--index', '-p0']
|
| - if directory:
|
| - cmd.extend(('--directory', directory))
|
| - if reject:
|
| - cmd.append('--reject')
|
| - elif IsGitVersionAtLeast('1.7.12'):
|
| - cmd.append('--3way')
|
| - try:
|
| - subprocess2.check_call(cmd, env=GetNoGitPagerEnv(),
|
| - stdin=patch_data, stdout=subprocess2.VOID)
|
| - except subprocess2.CalledProcessError:
|
| - print('Failed to apply the patch')
|
| + scm_obj.apply_patch(patchset_object)
|
| + except Exception as e:
|
| + print(str(e))
|
| return 1
|
|
|
| # If we had an issue, commit the current state and register the issue.
|
| @@ -2047,24 +2002,23 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase):
|
| match = re.match(r'/(\d+)/$', parsed_url.path)
|
| match2 = re.match(r'ps(\d+)$', parsed_url.fragment)
|
| if match and match2:
|
| - return _RietveldParsedIssueNumberArgument(
|
| + return _ParsedIssueNumberArgument(
|
| issue=int(match.group(1)),
|
| patchset=int(match2.group(1)),
|
| hostname=parsed_url.netloc)
|
| # Typical url: https://domain/<issue_number>[/[other]]
|
| match = re.match('/(\d+)(/.*)?$', parsed_url.path)
|
| if match:
|
| - return _RietveldParsedIssueNumberArgument(
|
| + return _ParsedIssueNumberArgument(
|
| issue=int(match.group(1)),
|
| hostname=parsed_url.netloc)
|
| # Rietveld patch: https://domain/download/issue<number>_<patchset>.diff
|
| match = re.match(r'/download/issue(\d+)_(\d+).diff$', parsed_url.path)
|
| if match:
|
| - return _RietveldParsedIssueNumberArgument(
|
| + return _ParsedIssueNumberArgument(
|
| issue=int(match.group(1)),
|
| patchset=int(match.group(2)),
|
| - hostname=parsed_url.netloc,
|
| - patch_url=gclient_utils.UpgradeToHttps(parsed_url.geturl()))
|
| + hostname=parsed_url.netloc)
|
| return None
|
|
|
| def CMDUploadChange(self, options, args, change):
|
|
|