| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | #!/usr/bin/env bash# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.# Exit on error.set -eif [ -n "$USE_CLANG" ]; then  echo "Error: Coverage test is supported only for gcc."  exit 1fiROOT=".."# Fetch right version of gcovif [ -d /mnt/gvfs/third-party -a -z "$CXX" ]; then  source $ROOT/build_tools/fbcode_config.sh  GCOV=$GCC_BASE/bin/gcovelse  GCOV=$(which gcov)fiCOVERAGE_DIR="$PWD/COVERAGE_REPORT"mkdir -p $COVERAGE_DIR# Find all gcno files to generate the coverage reportGCNO_FILES=`find $ROOT -name "*.gcno"`$GCOV --preserve-paths --relative-only --no-output $GCNO_FILES 2>/dev/null |  # Parse the raw gcov report to more human readable form.  python $ROOT/coverage/parse_gcov_output.py |  # Write the output to both stdout and report file.  tee $COVERAGE_DIR/coverage_report_all.txt &&echo -e "Generated coverage report for all files: $COVERAGE_DIR/coverage_report_all.txt\n"# TODO: we also need to get the files of the latest commits.# Get the most recently committed files.LATEST_FILES=`  git show --pretty="format:" --name-only HEAD |  grep -v "^$" |  paste -s -d,`RECENT_REPORT=$COVERAGE_DIR/coverage_report_recent.txtecho -e "Recently updated files: $LATEST_FILES\n" > $RECENT_REPORT$GCOV --preserve-paths --relative-only --no-output $GCNO_FILES 2>/dev/null |  python $ROOT/coverage/parse_gcov_output.py -interested-files $LATEST_FILES |  tee -a $RECENT_REPORT &&echo -e "Generated coverage report for recently updated files: $RECENT_REPORT\n"# Unless otherwise specified, we'll not generate html report by defaultif [ -z "$HTML" ]; then  exit 0fi# Generate the html report. If we cannot find lcov in this machine, we'll simply# skip this step.echo "Generating the html coverage report..."LCOV=$(which lcov || true 2>/dev/null)if [ -z $LCOV ]then  echo "Skip: Cannot find lcov to generate the html report."  exit 0fiLCOV_VERSION=$(lcov -v | grep 1.1 || true)if [ $LCOV_VERSION ]then  echo "Not supported lcov version. Expect lcov 1.1."  exit 0fi(cd $ROOT; lcov --no-external \     --capture  \     --directory $PWD \     --gcov-tool $GCOV \     --output-file $COVERAGE_DIR/coverage.info)genhtml $COVERAGE_DIR/coverage.info -o $COVERAGE_DIRecho "HTML Coverage report is generated in $COVERAGE_DIR"
 |