Базельское правило: как получить абсолютный путь к каталогу рабочей области?

Я хочу создать правило bazel gen для создания файла заголовка, содержащего текущий хэш фиксации git:

# Generate "version_info.h"
cc_library(
    name = "version_info",
    srcs = [],
    hdrs = ["version_info.h"],
    visibility = ["//visibility:private"],
)

VERSION_INFO_H_BASH = """
#ifndef VERSION_INFO_H_
#define VERSION_INFO_H_

#define COMMIT_HASH "%s"

#endif  // VERSION_INFO_H_
"""

VERSION_INFO_H_PS = """
#ifndef VERSION_INFO_H_
#define VERSION_INFO_H_

#define COMMIT_HASH "{0}"

#endif  // VERSION_INFO_H_
"""

genrule(
    name = "generate_version_info",
    outs = ["version_info.h"],
    cmd_ps = ("cd what_comes_here; @'%s'@ -f \"$$(git.exe rev-parse HEAD)\" | Out-File $(OUTS)" % VERSION_INFO_H_PS),
    cmd = ("cd what_comes_here"; printf '%s' \"$$(git rev-parse HEAD)\ > $(OUTS)" % VERSION_INFO_H_BASH),
    visibility = ["//visibility:private"],
)

До сих пор я не тестировал версию для Linux (cmd), а только для Windows (cmd_ps), и она работает, но проблема в том, что при выполнении powershell она не находится в каталоге рабочей области (это мой корень git). Что мне нужно заменить what_comes_here на первый компакт-диск в корне моей рабочей области?


person matthias_buehlmann    schedule 22.04.2021    source источник
comment
Bazel запускает сборки на сервере (не обязательно на вашем) в песочнице, которая — по крайней мере в идеале — изолирована от хоста. Кажется, что нет никакой гарантии, что существует репозиторий Git, из которого можно выполнить повторный анализ HEAD. Возможно, у вас есть какие-то дополнительные элементы сборки, которые помогают гарантировать это?   -  person torek    schedule 23.04.2021


Ответы (1)


Воспользуйтесь функцией Bazel состояния рабочей области. Пример можно найти здесь.

person Vertexwahn    schedule 22.04.2021
comment
это кажется слишком сложным, я не хочу писать для этого внешнюю программу - мне просто нужен абсолютный путь к рабочему пространству, чтобы я мог войти в него перед вызовом git - person matthias_buehlmann; 22.04.2021