Index: tools/telemetry/catapult_base/refactor_util/move.py |
diff --git a/tools/telemetry/catapult_base/refactor_util/move.py b/tools/telemetry/catapult_base/refactor_util/move.py |
deleted file mode 100644 |
index 108413b2864511a10af681767bc34c972660a600..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/catapult_base/refactor_util/move.py |
+++ /dev/null |
@@ -1,115 +0,0 @@ |
-# Copyright 2015 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. |
- |
-import functools |
-import os |
-import sys |
- |
-from catapult_base import refactor |
- |
- |
-def Run(sources, target, files_to_update): |
- """Move modules and update imports. |
- |
- Args: |
- sources: List of source module or package paths. |
- target: Destination module or package path. |
- files_to_update: Modules whose imports we should check for changes. |
- """ |
- # TODO(dtu): Support moving classes and functions. |
- moves = tuple(_Move(source, target) for source in sources) |
- |
- # Update imports and references. |
- refactor.Transform(functools.partial(_Update, moves), files_to_update) |
- |
- # Move files. |
- for move in moves: |
- os.rename(move.source_path, move.target_path) |
- |
- |
-def _Update(moves, module): |
- for import_statement in module.FindAll(refactor.Import): |
- for move in moves: |
- try: |
- if move.UpdateImportAndReferences(module, import_statement): |
- break |
- except NotImplementedError as e: |
- print >> sys.stderr, 'Error updating %s: %s' % (module.file_path, e) |
- |
- |
-class _Move(object): |
- def __init__(self, source, target): |
- self._source_path = os.path.realpath(source) |
- self._target_path = os.path.realpath(target) |
- |
- if os.path.isdir(self._target_path): |
- self._target_path = os.path.join( |
- self._target_path, os.path.basename(self._source_path)) |
- |
- @property |
- def source_path(self): |
- return self._source_path |
- |
- @property |
- def target_path(self): |
- return self._target_path |
- |
- @property |
- def source_module_path(self): |
- return _ModulePath(self._source_path) |
- |
- @property |
- def target_module_path(self): |
- return _ModulePath(self._target_path) |
- |
- def UpdateImportAndReferences(self, module, import_statement): |
- """Update an import statement in a module and all its references.. |
- |
- Args: |
- module: The refactor.Module to update. |
- import_statement: The refactor.Import to update. |
- |
- Returns: |
- True if the import statement was updated, or False if the import statement |
- needed no updating. |
- """ |
- statement_path_parts = import_statement.path.split('.') |
- source_path_parts = self.source_module_path.split('.') |
- if source_path_parts != statement_path_parts[:len(source_path_parts)]: |
- return False |
- |
- # Update import statement. |
- old_name_parts = import_statement.name.split('.') |
- new_name_parts = ([self.target_module_path] + |
- statement_path_parts[len(source_path_parts):]) |
- import_statement.path = '.'.join(new_name_parts) |
- new_name = import_statement.name |
- |
- # Update references. |
- for reference in module.FindAll(refactor.Reference): |
- reference_parts = reference.value.split('.') |
- if old_name_parts != reference_parts[:len(old_name_parts)]: |
- continue |
- |
- new_reference_parts = [new_name] + reference_parts[len(old_name_parts):] |
- reference.value = '.'.join(new_reference_parts) |
- |
- return True |
- |
- |
-def _BaseDir(module_path): |
- if not os.path.isdir(module_path): |
- module_path = os.path.dirname(module_path) |
- |
- while '__init__.py' in os.listdir(module_path): |
- module_path = os.path.dirname(module_path) |
- |
- return module_path |
- |
- |
-def _ModulePath(module_path): |
- if os.path.split(module_path)[1] == '__init__.py': |
- module_path = os.path.dirname(module_path) |
- rel_path = os.path.relpath(module_path, _BaseDir(module_path)) |
- return os.path.splitext(rel_path)[0].replace(os.sep, '.') |