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