Do not blindly assume that a .gclient file in a parent directory belongs to the current directory.
BUG=54238
TEST=GClientSmoke.testWrongConfig
Review URL: http://codereview.chromium.org/3300007
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@58371 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient.py b/gclient.py
index 5ca7036..3cabc14 100644
--- a/gclient.py
+++ b/gclient.py
@@ -621,13 +621,24 @@
def LoadCurrentConfig(options):
"""Searches for and loads a .gclient file relative to the current working
dir. Returns a GClient object."""
- path = gclient_utils.FindGclientRoot(os.getcwd(), options.config_filename)
+ cwd = os.getcwd()
+ path = gclient_utils.FindGclientRoot(cwd, options.config_filename)
if not path:
return None
client = GClient(path, options)
client.SetConfig(gclient_utils.FileRead(
os.path.join(path, options.config_filename)))
- return client
+ if path == cwd:
+ return client
+ # Validate the current directory we are in belongs to the .gclient file we
+ # found.
+ cwd = cwd[len(path)+1:]
+ all_solutions = [d.name for d in client.tree(False)]
+ while len(cwd):
+ if cwd in all_solutions:
+ return client
+ cwd = os.path.dirname(cwd)
+ return None
def SetDefaultConfig(self, solution_name, solution_url, safesync_url):
self.SetConfig(self.DEFAULT_CLIENT_FILE_TEXT % {