| Index: mojo/devtools/common/devtoolslib/paths.py | 
| diff --git a/mojo/devtools/common/devtoolslib/paths.py b/mojo/devtools/common/devtoolslib/paths.py | 
| index 1b0bff4720377f99d12cccff02a14a385d13f090..502636a06d7681b0ddc2c59110e80474178da6ad 100644 | 
| --- a/mojo/devtools/common/devtoolslib/paths.py | 
| +++ b/mojo/devtools/common/devtoolslib/paths.py | 
| @@ -13,9 +13,9 @@ import os.path | 
| import sys | 
|  | 
|  | 
| -def find_ancestor_with(relpath): | 
| +def find_ancestor_with(relpath, start_path=None): | 
| """Returns the lowest ancestor of this file that contains |relpath|.""" | 
| -  cur_dir_path = os.path.abspath(os.path.dirname(__file__)) | 
| +  cur_dir_path = start_path or os.path.abspath(os.path.dirname(__file__)) | 
| while True: | 
| if os.path.exists(os.path.join(cur_dir_path, relpath)): | 
| return cur_dir_path | 
| @@ -27,6 +27,16 @@ def find_ancestor_with(relpath): | 
| return None | 
|  | 
|  | 
| +def find_within_ancestors(target_relpath, start_path=None): | 
| +  """Returns the absolute path to |target_relpath| in the lowest ancestor of | 
| +  |start_path| that contains it. | 
| +  """ | 
| +  ancestor = find_ancestor_with(target_relpath, start_path) | 
| +  if not ancestor: | 
| +    return None | 
| +  return os.path.join(ancestor, target_relpath) | 
| + | 
| + | 
| def infer_paths(is_android, is_debug, target_cpu): | 
| """Infers the locations of select build output artifacts in a regular | 
| Chromium-like checkout. This should grow thinner or disappear as we introduce | 
|  |