#!/usr/bin/env python3
# Copyright 2013 The Flutter 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/56376#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()
