Commit f4068aa3 authored by Aaron Gable's avatar Aaron Gable Committed by Commit Bot

Use core.quotePath=false for more git diffs

This includes a minor refactor so that some gclient_scm methods
can all share the same core.quotePath specifier.

R=iannucci

Bug: 792302
Change-Id: Iaadf190f5c0666787cf7c2ccda88d6dba9aace9b
Reviewed-on: https://chromium-review.googlesource.com/823131Reviewed-by: 's avatarRobbie Iannucci <iannucci@chromium.org>
Commit-Queue: Aaron Gable <agable@chromium.org>
parent cde045d5
...@@ -301,7 +301,7 @@ class GitCheckout(CheckoutBase): ...@@ -301,7 +301,7 @@ class GitCheckout(CheckoutBase):
if errors: if errors:
raise PatchApplicationFailed(errors, verbose) raise PatchApplicationFailed(errors, verbose)
found_files = self._check_output_git( found_files = self._check_output_git(
['diff', '--ignore-submodules', ['-c', 'core.quotePath=false', 'diff', '--ignore-submodules',
'--name-only', '--staged']).splitlines(False) '--name-only', '--staged']).splitlines(False)
if sorted(patches.filenames) != sorted(found_files): if sorted(patches.filenames) != sorted(found_files):
extra_files = sorted(set(found_files) - set(patches.filenames)) extra_files = sorted(set(found_files) - set(patches.filenames))
......
...@@ -270,12 +270,19 @@ class GitWrapper(SCMWrapper): ...@@ -270,12 +270,19 @@ class GitWrapper(SCMWrapper):
# time-stamp of the currently checked out revision. # time-stamp of the currently checked out revision.
return self._Capture(['log', '-n', '1', '--format=%ai']) return self._Capture(['log', '-n', '1', '--format=%ai'])
def _GetDiffFilenames(self, base):
"""Returns the names of files modified since base."""
return self._Capture(
# Filter to remove base if it is None.
filter(bool, ['-c', 'core.quotePath=false', 'diff', '--name-only', base])
).split()
def diff(self, options, _args, _file_list): def diff(self, options, _args, _file_list):
try: try:
merge_base = [self._Capture(['merge-base', 'HEAD', self.remote])] merge_base = [self._Capture(['merge-base', 'HEAD', self.remote])]
except subprocess2.CalledProcessError: except subprocess2.CalledProcessError:
merge_base = [] merge_base = []
self._Run(['diff'] + merge_base, options) self._Run(['-c', 'core.quotePath=false', 'diff'] + merge_base, options)
def pack(self, _options, _args, _file_list): def pack(self, _options, _args, _file_list):
"""Generates a patch file which can be applied to the root of the """Generates a patch file which can be applied to the root of the
...@@ -360,7 +367,6 @@ class GitWrapper(SCMWrapper): ...@@ -360,7 +367,6 @@ class GitWrapper(SCMWrapper):
self.Print('FAILED to break lock: %s: %s' % (to_break, ex)) self.Print('FAILED to break lock: %s: %s' % (to_break, ex))
raise raise
def update(self, options, args, file_list): def update(self, options, args, file_list):
"""Runs git to update or transparently checkout the working copy. """Runs git to update or transparently checkout the working copy.
...@@ -628,8 +634,7 @@ class GitWrapper(SCMWrapper): ...@@ -628,8 +634,7 @@ class GitWrapper(SCMWrapper):
raise gclient_utils.Error(switch_error) raise gclient_utils.Error(switch_error)
else: else:
# case 3 - the default case # case 3 - the default case
rebase_files = self._Capture( rebase_files = self._GetDiffFilenames(upstream_branch)
['diff', upstream_branch, '--name-only']).split()
if verbose: if verbose:
self.Print('Trying fast-forward merge to branch : %s' % upstream_branch) self.Print('Trying fast-forward merge to branch : %s' % upstream_branch)
try: try:
...@@ -733,7 +738,6 @@ class GitWrapper(SCMWrapper): ...@@ -733,7 +738,6 @@ class GitWrapper(SCMWrapper):
return self._Capture(['rev-parse', '--verify', 'HEAD']) return self._Capture(['rev-parse', '--verify', 'HEAD'])
def revert(self, options, _args, file_list): def revert(self, options, _args, file_list):
"""Reverts local modifications. """Reverts local modifications.
...@@ -767,7 +771,7 @@ class GitWrapper(SCMWrapper): ...@@ -767,7 +771,7 @@ class GitWrapper(SCMWrapper):
return self.update(options, [], file_list) return self.update(options, [], file_list)
if file_list is not None: if file_list is not None:
files = self._Capture(['diff', deps_revision, '--name-only']).split() files = self._GetDiffFilenames(deps_revision)
self._Scrub(deps_revision, options) self._Scrub(deps_revision, options)
self._Run(['clean', '-f', '-d'], options) self._Run(['clean', '-f', '-d'], options)
...@@ -792,10 +796,11 @@ class GitWrapper(SCMWrapper): ...@@ -792,10 +796,11 @@ class GitWrapper(SCMWrapper):
merge_base = [self._Capture(['merge-base', 'HEAD', self.remote])] merge_base = [self._Capture(['merge-base', 'HEAD', self.remote])]
except subprocess2.CalledProcessError: except subprocess2.CalledProcessError:
merge_base = [] merge_base = []
self._Run(['diff', '--name-status'] + merge_base, options, self._Run(
stdout=self.out_fh, always=options.verbose) ['-c', 'core.quotePath=false', 'diff', '--name-status'] + merge_base,
options, stdout=self.out_fh, always=options.verbose)
if file_list is not None: if file_list is not None:
files = self._Capture(['diff', '--name-only'] + merge_base).split() files = self._GetDiffFilenames(merge_base[0] if merge_base else None)
file_list.extend([os.path.join(self.checkout_path, f) for f in files]) file_list.extend([os.path.join(self.checkout_path, f) for f in files])
def GetUsableRev(self, rev, options): def GetUsableRev(self, rev, options):
...@@ -960,7 +965,7 @@ class GitWrapper(SCMWrapper): ...@@ -960,7 +965,7 @@ class GitWrapper(SCMWrapper):
branch=None, printed_path=False, merge=False): branch=None, printed_path=False, merge=False):
"""Attempt to rebase onto either upstream or, if specified, newbase.""" """Attempt to rebase onto either upstream or, if specified, newbase."""
if files is not None: if files is not None:
files.extend(self._Capture(['diff', upstream, '--name-only']).split()) files.extend(self._GetDiffFilenames(upstream))
revision = upstream revision = upstream
if newbase: if newbase:
revision = newbase revision = newbase
......
...@@ -5885,7 +5885,8 @@ def CMDowners(parser, args): ...@@ -5885,7 +5885,8 @@ def CMDowners(parser, args):
def BuildGitDiffCmd(diff_type, upstream_commit, args): def BuildGitDiffCmd(diff_type, upstream_commit, args):
"""Generates a diff command.""" """Generates a diff command."""
# Generate diff for the current branch's changes. # Generate diff for the current branch's changes.
diff_cmd = ['diff', '--no-ext-diff', '--no-prefix', diff_type, diff_cmd = ['-c', 'core.quotePath=false', 'diff',
'--no-ext-diff', '--no-prefix', diff_type,
upstream_commit, '--'] upstream_commit, '--']
if args: if args:
......
...@@ -34,7 +34,8 @@ def main(args): ...@@ -34,7 +34,8 @@ def main(args):
print 'fatal: No upstream configured for branch \'%s\'' % opts.branch print 'fatal: No upstream configured for branch \'%s\'' % opts.branch
return 1 return 1
cmd = [git.GIT_EXE, 'diff', '--patience', '-C', '-C'] cmd = [git.GIT_EXE, '-c', 'core.quotePath=false',
'diff', '--patience', '-C', '-C']
if opts.wordwise: if opts.wordwise:
cmd += ['--word-diff=color', r'--word-diff-regex=(\w+|[^[:space:]])'] cmd += ['--word-diff=color', r'--word-diff-regex=(\w+|[^[:space:]])']
cmd += [git.get_or_create_merge_base(opts.branch, par)] cmd += [git.get_or_create_merge_base(opts.branch, par)]
......
...@@ -277,7 +277,8 @@ class GIT(object): ...@@ -277,7 +277,8 @@ class GIT(object):
files, usually in the prospect to apply the patch for a try job.""" files, usually in the prospect to apply the patch for a try job."""
if not branch: if not branch:
branch = GIT.GetUpstreamBranch(cwd) branch = GIT.GetUpstreamBranch(cwd)
command = ['diff', '-p', '--no-color', '--no-prefix', '--no-ext-diff', command = ['-c', 'core.quotePath=false', 'diff',
'-p', '--no-color', '--no-prefix', '--no-ext-diff',
branch + "..." + branch_head] branch + "..." + branch_head]
if full_move: if full_move:
command.append('--no-renames') command.append('--no-renames')
...@@ -300,7 +301,8 @@ class GIT(object): ...@@ -300,7 +301,8 @@ class GIT(object):
"""Returns the list of modified files between two branches.""" """Returns the list of modified files between two branches."""
if not branch: if not branch:
branch = GIT.GetUpstreamBranch(cwd) branch = GIT.GetUpstreamBranch(cwd)
command = ['diff', '--name-only', branch + "..." + branch_head] command = ['-c', 'core.quotePath=false', 'diff',
'--name-only', branch + "..." + branch_head]
return GIT.Capture(command, cwd=cwd).splitlines(False) return GIT.Capture(command, cwd=cwd).splitlines(False)
@staticmethod @staticmethod
......
...@@ -340,7 +340,7 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase): ...@@ -340,7 +340,7 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
scm.status(options, self.args, file_list) scm.status(options, self.args, file_list)
self.assertEquals(file_list, [file_path]) self.assertEquals(file_list, [file_path])
self.checkstdout( self.checkstdout(
('\n________ running \'git diff --name-status ' ('\n________ running \'git -c core.quotePath=false diff --name-status '
'069c602044c5388d2d15c3f875b057c852003458\' in \'%s\'\nM\ta\n') % '069c602044c5388d2d15c3f875b057c852003458\' in \'%s\'\nM\ta\n') %
join(self.root_dir, '.')) join(self.root_dir, '.'))
...@@ -360,7 +360,7 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase): ...@@ -360,7 +360,7 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
expected_file_list = [join(self.base_path, x) for x in ['a', 'b']] expected_file_list = [join(self.base_path, x) for x in ['a', 'b']]
self.assertEquals(sorted(file_list), expected_file_list) self.assertEquals(sorted(file_list), expected_file_list)
self.checkstdout( self.checkstdout(
('\n________ running \'git diff --name-status ' ('\n________ running \'git -c core.quotePath=false diff --name-status '
'069c602044c5388d2d15c3f875b057c852003458\' in \'%s\'\nM\ta\nM\tb\n') % '069c602044c5388d2d15c3f875b057c852003458\' in \'%s\'\nM\ta\nM\tb\n') %
join(self.root_dir, '.')) join(self.root_dir, '.'))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment