From 81d2f97b2e34d9124667924df2d9365f5a31d2ae Mon Sep 17 00:00:00 2001 From: Gil Date: Thu, 30 Nov 2017 09:10:58 -0800 Subject: Allow clang-format to find Firestore/Source/Auth (#508) * Avoid pruning paths with find find . -path foo -path bar -path baz is horrifically inefficient; properly excluding all of FirebaseAuth without excluding Firestore/Source/Auth ends up taking 1.5 minutes on my machine. Deleting via sed is much faster. * Allow a branch name or filenames to be specified on the command line e.g. ./scripts/style.sh master formats only files changed since master. * Format Firebase/Source/Auth code * Use alternate delimeter for path regexen --- scripts/style.sh | 56 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 13 deletions(-) (limited to 'scripts/style.sh') diff --git a/scripts/style.sh b/scripts/style.sh index 7113177..494a937 100755 --- a/scripts/style.sh +++ b/scripts/style.sh @@ -11,16 +11,46 @@ # See the License for the specific language governing permissions and # limitations under the License. -find . \ - -name 'third_party' -prune -o \ - -name 'Auth' -prune -o \ - -name 'AuthSamples' -prune -o \ - -name 'Database' -prune -o \ - -name 'FirebaseCommunity.h' -prune -o \ - -name 'Messaging' -prune -o \ - -name 'Pods' -prune -o \ - -path '*/Firestore/Port/*' -prune -o \ - \( -name '*.[mh]' -o -name '*.mm' -o -name '*.cc' \) \ - -not -name '*.pbobjc.*' \ - -not -name '*.pbrpc.*' \ - -print0 | xargs -0 clang-format -style=file -i +# Usage: +# ./scripts/style.sh [branch-name | filenames] +# +# With no arguments, formats all eligible files in the repo +# Pass a branch name to format all eligible files changed since that branch +# Pass a specific file or directory name to format just files found there +# +# Commonly +# ./scripts/style.sh master + +set -euo pipefail + +( + if [[ $# -gt 0 ]]; then + if git rev-parse "$1" -- >& /dev/null; then + # Argument was a branch name show files changed since that branch + git diff --name-only --relative + else + # Otherwise assume the passed things are files or directories + find "$@" -type f + fi + else + # Do everything by default + find . -type f + fi +) | sed -E -n ' +# Build outputs +\%/Pods/% d +\%^./build/% d + +# Sources controlled outside this tree +\%/third_party/% d +\%/Firestore/Port/% d + +# Sources within the tree that are not subject to formatting +\%^./(Example|Firebase)/(Auth|AuthSamples|Database|Messaging)/% d + +# Checked-in generated code +\%\.pb(objc|rpc)\.% d + +# Format C-ish sources only +\%\.(h|m|mm|cc)$% p +' | xargs clang-format -style=file -i -- cgit v1.2.3