#!/usr/bin/env fuchsia-vendored-python
# Copyright 2020 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.
"""Emulation of `rm -f out && cp -af` in out. This is necessary on Mac in order
to preserve nanoseconds of mtime. See https://fxbug.dev/42134108#c5."""

import os
import shutil
import sys


def main():
    if len(sys.argv) != 3:
        print("usage: copy.py source dest", file=sys.stderr)
        return 1
    source = sys.argv[1]
    dest = sys.argv[2]

    if os.path.isdir(source):
        print(
            f'{source} is a directory, tool "copy" does not support directory copies'
        )
        return 1

    if os.path.exists(dest):
        if os.path.isdir(dest):

            def _on_error(fn, path, dummy_excinfo):
                # The operation failed, possibly because the file is set to
                # read-only. If that's why, make it writable and try the op
                # again.
                if not os.access(path, os.W_OK):
                    os.chmod(path, stat.S_IWRITE)
                fn(path)

            shutil.rmtree(dest, onerror=_on_error)
        else:
            if not os.access(dest, os.W_OK):
                # Attempt to make the file writable before deleting it.
                os.chmod(dest, stat.S_IWRITE)
            os.unlink(dest)

    shutil.copy2(source, dest)


if __name__ == "__main__":
    main()
