aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts
diff options
context:
space:
mode:
authorGravatar Gil <mcg@google.com>2017-11-30 09:10:58 -0800
committerGravatar GitHub <noreply@github.com>2017-11-30 09:10:58 -0800
commit81d2f97b2e34d9124667924df2d9365f5a31d2ae (patch)
treecd8e8fbb229a52cfbf688fb4c0f6506b7b1504e1 /scripts
parent123ce4cdea12140a5e6aa75de5627fc1dfc7e787 (diff)
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
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/style.sh56
1 files changed, 43 insertions, 13 deletions
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