#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Wipes out a directory recursively and then touches a stamp file.

This odd pairing of operations is used to support build scripts which
slurp up entire directories (e.g. build/android/javac.py when handling
generated sources) as inputs.

The general pattern of use is:

  - Add a target which generates |gen_sources| into |out_path| from |inputs|.
  - Include |stamp_file| as an input for that target or any of its rules which
    generate files in |out_path|.
  - Add an action which depends on |inputs| and which outputs |stamp_file|;
    the action should run this script and pass |out_path| and |stamp_file| as
    its arguments.

The net result is that you will force |out_path| to be wiped and all
|gen_sources| to be regenerated any time any file in |inputs| changes.

See //mojo/mojom_bindings_generator.gypi for an example use case.

"""

import errno
import os
import shutil
import sys


def Main(dst_dir, stamp_file):
  try:
    shutil.rmtree(os.path.normpath(dst_dir))
  except OSError as e:
    # Ignore only "not found" errors.
    if e.errno != errno.ENOENT:
      raise e
  with open(stamp_file, 'a'):
    os.utime(stamp_file, None)

if __name__ == '__main__':
  sys.exit(Main(sys.argv[1], sys.argv[2]))
