如何解决Bazel:如何访问文件组的src?
我在“ root / html_files / *。html”目录中有一些html文件。我想迭代这些html文件,并从“ root / tests /”目录对它们运行一些bazel规则。 因此,我将这些html文件制成一个文件组,并尝试在“ root / tests /”目录中访问它们,但这不起作用。 我想知道是否可能?
我的“ BUILD”文件位于“ root /”目录:
HTMLS_LIST = glob(["html_files/*.html",]) filegroup( name = "html_files",srcs = HTMLS_LIST,visibility = [ "//visibility:public" ],)
我的BUILD文件位于“ root / tests /”目录中:
load("//tests:automation_test.bzl","make_and_run_html_tests") make_and_run_html_tests( name = 'test_all_htmls',srcs = ['test/automation_test.py'],html_files = '//:html_files')
我的bzl文件位于“ root / tests /”目录中:
def make_and_run_html_tests(name,html_files,srcs): tests = [] for html_file in html_files: # I want to iterate on sources of html filegroup here folders = html_file.split("/") filename = folders[-1].split(".")[0] test_rule_name = 'test_' + filename + '_file' native.py_test( name = test_rule_name,srcs = srcs,main = srcs[0],data = [ html_file,],args = [html_file],) testname = ":" + test_rule_name tests.append(testname) native.test_suite( name = name,tests = tests,)
还有我的python unittest文件在“ root / tests /”目录中:
import sys import codecs import unittest class TestHtmlDocumetns(unittest.TestCase): def setUp(self): self.html_file_path = sys.argv[1] def test_html_file(self): fid = codecs.open(self.html_file_path,'r') print(fid.read()) self.assertTrue(fid) if __name__ == '__main__': unittest.main(argv=[sys.argv[1]])
解决方法
您不能从这样的宏中访问对另一个文件组/规则中文件的引用。您需要创建一个规则并通过ctx.files
attr
但是,如果要删除文件组,并将其直接传递给宏,则可以遍历它们:
HTMLS_LIST = glob(["html_files/*.html"])
make_and_run_html_tests(
name = 'test_all_htmls',srcs = ['test/automation_test.py'],html_files = HTMLS_LIST
)
将宏解析为数组,然后再扩展宏
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。