| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Meta checkout manager supporting both Subversion and GIT. | 6 """Meta checkout manager supporting both Subversion and GIT. |
| 7 | 7 |
| 8 Files | 8 Files |
| 9 .gclient : Current client configuration, written by 'config' command. | 9 .gclient : Current client configuration, written by 'config' command. |
| 10 Format is a Python script defining 'solutions', a list whose | 10 Format is a Python script defining 'solutions', a list whose |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 for i in root_deps: | 268 for i in root_deps: |
| 269 if i is self.parent: | 269 if i is self.parent: |
| 270 break | 270 break |
| 271 if i.name: | 271 if i.name: |
| 272 self._requirements.add(i.name) | 272 self._requirements.add(i.name) |
| 273 | 273 |
| 274 if isinstance(self.url, self.FromImpl): | 274 if isinstance(self.url, self.FromImpl): |
| 275 self._requirements.add(self.url.module_name) | 275 self._requirements.add(self.url.module_name) |
| 276 | 276 |
| 277 if self.name and self.should_process: | 277 if self.name and self.should_process: |
| 278 def yield_full_tree(root): | 278 for obj in self.root.depth_first_tree(): |
| 279 """Depth-first recursion.""" | |
| 280 yield root | |
| 281 for i in root.dependencies: | |
| 282 for j in yield_full_tree(i): | |
| 283 if j.should_process: | |
| 284 yield j | |
| 285 | |
| 286 for obj in yield_full_tree(self.root): | |
| 287 if obj is self or not obj.name: | 279 if obj is self or not obj.name: |
| 288 continue | 280 continue |
| 289 # Step 1: Find any requirements self may need. | 281 # Step 1: Find any requirements self may need. |
| 290 if self.name.startswith(posixpath.join(obj.name, '')): | 282 if self.name.startswith(posixpath.join(obj.name, '')): |
| 291 self._requirements.add(obj.name) | 283 self._requirements.add(obj.name) |
| 292 # Step 2: Find any requirements self may impose. | 284 # Step 2: Find any requirements self may impose. |
| 293 if obj.name.startswith(posixpath.join(self.name, '')): | 285 if obj.name.startswith(posixpath.join(self.name, '')): |
| 294 try: | 286 try: |
| 295 # Access to a protected member _requirements of a client class | 287 # Access to a protected member _requirements of a client class |
| 296 # pylint: disable=W0212 | 288 # pylint: disable=W0212 |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 gclient_utils.CheckCallAndFilterAndHeader( | 595 gclient_utils.CheckCallAndFilterAndHeader( |
| 604 command, cwd=self.root.root_dir, always=True) | 596 command, cwd=self.root.root_dir, always=True) |
| 605 except (gclient_utils.Error, subprocess2.CalledProcessError), e: | 597 except (gclient_utils.Error, subprocess2.CalledProcessError), e: |
| 606 # Use a discrete exit status code of 2 to indicate that a hook action | 598 # Use a discrete exit status code of 2 to indicate that a hook action |
| 607 # failed. Users of this script may wish to treat hook action failures | 599 # failed. Users of this script may wish to treat hook action failures |
| 608 # differently from VC failures. | 600 # differently from VC failures. |
| 609 print >> sys.stderr, 'Error: %s' % str(e) | 601 print >> sys.stderr, 'Error: %s' % str(e) |
| 610 sys.exit(2) | 602 sys.exit(2) |
| 611 | 603 |
| 612 def subtree(self, include_all): | 604 def subtree(self, include_all): |
| 613 """Breadth first""" | 605 """Breadth first recursion excluding root node.""" |
| 614 result = [] | |
| 615 dependencies = self.dependencies | 606 dependencies = self.dependencies |
| 616 for d in dependencies: | 607 for d in dependencies: |
| 617 if d.should_process or include_all: | 608 if d.should_process or include_all: |
| 618 result.append(d) | 609 yield d |
| 619 for d in dependencies: | 610 for d in dependencies: |
| 620 result.extend(d.subtree(include_all)) | 611 for i in d.subtree(include_all): |
| 621 return result | 612 yield i |
| 613 |
| 614 def depth_first_tree(self): |
| 615 """Depth-first recursion including the root node.""" |
| 616 yield self |
| 617 for i in self.dependencies: |
| 618 for j in i.depth_first_tree(): |
| 619 if j.should_process: |
| 620 yield j |
| 622 | 621 |
| 623 def get_custom_deps(self, name, url): | 622 def get_custom_deps(self, name, url): |
| 624 """Returns a custom deps if applicable.""" | 623 """Returns a custom deps if applicable.""" |
| 625 if self.parent: | 624 if self.parent: |
| 626 url = self.parent.get_custom_deps(name, url) | 625 url = self.parent.get_custom_deps(name, url) |
| 627 # None is a valid return value to disable a dependency. | 626 # None is a valid return value to disable a dependency. |
| 628 return self.custom_deps.get(name, url) | 627 return self.custom_deps.get(name, url) |
| 629 | 628 |
| 630 @property | 629 @property |
| 631 def recursion_limit(self): | 630 def recursion_limit(self): |
| (...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1461 except (gclient_utils.Error, subprocess2.CalledProcessError), e: | 1460 except (gclient_utils.Error, subprocess2.CalledProcessError), e: |
| 1462 print >> sys.stderr, 'Error: %s' % str(e) | 1461 print >> sys.stderr, 'Error: %s' % str(e) |
| 1463 return 1 | 1462 return 1 |
| 1464 | 1463 |
| 1465 | 1464 |
| 1466 if '__main__' == __name__: | 1465 if '__main__' == __name__: |
| 1467 fix_encoding.fix_encoding() | 1466 fix_encoding.fix_encoding() |
| 1468 sys.exit(Main(sys.argv[1:])) | 1467 sys.exit(Main(sys.argv[1:])) |
| 1469 | 1468 |
| 1470 # vim: ts=2:sw=2:tw=80:et: | 1469 # vim: ts=2:sw=2:tw=80:et: |
| OLD | NEW |