# 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. # # Create a repository that produce the list of sources of Bazel in order to test # that all sources in Bazel are contained in the //:srcs filegroup. CI systems # can set the SRCS_EXCLUDES environment variable to exclude certain files from # being considered as sources. """A repository definition to fetch all sources in Bazel.""" def _impl(rctx): workspace = rctx.path(Label("//:BUILD")).dirname srcs_excludes = "XXXXXXXXXXXXXX1268778dfsdf4" # Depending in ~/.git/logs/HEAD is a trick to depends on something that # change everytime the workspace content change. r = rctx.execute(["test", "-f", "%s/.git/logs/HEAD" % workspace]) if r.return_code == 0: # We only add the dependency if it exists. unused_var = rctx.path(Label("//:.git/logs/HEAD")) # pylint: disable=unused-variable if "SRCS_EXCLUDES" in rctx.os.environ: srcs_excludes = rctx.os.environ["SRCS_EXCLUDES"] r = rctx.execute(["find", str(workspace), "-type", "f"]) rctx.file("find.result.raw", r.stdout.replace(str(workspace) + "/", "")) rctx.file("BUILD", """ genrule( name = "sources", outs = ["sources.txt"], srcs = ["find.result.raw"], visibility = ["//visibility:public"], cmd = " | ".join([ "cat $<", "grep -Ev '^(\\\\.git|out/|output/|bazel-|derived|tools/defaults/BUILD)'", "grep -Ev '%s'", "sort -u > $@", ]), ) """ % srcs_excludes) list_source_repository = repository_rule( implementation = _impl, environ = ["SRCS_EXCLUDES"], ) """Create a //:sources target containing the list of sources of Bazel. SRCS_EXCLUDES give a regex of files to excludes in the list."""