mirror of
https://github.com/bazel-contrib/bazel-lib
synced 2024-11-25 11:32:33 +00:00
83 lines
2.4 KiB
Bash
83 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
|
set -o errexit -o nounset -o pipefail
|
|
escape() {
|
|
echo "$1" |
|
|
sed 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g' |
|
|
awk 1 ORS=' ' # preserve newlines
|
|
}
|
|
fail() {
|
|
cat <<EOF >"${XML_OUTPUT_FILE:-/dev/null}"
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<testsuites name="$(escape "{name}")" tests="1" failures="1">
|
|
<testsuite name="$(escape "{name}")" tests="1" failures="1" id="0">
|
|
<testcase name="$(escape "{name}")" assertions="1" status="failed">
|
|
<failure message="$(escape "$1")" type="diff"></failure>
|
|
</testcase>
|
|
</testsuite>
|
|
</testsuites>
|
|
EOF
|
|
echo >&2 "FAIL: $1"
|
|
exit 1
|
|
}
|
|
resolve_exec_root() {
|
|
local RUNFILES_PARENT
|
|
RUNFILES_PARENT=$(dirname "$RUNFILES_DIR")
|
|
local BIN_DIR
|
|
BIN_DIR="${RUNFILES_PARENT%$BUILD_FILE_DIR}"
|
|
local EXEC_ROOT
|
|
EXEC_ROOT=$(dirname $(dirname $(dirname "${BIN_DIR}")))
|
|
|
|
echo -n "$EXEC_ROOT"
|
|
}
|
|
find_file() {
|
|
local F_RAW="$1"
|
|
local F="$2"
|
|
local RF=
|
|
|
|
if [[ -f "$TEST_SRCDIR/$F1" || -d "$TEST_SRCDIR/$F" ]]; then
|
|
RF="$TEST_SRCDIR/$F"
|
|
elif [[ -d "${RUNFILES_DIR:-/dev/null}" && "${RUNFILES_MANIFEST_ONLY:-}" != 1 ]]; then
|
|
EXEC_ROOT=$(resolve_exec_root)
|
|
if [[ -e "$EXEC_ROOT/$F_RAW" ]]; then
|
|
RF="$EXEC_ROOT/$F_RAW"
|
|
else
|
|
RF="$RUNFILES_DIR/$F1"
|
|
fi
|
|
elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
|
|
RF="$(grep -F -m1 "$F " "$RUNFILES_MANIFEST_FILE" | sed 's/^[^ ]* //')"
|
|
else
|
|
echo >&2 "ERROR: could not find \"${F_RAW}\""
|
|
exit 1
|
|
fi
|
|
|
|
echo -n "$RF"
|
|
}
|
|
BUILD_FILE_DIR="$(dirname "{build_file_path}")"
|
|
F1="{file1}"
|
|
F2="{file2}"
|
|
[[ "$F1" =~ ^external/ ]] && F1="${F1#external/}" || F1="$TEST_WORKSPACE/$F1"
|
|
[[ "$F2" =~ ^external/ ]] && F2="${F2#external/}" || F2="$TEST_WORKSPACE/$F2"
|
|
RF1="$(find_file {file1} "$F1")"
|
|
RF2="$(find_file {file2} "$F2")"
|
|
DF1=
|
|
DF2=
|
|
[[ ! -d "$RF1" ]] || DF1=1
|
|
[[ ! -d "$RF2" ]] || DF2=1
|
|
if [[ "$DF1" ]] && [[ ! "$DF2" ]]; then
|
|
echo >&2 "ERROR: cannot compare a directory \"{file1}\" against a file \"{file2}\""
|
|
exit 1
|
|
fi
|
|
if [[ ! "$DF1" ]] && [[ "$DF2" ]]; then
|
|
echo >&2 "ERROR: cannot compare a file \"{file1}\" against a directory \"{file2}\""
|
|
exit 1
|
|
fi
|
|
if [[ "$DF1" ]] || [[ "$DF2" ]]; then
|
|
if ! diff -r "$RF1" "$RF2"; then
|
|
fail "directories \"{file1}\" and \"{file2}\" differ. {fail_msg}"
|
|
fi
|
|
else
|
|
if ! diff "$RF1" "$RF2"; then
|
|
fail "files \"{file1}\" and \"{file2}\" differ. {fail_msg}"
|
|
fi
|
|
fi
|