diff options
author | Stephen Hines <srhines@google.com> | 2016-11-08 05:50:14 +0000 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2016-11-08 05:50:14 +0000 |
commit | 171244fb7af5b3ac308238820578bbddd7bb1709 (patch) | |
tree | 8e77830f27585f208ca397b13355c8d2ec1fc5d6 /clang/tools/clang-format | |
parent | 62f99cc4864364d6bd01321a4dccb4466618a318 (diff) | |
download | bcm5719-llvm-171244fb7af5b3ac308238820578bbddd7bb1709.tar.gz bcm5719-llvm-171244fb7af5b3ac308238820578bbddd7bb1709.zip |
clang-format: Use git-ls-tree to get file mode in diff mode
Summary:
If a file has been renamed/deleted from the filesystem and --diff mode
with two commits is active, attempting to get the file's mode will fail.
This change uses git-ls-tree instead to get the correct permissions for
the given revision.
Patch by Luis Hector Chavez!
Reviewers: djasper, lodato
Subscribers: srhines, cfe-commits
Differential Revision: https://reviews.llvm.org/D26287
llvm-svn: 286212
Diffstat (limited to 'clang/tools/clang-format')
-rwxr-xr-x | clang/tools/clang-format/git-clang-format | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/tools/clang-format/git-clang-format b/clang/tools/clang-format/git-clang-format index ffa14368b66..74fd451a847 100755 --- a/clang/tools/clang-format/git-clang-format +++ b/clang/tools/clang-format/git-clang-format @@ -346,7 +346,16 @@ def run_clang_format_and_save_to_tree(changed_lines, revision=None, Returns the object ID (SHA-1) of the created tree.""" def index_info_generator(): for filename, line_ranges in changed_lines.iteritems(): - mode = oct(os.stat(filename).st_mode) + if revision: + git_metadata_cmd = ['git', 'ls-tree', + '%s:%s' % (revision, os.path.dirname(filename)), + os.path.basename(filename)] + git_metadata = subprocess.Popen(git_metadata_cmd, stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + stdout = git_metadata.communicate()[0] + mode = oct(int(stdout.split()[0], 8)) + else: + mode = oct(os.stat(filename).st_mode) blob_id = clang_format_to_blob(filename, line_ranges, revision=revision, binary=binary, |