| # 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|.ijwb|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.""" |