| #!/bin/bash | 
 | # | 
 | # Copyright 2016-present the Material Components for iOS authors. All Rights Reserved. | 
 | # | 
 | # Licensed under the Apache License, Version 2.0 (the "License"); | 
 | # you may not use this file except in compliance with the License. | 
 | # You may obtain a copy of the License at | 
 | # | 
 | # http://www.apache.org/licenses/LICENSE-2.0 | 
 | # | 
 | # Unless required by applicable law or agreed to in writing, software | 
 | # distributed under the License is distributed on an "AS IS" BASIS, | 
 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | # See the License for the specific language governing permissions and | 
 | # limitations under the License. | 
 |  | 
 | # To check all components: | 
 | # | 
 | # $ check_components | 
 | # | 
 | # To check specific components: | 
 | # | 
 | # $ check_components path/to/component [path/to/component [...]] | 
 |  | 
 | function verbose_echo() { | 
 |   if [[ $verbose -ne 0 ]]; then | 
 |     echo "$*" | 
 |   fi | 
 | } | 
 |  | 
 | verbose=0 | 
 | checks="" | 
 | components="" | 
 | while [[ $# -gt 0 ]]; do | 
 |   case $1 in | 
 |     "-h" | "--help") | 
 |       echo "Usage: $0 [-h] [-v] [-c check_script ...] [path/to/component ...]" | 
 |       echo | 
 |       echo "Check all components with all checks:" | 
 |       echo "\$ $0" | 
 |       echo | 
 |       echo "Do the same but report what is going on:" | 
 |       echo "\$ $0 -v" | 
 |       echo | 
 |       echo "Check all components with scripts/check/script1 scripts/check/script2:" | 
 |       echo "\$ $0 -c scripts/check/script1 -c scripts/check/script2" | 
 |       echo | 
 |       echo "Check only components/Foo and components/private/Bar:" | 
 |       echo "\$ $0 components/Foo components/private/Bar" | 
 |       exit 0 | 
 |     ;; | 
 |     "-v" | "--verbose") | 
 |       verbose=1 | 
 |       shift 1 | 
 |     ;; | 
 |     "-c" | "--check") | 
 |       checks="$checks $2" | 
 |       shift 2 | 
 |     ;; | 
 |     *) | 
 |       components="$components $1" | 
 |       shift 1 | 
 |     ;; | 
 |   esac | 
 | done | 
 |  | 
 | readonly SCRIPTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | 
 | readonly ROOT_DIR=$(dirname "$SCRIPTS_DIR") | 
 | verbose_echo "SCRIPTS_DIR: $SCRIPTS_DIR" | 
 | verbose_echo "ROOT_DIR: $ROOT_DIR" | 
 |  | 
 | # If no component listed on the command line, find them all. | 
 | if [[ -z "$components" ]]; then | 
 |   readonly PUBLIC_COMPONENTS=$($SCRIPTS_DIR/list_components --public) | 
 |   readonly PRIVATE_COMPONENTS=$($SCRIPTS_DIR/list_components --private) | 
 |   components="$PUBLIC_COMPONENTS $PRIVATE_COMPONENTS" | 
 | fi | 
 | verbose_echo "components: $components" | 
 |  | 
 | # Find all the check scripts. | 
 | if [[ -z "$checks" ]]; then | 
 |   checks=$(find $SCRIPTS_DIR/check -type f -perm +111) | 
 | fi  | 
 | verbose_echo "checks: $checks" | 
 |  | 
 | # Run through each component, running each check in turn. | 
 | # Keep track of the number that fail any check. | 
 | verbose_echo | 
 | failed="" | 
 | for component in $components; do  | 
 |   echo "Checking $component ..." | 
 |  | 
 |   all_checks_passed=1 | 
 |   for check in $checks; do | 
 |     $check $component | 
 |     if [[ $? -ne 0 ]]; then | 
 |       all_checks_passed=0 | 
 |     fi | 
 |   done | 
 |  | 
 |   if [[ $all_checks_passed -ne 1 ]]; then | 
 |     failed="$failed $component" | 
 |   fi | 
 |   echo | 
 | done | 
 | echo | 
 |  | 
 | if [[ -z $failed ]]; then | 
 |   echo Component checks passed. | 
 | else | 
 |   echo "The following components failed:" | 
 |   for i in $failed; do | 
 |     echo $i | 
 |   done | 
 | fi |