summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2017-12-13 09:36:51 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-12-13 13:44:23 +0100
commit2e4ecd03d63268eec0f4045b126aa8cfdb75dee7 (patch)
tree8cbc381fedcf1b8d426dd0f95e96474eb1e2387a /solenv
parent2f28d2b4fa92be7dca47ea48c1a68db7b2060608 (diff)
clang-format: ignore not staged hunks
09:28 <@sberg> vmiklos, I think I ran into a scenario last night where I had both `git add`-ed and non-added changes in a non-blacklisted file, and the non-added changes violated clang-format (and the added ones did not), and the commit hook complained So make sure we validate the index version, not the filesystem one. (And modify a formatted file to trigger CI validation of the hook change itself.) Change-Id: I6431b35ac50dd03741104b5709c5195d6ff28632 Reviewed-on: https://gerrit.libreoffice.org/46368 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'solenv')
-rw-r--r--solenv/clang-format/ClangFormat.pm12
1 files changed, 10 insertions, 2 deletions
diff --git a/solenv/clang-format/ClangFormat.pm b/solenv/clang-format/ClangFormat.pm
index 1ec19ada2466..024fe7c1f87f 100644
--- a/solenv/clang-format/ClangFormat.pm
+++ b/solenv/clang-format/ClangFormat.pm
@@ -91,11 +91,19 @@ sub find()
return $clang_format;
}
-# Diffs the original and the formatted version of a single file.
+# Diffs the original and the formatted version of a single file from the index.
sub check_style($$)
{
+ # Make sure that not staged changes are not considered when diffing.
my ($clang_format, $filename) = @_;
- return system("'$clang_format' $filename | git --no-pager diff --no-index --exit-code $filename -") == 0;
+ my $index = $filename . ".index";
+ system("git show :$filename > $index");
+ my $format = $index . ".format";
+ system("'$clang_format' -assume-filename=$filename $index > $format");
+ my $ret = system("git --no-pager diff --no-index --exit-code $index $format") == 0;
+ unlink($index);
+ unlink($format);
+ return $ret;
}
# Private functions.