Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(394)

Side by Side Diff: scripts/slave/recipe_modules/path/api.py

Issue 1101673005: Extract functions from path recipe module so that step can depend on it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import functools 5 import functools
6 import os 6 import os
7 import sys 7 import sys
8 import tempfile 8 import tempfile
9 9
10 from slave import recipe_api 10 from slave import recipe_api
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 @recipe_api.composite_step 178 @recipe_api.composite_step
179 def mock_add_paths(self, path): 179 def mock_add_paths(self, path):
180 """For testing purposes, assert that |path| exists.""" 180 """For testing purposes, assert that |path| exists."""
181 if self._test_data.enabled: 181 if self._test_data.enabled:
182 self._path_mod.mock_add_paths(path) 182 self._path_mod.mock_add_paths(path)
183 183
184 @recipe_api.composite_step 184 @recipe_api.composite_step
185 def assert_absolute(self, path): 185 def assert_absolute(self, path):
186 assert self.abspath(path) == str(path), '%s is not absolute' % path 186 assert self.abspath(path) == str(path), '%s is not absolute' % path
187 187
188 def listdir(self, name, path, step_test_data=None):
189 """Wrapper for os.listdir."""
190 return self.m.python.inline('listdir %s' % name,
191 """
192 import json, os, sys
193 if os.path.exists(sys.argv[1]) and os.path.isdir(sys.argv[1]):
194 with open(sys.argv[2], 'w') as f:
195 json.dump(os.listdir(sys.argv[1]), f)
196 """,
197 args=[path, self.m.json.output()],
198 step_test_data=(step_test_data or
199 self.test_api.listdir(['file 1', 'file 2'])),
200 ).json.output
201
202 def makedirs(self, name, path, mode=0777):
203 """
204 Like os.makedirs, except that if the directory exists, then there is no
205 error.
206 """
207 self.assert_absolute(path)
208 self.m.python.inline(
209 'makedirs ' + name,
210 """
211 import sys, os
212 path = sys.argv[1]
213 mode = int(sys.argv[2])
214 if not os.path.isdir(path):
215 if os.path.exists(path):
216 print "%s exists but is not a dir" % path
217 sys.exit(1)
218 os.makedirs(path, mode)
219 """,
220 args=[path, str(mode)],
221 )
222 self.mock_add_paths(path)
223
224 def rmtree(self, name, path):
225 """Wrapper for chromium_utils.RemoveDirectory."""
226 self.assert_absolute(path)
227 self.m.python.inline(
228 'rmtree ' + name,
229 """
230 import os, sys
231 from common import chromium_utils
232
233 if os.path.exists(sys.argv[1]):
234 chromium_utils.RemoveDirectory(sys.argv[1])
235 """,
236 args=[path],
237 )
238
239 def rmcontents(self, name, path):
240 """
241 Similar to rmtree, but removes only contents not the directory.
242
243 This is useful e.g. when removing contents of current working directory.
244 Deleting current working directory makes all further getcwd calls fail
245 until chdir is called. chdir would be tricky in recipes, so we provide
246 a call that doesn't delete the directory itself.
247 """
248 self.assert_absolute(path)
249 self.m.python.inline(
250 'rmcontents ' + name,
251 """
252 import os, sys
253 from common import chromium_utils
254
255 for p in [os.path.join(sys.argv[1], x) for x in os.listdir(sys.argv[1])]:
256 if os.path.isdir(p):
257 chromium_utils.RemoveDirectory(p)
258 else:
259 os.unlink(p)
260 """,
261 args=[path],
262 )
263
264 def rmwildcard(self, pattern, path, **kwargs):
265 """
266 Removes all files in the subtree of path matching the glob pattern.
267 """
268 self.assert_absolute(path)
269 self.m.python.inline(
270 'rmwildcard %s in %s' % (pattern, path),
271 """
272 import sys
273 from common import chromium_utils
274
275 chromium_utils.RemoveFilesWildcards(sys.argv[1], root=sys.argv[2])
276 """,
277 args=[pattern,path],
278 **kwargs)
279
280 @recipe_api.non_step 188 @recipe_api.non_step
281 def mkdtemp(self, prefix): 189 def mkdtemp(self, prefix):
282 """Makes a new temp directory, returns path to it.""" 190 """Makes a new temp directory, returns path to it."""
283 if not self._test_data.enabled: # pragma: no cover 191 if not self._test_data.enabled: # pragma: no cover
284 # New path as str. 192 # New path as str.
285 new_path = tempfile.mkdtemp(prefix=prefix, dir=str(self['tmp_base'])) 193 new_path = tempfile.mkdtemp(prefix=prefix, dir=str(self['tmp_base']))
286 # Ensure it's under self._temp_dir, convert to Path. 194 # Ensure it's under self._temp_dir, convert to Path.
287 new_path = _split_path(new_path) 195 new_path = _split_path(new_path)
288 assert new_path[:len(self._temp_dir)] == self._temp_dir 196 assert new_path[:len(self._temp_dir)] == self._temp_dir
289 temp_dir = self['tmp_base'].join(*new_path[len(self._temp_dir):]) 197 temp_dir = self['tmp_base'].join(*new_path[len(self._temp_dir):])
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 return getattr(self._path_mod, name) 233 return getattr(self._path_mod, name)
326 if name in self.FILTER_METHODS: 234 if name in self.FILTER_METHODS:
327 return string_filter(getattr(self._path_mod, name)) 235 return string_filter(getattr(self._path_mod, name))
328 raise AttributeError("'%s' object has no attribute '%s'" % 236 raise AttributeError("'%s' object has no attribute '%s'" %
329 (self._path_mod, name)) # pragma: no cover 237 (self._path_mod, name)) # pragma: no cover
330 238
331 @recipe_api.non_step 239 @recipe_api.non_step
332 def __dir__(self): # pragma: no cover 240 def __dir__(self): # pragma: no cover
333 # Used for helping out show_me_the_modules.py 241 # Used for helping out show_me_the_modules.py
334 return self.__dict__.keys() + list(self.OK_ATTRS + self.FILTER_METHODS) 242 return self.__dict__.keys() + list(self.OK_ATTRS + self.FILTER_METHODS)
OLDNEW
« no previous file with comments | « scripts/slave/recipe_modules/path/__init__.py ('k') | scripts/slave/recipe_modules/path/example.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698