Не удалось импортировать третий пакет без базеля с базелом 0.17.1 при использовании правила new_git_repository - PullRequest
0 голосов
/ 15 января 2019

Моя рабочая область

cat WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository", "new_git_repository")

http_archive(
    name = "io_bazel_rules_go",
    urls = ["https://github.com/bazelbuild/rules_go/releases/download/0.16.5/rules_go-0.16.5.tar.gz"],
    sha256 = "7be7dc01f1e0afdba6c8eb2b43d2fa01c743be1b9273ab1eaf6c233df078d705",
)

load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains")
go_rules_dependencies()
go_register_toolchains()

# ... rocksdb and etc

new_git_repository(
    name = "com_github_tecbot_gorocksdb",
    remote = "https://github.com/tecbot/gorocksdb.git",
    commit = "3e476152774442234f9a9f747386a48a1d82a515",
    build_file = "third-party/gorocksdb.BUILD",
)

и мой gorocksdb.BUILD

cat third-party/gorocksdb.BUILD
load("@io_bazel_rules_go//go:def.bzl", "go_library")

go_library(
    name = "go_default_library",
    srcs = [
        "backup.go",
        "cache.go",
        "cf_handle.go",
        # ...
        "write_batch.go",
        "gorocksdb.c",
        "gorocksdb.h",
    ],
    importpath = "github.com/tecbot/gorocksdb",
    cgo = True,
    visibility = ["//visibility:public"],
    cdeps = [
        "@com_github_facebook_rocksdb//:rocksdb",
    ],
)

Я запускаю Базель, используя Контейнеры Базеля .

docker run -e USER=(id -u) -u=(id -u) -v $PWD:/src/workspace -v /tmp/build_output:/tmp/build_output -w /src/workspace l.gcr.io/google/bazel:0.17.1 --output_user_root=/tmp/build_output run --verbose_failures //:helloworld

И я получил такие ошибки, как

ERROR: /src/workspace/BUILD.bazel:3:1: no such package '@com_github_tecbot_gorocksdb//': Traceback (most recent call last):
    File "/tmp/build_output/a08c2e4811c846650b733c6fc815a920/external/bazel_tools/tools/build_defs/repo/git.bzl", line 160
        workspace_and_buildfile(ctx)
    File "/tmp/build_output/a08c2e4811c846650b733c6fc815a920/external/bazel_tools/tools/build_defs/repo/utils.bzl", line 60, in workspace_and_buildfile
        ctx.symlink(ctx.attr.build_file, "BUILD.bazel")
Not a regular file: /src/workspace/external/third-party/gorocksdb.BUILD and referenced by '//:helloworld'

Я вижу документы Базеля и нашел описание build_file attr.

Строка; по желанию

Файл для использования в качестве файла BUILD для этого каталога. Необходимо указать build_file или build_file_content.

Этот атрибут является меткой относительно основного рабочего пространства. Файл не обязательно должен называться BUILD, но может быть. (Что-то вроде BUILD.new-repo-name может помочь отличить его от реальных файлов BUILD хранилища.)

Кажется, что third-party/gorocksdb.BUILD - это правильный относительный путь от WORKSPACE, и он работает в какой-то более низкой версии bazel. Я не знаю, почему bazel пытается найти этот файл в __workspace_dir__/external/, я действительно не объявляю ничего с именем external, это новая функция в bazel и не задокументирована?

Я уверен, что все остальные части моего проекта верны, потому что, когда я копирую все содержимое gorocksdb.BUILD и вставляю его с помощью build_file_content attr, он работает очень хорошо.

1 Ответ

0 голосов
/ 15 января 2019

разрешается удалением, следуя строке

load ("@ bazel_tools // tools / build_defs / repo: git.bzl", "git_repository", "new_git_repository")

Поведение new_git_repository в инструментах bazel в bazel 0.17 отличается от поведения встроенного метода.

...