Add two guidelines:
- pipe characters should appear at the end of lines, and not cause
indentation
- pipes should be avoided when they swallow exit codes that can
potentially fail
---
Documentation/CodingGuidelines | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index 48aa4edfb..6d265327c 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -118,6 +118,24 @@ For shell scripts specifically (not exhaustive):
do this
fi
+ - If a command sequence joined with && or || or | spans multiple
+ lines, put each command on a separate line and put && and || and |
+ operators at the end of each line, rather than the start. This
+ means you don't need to use \ to join lines, since the above
+ operators imply the sequence isn't finished.
+
+ (incorrect)
+ grep blob verify_pack_result \
+ | awk -f print_1.awk \
+ | sort >actual &&
+ ...
+
+ (correct)
+ grep blob verify_pack_result |
+ awk -f print_1.awk |
+ sort >actual &&
+ ...
+
- We prefer "test" over "[ ... ]".
- We do not write the noiseword "function" in front of shell
@@ -163,6 +181,15 @@ For shell scripts specifically (not exhaustive):
does not have such a problem.
+ - In a piped chain such as "grep blob objects | sort", the exit codes
+ returned by processes besides the last are ignored. This means that
+ if git crashes at the beginning or middle of a chain, it may go
+ undetected. Prefer writing the output of that command to a
+ temporary file with '>' rather than pipe it.
+
+ - The $(git ...) construct also discards git's exit code, so if the
+ goal is to test that particular command, redirect its output to a
+ temporary file rather than wrap it with $( ).
For C programs:
--
2.19.0.444.g18242da7ef-goog