diff --git a/gclient.py b/gclient.py index 5ca703635..2b23b1251 100644 --- a/gclient.py +++ b/gclient.py @@ -621,13 +621,24 @@ solutions = [ 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 = 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 % { diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py index 2ebbc335f..093fded50 100755 --- a/tests/gclient_smoketest.py +++ b/tests/gclient_smoketest.py @@ -145,6 +145,14 @@ class GClientSmoke(GClientSmokeBase): self.check(res, self.gclient(['sync'])) self.check(res, self.gclient(['update'])) + def testWrongConfig(self): + # tested in testConfig. + self.gclient(['config', self.svn_base + 'trunk/src/']) + other_src = join(self.root_dir, 'src-other') + os.mkdir(other_src) + res = ('', 'Error: client not configured; see \'gclient config\'\n', 1) + self.check(res, self.gclient(['status'], other_src)) + def testConfig(self): p = join(self.root_dir, '.gclient') def test(cmd, expected):