aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Kurtis Rader <krader@skepticism.us>2016-04-12 19:57:07 -0700
committerGravatar Kurtis Rader <krader@skepticism.us>2016-04-12 19:57:07 -0700
commit706bfa70c144775126e15a960028d3b3df7980fb (patch)
tree77e4ff95eef76156bde08cc7cc36c6c8bee24588
parent8e103c231e74a3dda40d0a0e5a844ea8b6aa1e4b (diff)
improve the style.fish script
If there are uncommitted changes use `git-clang-format` to limit the style fixups to the lines being modified. Refuse to do a `make style-all` if there are uncommitted changes. Include a fix for the parsing of `git status` output that was recently incorporated into the lint.fish script.
-rw-r--r--CONTRIBUTING.md6
-rwxr-xr-xbuild_tools/style.fish42
2 files changed, 36 insertions, 12 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2c847319..e73bc344 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -40,7 +40,9 @@ The following sections discuss the specific rules for the style that should be u
make style
```
-before commiting your change. If you've already committed your changes that's okay since it will then check the files in the most recent commit. This can be useful after you've merged someone elses change and want to check that it's style is acceptable.
+before commiting your change. That will run `git-clang-format` to rewrite just the lines you're modifying.
+
+If you've already committed your changes that's okay since it will then check the files in the most recent commit. This can be useful after you've merged someone elses change and want to check that it's style is acceptable. However, in that case it will run `clang-format` to ensure the entire file, not just the lines modified by the commit, conform to the style.
If you want to check the style of the entire code base run
@@ -48,6 +50,8 @@ If you want to check the style of the entire code base run
make style-all
```
+That command will refuse to restyle any files if you have uncommitted changes.
+
### Suppressing Reformatting of the Code
If you have a good reason for doing so you can tell `clang-format` to not reformat a block of code by enclosing it in comments like this:
diff --git a/build_tools/style.fish b/build_tools/style.fish
index 76cf920d..62d8d5c7 100755
--- a/build_tools/style.fish
+++ b/build_tools/style.fish
@@ -6,6 +6,7 @@
# This runs C++ files and fish scripts (*.fish) through their respective code
# formatting programs.
#
+set git_clang_format no
set c_files
set f_files
set all no
@@ -21,17 +22,21 @@ if set -q argv[1]
end
if test $all = yes
+ set files (git status --porcelain --short --untracked-files=all | sed -e 's/^ *[^ ]* *//')
+ if set -q files[1]
+ echo
+ echo You have uncommited changes. Cowardly refusing to restyle the entire code base.
+ echo
+ exit 1
+ end
set c_files src/*.h src/*.cpp
set f_files ***.fish
else
- # We haven't been asked to reformat all the source. If there are uncommitted
- # changes reformat those, else reformat the files in the most recent commit.
- set pending (git status --porcelain --short --untracked-files=all | sed -e 's/^ *//')
- if count $pending > /dev/null
- # There are pending changes so lint those files.
- for arg in $pending
- set files $files (string split -m 1 ' ' $arg)[2]
- end
+ # We haven't been asked to reformat all the source. If there are uncommitted changes reformat
+ # those using `git clang-format`. Else reformat the files in the most recent commit.
+ set files (git status --porcelain --short --untracked-files=all | sed -e 's/^ *[^ ]* *//')
+ if set -q files[1]
+ set git_clang_format yes
else
# No pending changes so lint the files in the most recent commit.
set files (git show --name-only --pretty=oneline head | tail --lines=+2)
@@ -45,18 +50,32 @@ end
# Run the C++ reformatter if we have any C++ files.
if set -q c_files[1]
- if type -q clang-format
+ if test $git_clang_format = yes
+ if type -q git-clang-format
+ echo
+ echo ========================================
+ echo Running git-clang-format
+ echo ========================================
+ git add $c_files
+ git-clang-format
+ else
+ echo
+ echo 'WARNING: Cannot find git-clang-format command'
+ echo
+ end
+ else if type -q clang-format
echo
echo ========================================
echo Running clang-format
echo ========================================
for file in $c_files
- clang-format $file > $file.new
+ clang-format $file >$file.new
if cmp --quiet $file $file.new
echo $file was correctly formatted
rm $file.new
else
echo $file was NOT correctly formatted
+ chmod --reference=$file $file.new
mv $file.new $file
end
end
@@ -78,12 +97,13 @@ if set -q f_files[1]
echo Running fish_indent
echo ========================================
for file in $f_files
- fish_indent < $file > $file.new
+ fish_indent <$file >$file.new
if cmp --quiet $file $file.new
echo $file was correctly formatted
rm $file.new
else
echo $file was NOT correctly formatted
+ chmod --reference=$file $file.new
mv $file.new $file
end
end