forked from OSchip/llvm-project
[git-clang-format] Do not apply clang-format to symlinks
This fixes PR46992. Git stores symlinks as text files and we should not format them even if they have one of the requested extensions. (Move the call to `cd_to_toplevel()` up a few lines so we can also print the skipped symlinks during verbose output.) Differential Revision: https://reviews.llvm.org/D101878
This commit is contained in:
parent
9ab49ae55d
commit
0fd0a010a1
|
@ -244,6 +244,9 @@ clang-format
|
|||
accepts ``AllIfsAndElse`` value that allows to put "else if" and "else" short
|
||||
statements on a single line. (Fixes https://llvm.org/PR50019.)
|
||||
|
||||
- ``git-clang-format`` no longer formats changes to symbolic links. (Fixes
|
||||
https://llvm.org/PR46992.)
|
||||
|
||||
libclang
|
||||
--------
|
||||
|
||||
|
|
|
@ -137,10 +137,15 @@ def main():
|
|||
if opts.verbose >= 1:
|
||||
ignored_files = set(changed_lines)
|
||||
filter_by_extension(changed_lines, opts.extensions.lower().split(','))
|
||||
# The computed diff outputs absolute paths, so we must cd before accessing
|
||||
# those files.
|
||||
cd_to_toplevel()
|
||||
filter_symlinks(changed_lines)
|
||||
if opts.verbose >= 1:
|
||||
ignored_files.difference_update(changed_lines)
|
||||
if ignored_files:
|
||||
print('Ignoring changes in the following files (wrong extension):')
|
||||
print(
|
||||
'Ignoring changes in the following files (wrong extension or symlink):')
|
||||
for filename in ignored_files:
|
||||
print(' %s' % filename)
|
||||
if changed_lines:
|
||||
|
@ -151,9 +156,6 @@ def main():
|
|||
if opts.verbose >= 0:
|
||||
print('no modified files to format')
|
||||
return
|
||||
# The computed diff outputs absolute paths, so we must cd before accessing
|
||||
# those files.
|
||||
cd_to_toplevel()
|
||||
if len(commits) > 1:
|
||||
old_tree = commits[1]
|
||||
new_tree = run_clang_format_and_save_to_tree(changed_lines,
|
||||
|
@ -337,6 +339,13 @@ def filter_by_extension(dictionary, allowed_extensions):
|
|||
del dictionary[filename]
|
||||
|
||||
|
||||
def filter_symlinks(dictionary):
|
||||
"""Delete every key in `dictionary` that is a symlink."""
|
||||
for filename in list(dictionary.keys()):
|
||||
if os.path.islink(filename):
|
||||
del dictionary[filename]
|
||||
|
||||
|
||||
def cd_to_toplevel():
|
||||
"""Change to the top level of the git repository."""
|
||||
toplevel = run('git', 'rev-parse', '--show-toplevel')
|
||||
|
|
Loading…
Reference in New Issue