blob: 3005681651230eba2692c5b77665979b5121ab8a [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2024 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Generate a manifest for an exported IDK directory.
Really all this does is walk a directory, resolve all symlinks, and output the
contents in the format expected by tarmaker.
NOTE: This assumes that everything in the IDK directory is intended to go in the
archive! When generating the IDK directory, it's important to ensure no stale
files are carried over between builds.
"""
import argparse
import os
import pathlib
def get_mappings(
exported_idk_dir: pathlib.Path, cwd: pathlib.Path
) -> dict[pathlib.Path, pathlib.Path]:
mappings = dict()
for root_str, dirs, files in os.walk(exported_idk_dir):
root = pathlib.Path(root_str)
for dir_name in dirs:
dir = root / dir_name
assert not dir.is_symlink(), (
"Found symlink directory in IDK! This is not allowed: %s" % dir
)
for file_name in files:
file = root / file_name
src = pathlib.Path(os.path.relpath(file.resolve(strict=True), cwd))
dest = file.relative_to(exported_idk_dir)
assert dest not in mappings, (
"The same file was somehow listed twice in a walk: %s" % file
)
mappings[dest] = src
return mappings
def main() -> None:
parser = argparse.ArgumentParser(__doc__)
parser.add_argument(
"--exported-idk-dir",
type=pathlib.Path,
help="Path to the exported IDK directory",
required=True,
)
parser.add_argument(
"--output",
type=pathlib.Path,
help="Path to the output tarmaker manifest file",
required=True,
)
args = parser.parse_args()
mappings = get_mappings(args.exported_idk_dir, pathlib.Path.cwd())
with args.output.open("w") as manifest:
for dest, src in sorted(mappings.items()):
manifest.write("%s=%s\n" % (dest, src))
if __name__ == "__main__":
main()