| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/usr/bin/env python3
- """Check that a release tar contains the same files as a prefix root."""
- __copyright__ = """
- Part of the Carbon Language project, under the Apache License v2.0 with LLVM
- Exceptions. See /LICENSE for license information.
- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- """
- import argparse
- import sys
- from pathlib import Path
- import tarfile
- def main() -> None:
- parser = argparse.ArgumentParser(description=__doc__)
- parser.add_argument(
- "tar_file",
- type=Path,
- help="The tar file to test.",
- )
- parser.add_argument(
- "install_marker",
- type=Path,
- help="The path of the install marker in a prefix root to test against.",
- )
- args = parser.parse_args()
- # Locate the prefix root from the install marker.
- if not args.install_marker.exists():
- sys.exit("ERROR: No install marker: " + args.install_marker)
- prefix_root_path = args.install_marker.parent.parent.parent
- # First check that every file and directory in the tar file exists in our
- # prefix root, and build a set of those paths.
- installed_paths = set()
- with tarfile.open(args.tar_file) as tar:
- for tarinfo in tar:
- relative_path = Path(*Path(tarinfo.name).parts[1:])
- installed_paths.add(relative_path)
- if not prefix_root_path.joinpath(relative_path).exists():
- sys.exit(
- "ERROR: File `{0}` is not in prefix root: `{1}`".format(
- tarinfo.name, prefix_root_path
- )
- )
- # If we found an empty tar file, it's always an error.
- if len(installed_paths) == 0:
- sys.exit("ERROR: Tar file `{0}` was empty.".format(args.tar_file))
- # Now check that every file and directory in the prefix root is in that set.
- for prefix_path in prefix_root_path.glob("**/*"):
- relative_path = prefix_path.relative_to(prefix_root_path)
- if relative_path not in installed_paths:
- sys.exit(
- "ERROR: File `{0}` is not in tar file.".format(relative_path)
- )
- if __name__ == "__main__":
- main()
|