#!/bin/bash
#
# Copyright 2017 The Bazel 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.
#
# Test that all sources in Bazel are contained in the //:srcs filegroup
# Actually this test just compares the two input (the file list and the
# //:srcs filegroup and show the diff)

LIST_SRCS="${TEST_SRCDIR}/local_bazel_source_list/sources.txt"
SRCS_QUERY="$(mktemp)"

# Rewrite labels to file paths. This assumes any external repo is actually
# a local_repository located in third_party.
cat "${TEST_SRCDIR}/io_bazel/src/test/shell/bazel/srcs_list" \
  | sed -e 's|@bazel_tools//||' \
  | sed -e 's|@io_bazel//||' \
  | sed -e 's|@\([^/]*\)//|third_party/\1|' \
  | sed -e 's|^//||' | sed -e 's|^:||' | sed -e 's|:|/|' \
  | sort -u >"${SRCS_QUERY}"

res="$(diff -U 0 "${LIST_SRCS}" "${SRCS_QUERY}" | sed -e 's|^-||' \
  | grep -Ev '^(@@|\+\+|--)' || true)"

if [ -n "${res}" ]; then
  echo "//:srcs filegroup do not contains all the sources, missing:
${res}"
  exit 1
fi
