| #!/usr/bin/env python3 |
| |
| import os |
| import sys |
| |
| def permit_osx_workaround(m1, m2): |
| import platform |
| if platform.system().lower() != 'darwin': |
| return False |
| if m2 % 10000 != 0: |
| return False |
| if m1//10000 != m2//10000: |
| return False |
| return True |
| |
| if len(sys.argv) == 2: |
| assert os.path.exists(sys.argv[1]) |
| elif len(sys.argv) == 3: |
| f1 = sys.argv[1] |
| f2 = sys.argv[2] |
| m1 = os.stat(f1).st_mtime_ns |
| m2 = os.stat(f2).st_mtime_ns |
| # Compare only os.stat() |
| if m1 != m2: |
| # Under macOS the lower four digits sometimes get assigned |
| # zero, even though shutil.copy2 should preserve metadata. |
| # Just have to accept it, I guess. |
| if not permit_osx_workaround(m1, m2): |
| raise RuntimeError(f'mtime of {f1!r} ({m1!r}) != mtime of {f2!r} ({m2!r})') |
| import filecmp |
| if not filecmp.cmp(f1, f2): |
| raise RuntimeError(f'{f1!r} != {f2!r}') |
| else: |
| raise AssertionError |