summaryrefslogtreecommitdiffstats
path: root/clang/tools/clang-format
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2016-11-08 05:50:14 +0000
committerStephen Hines <srhines@google.com>2016-11-08 05:50:14 +0000
commit171244fb7af5b3ac308238820578bbddd7bb1709 (patch)
tree8e77830f27585f208ca397b13355c8d2ec1fc5d6 /clang/tools/clang-format
parent62f99cc4864364d6bd01321a4dccb4466618a318 (diff)
downloadbcm5719-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-xclang/tools/clang-format/git-clang-format11
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,
OpenPOWER on IntegriCloud