#!/bin/bash # # Copyright 2014 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Verify there is no CPRINTS("....\n", ...) statements added to the code. upstream_branch="$(git rev-parse --abbrev-ref --symbolic-full-name @{u} \ 2>/dev/null)" if [[ -z ${upstream_branch} ]]; then echo "Current branch does not have an upstream branch" >&2 exit 1 fi # This will print the offending CPRINTS invocations, if any, and the names of # the files they are in. if git diff "${upstream_branch}" HEAD | grep -e '^+\(.*CPRINTS(.*\\n"\|++\)' | grep CPRINTS -B1 >&2 ; then echo "error: CPRINTS strings should not include newline characters" >&2 exit 1 fi # Verify that all targets were built and all tests passed after the latest # source code modification. if [[ ! -e .tests-passed ]]; then echo 'Unit tests have not passed. Please run "make buildall -j".' exit 1 fi # Directories that need to be tested by separate unit tests. unittest_dirs="util/ec3po/ extra/stack_analyzer/" changed=$(find ${PRESUBMIT_FILES} -newer .tests-passed) # Filter out unittest_dirs files from changed files. They're handled separately. for dir in $unittest_dirs; do changed=$(echo "${changed}" | grep -v "${dir}") done # Filter out flash_ec since it's not part of any unit tests. changed=$(echo "${changed}" | grep -v util/flash_ec) # Filter out uart_stress_tester changed=$(echo "${changed}" | grep -v util/uart_stress_tester.py) # Filter out this file itself. changed=$(echo "${changed}" | grep -v util/presubmit_check.sh) # Filter out the OWNERS file. changed=$(echo "${changed}" | grep -v OWNERS) # Filter out the README.md file. changed=$(echo "${changed}" | grep -v README.md) # Filter out the navbar.md file. changed=$(echo "${changed}" | grep -v navbar.md) # Filter out markdown docs/ directory changed=$(echo "${changed}" | grep -v docs/) if [[ -n "${changed}" ]]; then echo "Files have changed since last time unit tests passed:" echo "${changed}" | sed -e 's/^/ /' echo 'Please run "make buildall -j".' exit 1 fi for dir in $unittest_dirs; do dir_files=$(echo "${PRESUBMIT_FILES}" | grep "${dir}") if [[ -z "${dir_files}" ]]; then continue fi if [[ ! -e "${dir}/.tests-passed" ]]; then echo "Unit tests have not passed. Please run \"${dir}run_tests.sh\"." exit 1 fi changed_files=$(find ${dir_files} -newer "${dir}/.tests-passed") if [[ -n "${changed_files}" ]] && [[ -n "${dir_files}" ]]; then echo "Files have changed since last time unit tests passed:" echo "${changed_files}" | sed -e 's/^/ /' echo "Please run \"${dir}run_tests.sh\"." exit 1 fi done