Как изменить только один файл при переупаковке архива?

Я пытаюсь взять zip-файл, созданный не Bazel, изменить некоторые файлы в нем, оставив большинство из них в покое, а затем в конечном итоге создать новый tarball с исходным содержимым (плюс мои модификации)

У меня проблемы с точным указанием моих правил, и было бы здорово, если бы было предложение, как это сделать.

Я импортирую исходный zip-файл с помощью правила WORKSPACE 'new_http_archive'. Это работает очень хорошо. Я помещаю файл сборки в пакет на один уровень ниже корня. Назовем это "foo_repackage".

В foo_repackage / BUILD.root_archive:

package(default_visibility = ["//visibility:public"])

filegroup(
    name = "all_files",
    srcs = glob(
        ["**"],
        exclude = ["*", "share/doc/api/**"]
    ),
)

Более серьезная проблема заключается в файле foo_repackage / BUILD. Я хотел бы удалить все файлы из группы all_files выше, кроме некоторых из них, которые я изменю. Я не понимаю, как это легко сделать. Кажется, что каждый файл, который я хочу изменить, я должен исключить из приведенного выше глобуса и создать новое правило, определяющее этот файл. Это означает, что мне нужно продолжать изменять глобальное правило исключения all_files.

Если бы я мог создать новую файловую группу, состоящую из всех вышеперечисленных файлов, за исключением некоторых файлов, это было бы идеально.

Я должен упомянуть, что последний шаг - это, конечно, использование pkg_tar для переупаковки результата - это в foo_repackage / BUILD

pkg_tar(
    name = "OutputTarball",
    files = ["@root_archive//:all_files"],
    deps = [":layers_of_modified_files"],
    strip_prefix = "/../root_archive",
)

Есть ли у кого-нибудь лучший способ сделать это?

Спасибо, Шон


person Sean Suchter    schedule 08.08.2017    source источник
comment
Мне это кажется разумным. Что вас здесь больше всего беспокоит? Что список исключений станет очень длинным? Вы можете столкнуться с проблемой, когда пытаетесь сгенерировать файлы с такими же именами, как и те, которые существуют в файловой системе (из zip-архива). Базел это не понравится.   -  person zlalanne    schedule 09.08.2017


Ответы (1)


Не могли бы вы использовать такую ​​переменную, как:

MODIFIABLE_FILES = [
    "some/file",
    "another/file",
    ...
]

filegroup(
    name = "static-files",
    srcs = glob(["**"], exclude = MODIFIABLE_FILES)
)

filegroup(
    name = "modifiable-files",
    srcs = MODIFIABLE_FILES,
)

Тогда список статических файлов и изменяемых файлов будет синхронизироваться, и вы получите ошибку сборки, если вы случайно укажете несуществующий изменяемый файл.

person kristina    schedule 09.08.2017
comment
Это потрясающе. Я не думал о переменном решении - это упрощает обслуживание и, в частности, делает маловероятным, что кто-то сделает ошибку при изменении одного из статических файлов, потому что их не будет во второй файловой группе. - person Sean Suchter; 12.08.2017