blob: bcc64c16615e297429b2c57151349b45c96e3d94 [file] [log] [blame]
import sys
from difflib import unified_diff
from os import environ
from pathlib import Path
_LINE = "=" * 80
def main():
src = "{{src}}"
dst = "{{dst}}"
src = Path(src)
if not src.exists():
raise AssertionError(f"The {src} file does not exist")
if "TEST_SRCDIR" in environ:
# Running as a bazel test
dst = Path(dst)
a = dst.read_text() if dst.exists() else "\n"
b = src.read_text()
diff = unified_diff(
a.splitlines(),
b.splitlines(),
str(dst),
str(src),
lineterm="",
)
diff = "\n".join(list(diff))
if not diff:
print(
f"""\
{_LINE}
The in source file copy is up-to-date.
{_LINE}
"""
)
return 0
print(diff)
print(
f"""\
{_LINE}
The in source file copy is out of date, please run:
bazel run {{update_target}}
{_LINE}
"""
)
return 1
if "BUILD_WORKSPACE_DIRECTORY" not in environ:
raise RuntimeError(
"This must be either run as `bazel test` via a `native_test` or similar or via `bazel run`"
)
print(f"cp <bazel-sandbox>/{src} <workspace>/{dst}")
build_workspace = Path(environ["BUILD_WORKSPACE_DIRECTORY"])
dst_real_path = build_workspace / dst
dst_real_path.parent.mkdir(parents=True, exist_ok=True)
dst_real_path.write_text(src.read_text())
print(f"OK: updated {dst_real_path}")
return 0
if __name__ == "__main__":
sys.exit(main())