| #!/bin/bash |
| # Copyright 2018 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" |
| readonly BUILDTOOLS_DIR="${SCRIPT_DIR}/../buildtools" |
| readonly GN="${BUILDTOOLS_DIR}/gn" |
| |
| if [[ $# -gt 1 && "$1" = --fix ]]; then |
| readonly mode=fix |
| shift |
| else |
| readonly mode=check |
| fi |
| |
| if [[ $# -eq 0 ]]; then |
| echo >&2 "Usage: $0 [--fix] project..." |
| exit 1 |
| fi |
| |
| check_file() { |
| local -r file="$1" |
| "$GN" format --dry-run "$file" && return |
| local -r status=$? |
| if [[ $status -eq 2 ]]; then |
| echo "*** File $file is not formatted correctly." |
| echo "*** To fix, run: gn format $file" |
| echo |
| diff -u "$file" <("$GN" format --stdin < "$file") |
| fi |
| return $status |
| } |
| |
| fix_file() { |
| local -r file="$1" |
| "$GN" format "$file" |
| } |
| |
| handle_files() { |
| local status=0 |
| while read file; do |
| ${mode}_file "$project/$file" || status=$? |
| done |
| return $status |
| } |
| |
| set -o pipefail |
| status=0 |
| for project in "$@"; do |
| git -C "$project" ls-files -- '*.gn*' | handle_files || status=$? |
| done |
| |
| if [[ $status -ne 0 ]]; then |
| echo |
| echo "*** For a good time, try git file-format" |
| echo |
| fi |
| |
| exit $status |