OLD | NEW |
1 # Copyright (c) 2012 Google Inc. All rights reserved. | 1 # Copyright (c) 2012 Google Inc. All rights reserved. |
2 # | 2 # |
3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
5 # met: | 5 # met: |
6 # | 6 # |
7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 return os.path.join(get_scripts_dir(), 'webkitpy', 'thirdparty') | 73 return os.path.join(get_scripts_dir(), 'webkitpy', 'thirdparty') |
74 | 74 |
75 | 75 |
76 class WebKitFinder(object): | 76 class WebKitFinder(object): |
77 | 77 |
78 def __init__(self, filesystem): | 78 def __init__(self, filesystem): |
79 self._filesystem = filesystem | 79 self._filesystem = filesystem |
80 self._dirsep = filesystem.sep | 80 self._dirsep = filesystem.sep |
81 self._sys_path = sys.path | 81 self._sys_path = sys.path |
82 self._env_path = os.environ['PATH'].split(os.pathsep) | 82 self._env_path = os.environ['PATH'].split(os.pathsep) |
83 self._chromium_base = None | |
84 self._depot_tools = None | |
85 | 83 |
86 @memoized | 84 @memoized |
87 def _webkit_base(self): | 85 def _webkit_base(self): |
88 """Returns the absolute path to the top of the WebKit tree. | 86 """Returns the absolute path to the top of the WebKit tree. |
89 | 87 |
90 Raises an AssertionError if the top dir can't be determined. | 88 Raises an AssertionError if the top dir can't be determined. |
91 """ | 89 """ |
92 # TODO(qyearsley): This code somewhat duplicates the code in | 90 # TODO(qyearsley): This code somewhat duplicates the code in |
93 # git.find_checkout_root(). | 91 # git.find_checkout_root(). |
94 module_path = self._filesystem.abspath(self._filesystem.path_to_module(s
elf.__module__)) | 92 module_path = self._filesystem.abspath(self._filesystem.path_to_module(s
elf.__module__)) |
95 tools_index = module_path.rfind('Tools') | 93 tools_index = module_path.rfind('Tools') |
96 assert tools_index != -1, 'could not find location of this checkout from
%s' % module_path | 94 assert tools_index != -1, 'could not find location of this checkout from
%s' % module_path |
97 return self._filesystem.normpath(module_path[0:tools_index - 1]) | 95 return self._filesystem.normpath(module_path[0:tools_index - 1]) |
98 | 96 |
| 97 @memoized |
99 def chromium_base(self): | 98 def chromium_base(self): |
100 if not self._chromium_base: | 99 return self._filesystem.dirname(self._filesystem.dirname(self._webkit_ba
se())) |
101 self._chromium_base = self._filesystem.dirname(self._filesystem.dirn
ame(self._webkit_base())) | |
102 return self._chromium_base | |
103 | 100 |
104 # Do not expose this function in order to make the code robust against | 101 # Do not expose this function in order to make the code robust against |
105 # directory structure changes. | 102 # directory structure changes. |
106 def _path_from_webkit_base(self, *comps): | 103 def _path_from_webkit_base(self, *comps): |
107 return self._filesystem.join(self._webkit_base(), *comps) | 104 return self._filesystem.join(self._webkit_base(), *comps) |
108 | 105 |
109 def path_from_chromium_base(self, *comps): | 106 def path_from_chromium_base(self, *comps): |
110 return self._filesystem.join(self.chromium_base(), *comps) | 107 return self._filesystem.join(self.chromium_base(), *comps) |
111 | 108 |
112 def path_from_blink_source(self, *comps): | 109 def path_from_blink_source(self, *comps): |
(...skipping 26 matching lines...) Expand all Loading... |
139 Returns: | 136 Returns: |
140 The normalized layout test name, which is just the relative path fro
m | 137 The normalized layout test name, which is just the relative path fro
m |
141 the LayoutTests directory, using forward slash as the path separator
. | 138 the LayoutTests directory, using forward slash as the path separator
. |
142 Returns None if the given file is not in the LayoutTests directory. | 139 Returns None if the given file is not in the LayoutTests directory. |
143 """ | 140 """ |
144 layout_tests_rel_path = self._filesystem.relpath(self.layout_tests_dir()
, self.chromium_base()) | 141 layout_tests_rel_path = self._filesystem.relpath(self.layout_tests_dir()
, self.chromium_base()) |
145 if not file_path.startswith(layout_tests_rel_path): | 142 if not file_path.startswith(layout_tests_rel_path): |
146 return None | 143 return None |
147 return file_path[len(layout_tests_rel_path) + 1:] | 144 return file_path[len(layout_tests_rel_path) + 1:] |
148 | 145 |
| 146 @memoized |
149 def depot_tools_base(self): | 147 def depot_tools_base(self): |
150 if not self._depot_tools: | 148 # This basically duplicates src/build/find_depot_tools.py without the si
de effects |
151 # This basically duplicates src/build/find_depot_tools.py without th
e side effects | 149 # (adding the directory to sys.path and importing breakpad). |
152 # (adding the directory to sys.path and importing breakpad). | 150 return (self._check_paths_for_depot_tools(self._sys_path) or |
153 self._depot_tools = (self._check_paths_for_depot_tools(self._sys_pat
h) or | 151 self._check_paths_for_depot_tools(self._env_path) or |
154 self._check_paths_for_depot_tools(self._env_pat
h) or | 152 self._check_upward_for_depot_tools()) |
155 self._check_upward_for_depot_tools()) | |
156 return self._depot_tools | |
157 | 153 |
158 def _check_paths_for_depot_tools(self, paths): | 154 def _check_paths_for_depot_tools(self, paths): |
159 for path in paths: | 155 for path in paths: |
160 if path.rstrip(self._dirsep).endswith('depot_tools'): | 156 if path.rstrip(self._dirsep).endswith('depot_tools'): |
161 return path | 157 return path |
162 return None | 158 return None |
163 | 159 |
164 def _check_upward_for_depot_tools(self): | 160 def _check_upward_for_depot_tools(self): |
165 fs = self._filesystem | 161 fs = self._filesystem |
166 prev_dir = '' | 162 prev_dir = '' |
167 current_dir = fs.dirname(self._webkit_base()) | 163 current_dir = fs.dirname(self._webkit_base()) |
168 while current_dir != prev_dir: | 164 while current_dir != prev_dir: |
169 if fs.exists(fs.join(current_dir, 'depot_tools', 'pylint.py')): | 165 if fs.exists(fs.join(current_dir, 'depot_tools', 'pylint.py')): |
170 return fs.join(current_dir, 'depot_tools') | 166 return fs.join(current_dir, 'depot_tools') |
171 prev_dir = current_dir | 167 prev_dir = current_dir |
172 current_dir = fs.dirname(current_dir) | 168 current_dir = fs.dirname(current_dir) |
173 | 169 |
174 def path_from_depot_tools_base(self, *comps): | 170 def path_from_depot_tools_base(self, *comps): |
175 return self._filesystem.join(self.depot_tools_base(), *comps) | 171 return self._filesystem.join(self.depot_tools_base(), *comps) |
OLD | NEW |