11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#!/usr/bin/env python
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Copyright 2014 The Chromium Authors. All rights reserved.
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Use of this source code is governed by a BSD-style license that can be
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# found in the LICENSE file.
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport os
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport sys
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccidef RemoveAllStalePycFiles(base_dir):
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  """Scan directories for old .pyc files without a .py file and delete them."""
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for dirname, _, filenames in os.walk(base_dir):
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if '.svn' in dirname or '.git' in dirname:
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      continue
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for filename in filenames:
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      root, ext = os.path.splitext(filename)
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if ext != '.pyc':
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        continue
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      pyc_path = os.path.join(dirname, filename)
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      py_path = os.path.join(dirname, root + '.py')
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      try:
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if not os.path.exists(py_path):
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          os.remove(pyc_path)
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      except OSError:
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        # Wrap OS calls in try/except in case another process touched this file.
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        pass
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    try:
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      os.removedirs(dirname)
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    except OSError:
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      # Wrap OS calls in try/except in case another process touched this dir.
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      pass
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciif __name__ == '__main__':
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for path in sys.argv[1:]:
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    RemoveAllStalePycFiles(path)
40