OLD | NEW |
1 # Copyright 2009 Google Inc. All Rights Reserved. | 1 # Copyright 2009 Google Inc. All Rights Reserved. |
2 # | 2 # |
3 # Licensed under the Apache License, Version 2.0 (the "License"); | 3 # Licensed under the Apache License, Version 2.0 (the "License"); |
4 # you may not use this file except in compliance with the License. | 4 # you may not use this file except in compliance with the License. |
5 # You may obtain a copy of the License at | 5 # You may obtain a copy of the License at |
6 # | 6 # |
7 # http://www.apache.org/licenses/LICENSE-2.0 | 7 # http://www.apache.org/licenses/LICENSE-2.0 |
8 # | 8 # |
9 # Unless required by applicable law or agreed to in writing, software | 9 # Unless required by applicable law or agreed to in writing, software |
10 # distributed under the License is distributed on an "AS IS" BASIS, | 10 # distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 if len(in_line): | 329 if len(in_line): |
330 filter_fn(in_line) | 330 filter_fn(in_line) |
331 rv = kid.wait() | 331 rv = kid.wait() |
332 if rv: | 332 if rv: |
333 raise Error('failed to run command: %s' % ' '.join(args)) | 333 raise Error('failed to run command: %s' % ' '.join(args)) |
334 return 0 | 334 return 0 |
335 | 335 |
336 | 336 |
337 def FindGclientRoot(from_dir, filename='.gclient'): | 337 def FindGclientRoot(from_dir, filename='.gclient'): |
338 """Tries to find the gclient root.""" | 338 """Tries to find the gclient root.""" |
339 path = os.path.realpath(from_dir) | 339 real_from_dir = os.path.realpath(from_dir) |
| 340 path = real_from_dir |
340 while not os.path.exists(os.path.join(path, filename)): | 341 while not os.path.exists(os.path.join(path, filename)): |
341 split_path = os.path.split(path) | 342 split_path = os.path.split(path) |
342 if not split_path[1]: | 343 if not split_path[1]: |
343 return None | 344 return None |
344 path = split_path[0] | 345 path = split_path[0] |
| 346 |
| 347 # If we did not find the file in the current directory, make sure we are in a |
| 348 # sub directory that is controlled by this configuration. |
| 349 if path != real_from_dir: |
| 350 entries_filename = os.path.join(path, filename + '_entries') |
| 351 if not os.path.exists(entries_filename): |
| 352 # If .gclient_entries does not exist, a previous call to gclient sync |
| 353 # might have failed. In that case, we cannot verify that the .gclient |
| 354 # is the one we want to use. In order to not to cause too much trouble, |
| 355 # just issue a warning and return the path anyway. |
| 356 print >>sys.stderr, ("%s file in parent directory %s might not be the " |
| 357 "file you want to use" % (filename, path)) |
| 358 return path |
| 359 scope = {} |
| 360 try: |
| 361 exec(FileRead(entries_filename), scope) |
| 362 except SyntaxError, e: |
| 363 SyntaxErrorToError(filename, e) |
| 364 all_directories = scope['entries'].keys() |
| 365 path_to_check = real_from_dir[len(path)+1:] |
| 366 while path_to_check: |
| 367 if path_to_check in all_directories: |
| 368 return path |
| 369 path_to_check = os.path.dirname(path_to_check) |
| 370 return None |
| 371 |
345 logging.info('Found gclient root at ' + path) | 372 logging.info('Found gclient root at ' + path) |
346 return path | 373 return path |
347 | 374 |
348 | 375 |
349 def PathDifference(root, subpath): | 376 def PathDifference(root, subpath): |
350 """Returns the difference subpath minus root.""" | 377 """Returns the difference subpath minus root.""" |
351 root = os.path.realpath(root) | 378 root = os.path.realpath(root) |
352 subpath = os.path.realpath(subpath) | 379 subpath = os.path.realpath(subpath) |
353 if not subpath.startswith(root): | 380 if not subpath.startswith(root): |
354 return None | 381 return None |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 if exception: | 552 if exception: |
526 self.parent.exceptions.append(exception) | 553 self.parent.exceptions.append(exception) |
527 if self.parent.progress: | 554 if self.parent.progress: |
528 self.parent.progress.update(1) | 555 self.parent.progress.update(1) |
529 assert not self.item.name in self.parent.ran | 556 assert not self.item.name in self.parent.ran |
530 if not self.item.name in self.parent.ran: | 557 if not self.item.name in self.parent.ran: |
531 self.parent.ran.append(self.item.name) | 558 self.parent.ran.append(self.item.name) |
532 finally: | 559 finally: |
533 self.parent.ready_cond.notifyAll() | 560 self.parent.ready_cond.notifyAll() |
534 self.parent.ready_cond.release() | 561 self.parent.ready_cond.release() |
OLD | NEW |