Index: tools/telemetry/catapult_base/dependency_manager/local_path_info.py |
diff --git a/tools/telemetry/catapult_base/dependency_manager/local_path_info.py b/tools/telemetry/catapult_base/dependency_manager/local_path_info.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0103e8f7590c313491a3f3d8ef1d276134e91d39 |
--- /dev/null |
+++ b/tools/telemetry/catapult_base/dependency_manager/local_path_info.py |
@@ -0,0 +1,40 @@ |
+# 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 os |
+ |
+ |
+class LocalPathInfo(object): |
+ |
+ def __init__(self, path_priority_groups): |
+ self._path_priority_groups = self._ParseLocalPaths(path_priority_groups) |
+ |
+ def GetLocalPath(self): |
+ for priority_group in self._path_priority_groups: |
+ priority_group = filter(os.path.exists, priority_group) |
+ if not priority_group: |
+ continue |
+ return max(priority_group, key=lambda path: os.stat(path).st_mtime) |
+ return None |
+ |
+ def IsPathInLocalPaths(self, path): |
+ return any( |
+ path in priority_group for priority_group in self._path_priority_groups) |
+ |
+ def Update(self, local_path_info): |
+ if not local_path_info: |
+ return |
+ for priority_group in local_path_info._path_priority_groups: |
+ group_list = [] |
+ for path in priority_group: |
+ if not self.IsPathInLocalPaths(path): |
+ group_list.append(path) |
+ if group_list: |
+ self._path_priority_groups.append(group_list) |
+ |
+ @staticmethod |
+ def _ParseLocalPaths(local_paths): |
+ if not local_paths: |
+ return [] |
+ return [[e] if isinstance(e, basestring) else e for e in local_paths] |