| Index: gclient.py
|
| diff --git a/gclient.py b/gclient.py
|
| index a8dcf236198a83a936131b4eb5c9f430c613f1c6..059483a67ce70bcfc39423a4ebb9da8852967591 100644
|
| --- a/gclient.py
|
| +++ b/gclient.py
|
| @@ -642,23 +642,31 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
|
| if parsed_url:
|
| env['GCLIENT_URL'] = parsed_url
|
| env['GCLIENT_DEP_PATH'] = self.name
|
| - if options.prepend_dir:
|
| + if options.prepend_dir and scm == 'git':
|
| print_stdout = False
|
| def filter_fn(line):
|
| + """Git-specific path marshaling. It is optimized for git-grep."""
|
| +
|
| + def mod_path(git_pathspec):
|
| + match = re.match('^(\\S+?:)?([^\0]+)$', git_pathspec)
|
| + modified_path = os.path.join(self.name, match.group(2))
|
| + branch = match.group(1) or ''
|
| + return '%s%s' % (branch, modified_path)
|
| +
|
| + match = re.match('^Binary file ([^\0]+) matches$', line)
|
| + if match:
|
| + print 'Binary file %s matches' % mod_path(match.group(1))
|
| + return
|
| +
|
| items = line.split('\0')
|
| - if len(items) == 1:
|
| - match = re.match('Binary file (.*) matches$', line)
|
| - if match:
|
| - print 'Binary file %s matches' % os.path.join(
|
| - self.name, match.group(1))
|
| - else:
|
| - print line
|
| - elif len(items) == 2 and items[1]:
|
| - print '%s : %s' % (os.path.join(self.name, items[0]), items[1])
|
| - else:
|
| + if len(items) == 2 and items[1]:
|
| + print '%s : %s' % (mod_path(items[0]), items[1])
|
| + elif len(items) >= 2:
|
| # Multiple null bytes or a single trailing null byte indicate
|
| # git is likely displaying filenames only (such as with -l)
|
| - print '\n'.join(os.path.join(self.name, f) for f in items if f)
|
| + print '\n'.join(mod_path(path) for path in items if path)
|
| + else:
|
| + print line
|
| else:
|
| print_stdout = True
|
| filter_fn = None
|
|
|