Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 # Files | 7 # Files |
| 8 # .gclient : Current client configuration, written by 'config' command. | 8 # .gclient : Current client configuration, written by 'config' command. |
| 9 # Format is a Python script defining 'solutions', a list whose | 9 # Format is a Python script defining 'solutions', a list whose |
| 10 # entries each are maps binding the strings "name" and "url" | 10 # entries each are maps binding the strings "name" and "url" |
| (...skipping 1202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1213 | 1213 |
| 1214 def RunOnDeps(self, command, args, ignore_requirements=False, progress=True): | 1214 def RunOnDeps(self, command, args, ignore_requirements=False, progress=True): |
| 1215 """Runs a command on each dependency in a client and its dependencies. | 1215 """Runs a command on each dependency in a client and its dependencies. |
| 1216 | 1216 |
| 1217 Args: | 1217 Args: |
| 1218 command: The command to use (e.g., 'status' or 'diff') | 1218 command: The command to use (e.g., 'status' or 'diff') |
| 1219 args: list of str - extra arguments to add to the command line. | 1219 args: list of str - extra arguments to add to the command line. |
| 1220 """ | 1220 """ |
| 1221 if not self.dependencies: | 1221 if not self.dependencies: |
| 1222 raise gclient_utils.Error('No solution specified') | 1222 raise gclient_utils.Error('No solution specified') |
| 1223 | |
| 1224 for dep in self.dependencies: | |
| 1225 if dep.managed: | |
| 1226 scm = gclient_scm.CreateSCM(dep.url, self.root_dir, dep.name) | |
| 1227 if not scm.DoesRemoteURLMatch(): | |
| 1228 actual_url = scm.GetActualRemoteURL() | |
| 1229 raise gclient_utils.Error(''' | |
| 1230 Your .gclient file seems to be broken. The requested URL is different from what | |
| 1231 is actually checked out in %s: | |
| 1232 | |
| 1233 Expected: %s | |
| 1234 Actual: %s | |
|
iannucci
2014/03/13 18:27:27
I would also list the SCM which we would have sele
borenet
2014/03/13 18:57:25
Done.
| |
| 1235 | |
| 1236 If you're managing your own git checkout in %s but the URL in .gclient is for | |
| 1237 an svn repository, you probably want to set 'managed': False in .gclient. | |
|
iannucci
2014/03/13 18:27:27
do we also want to advise that they correct the ur
borenet
2014/03/13 18:57:25
Sure, but the URL doesn't matter in unmanaged mode
| |
| 1238 Otherwise, you should ensure that the URL listed in .gclient is correct and | |
| 1239 either change it or fix the checkout. | |
| 1240 ''' % (os.path.join(self.root_dir, dep.name), dep.url, actual_url, dep.name)) | |
| 1241 | |
| 1223 revision_overrides = {} | 1242 revision_overrides = {} |
| 1224 # It's unnecessary to check for revision overrides for 'recurse'. | 1243 # It's unnecessary to check for revision overrides for 'recurse'. |
| 1225 # Save a few seconds by not calling _EnforceRevisions() in that case. | 1244 # Save a few seconds by not calling _EnforceRevisions() in that case. |
| 1226 if command not in ('diff', 'recurse', 'runhooks', 'status'): | 1245 if command not in ('diff', 'recurse', 'runhooks', 'status'): |
| 1227 revision_overrides = self._EnforceRevisions() | 1246 revision_overrides = self._EnforceRevisions() |
| 1228 pm = None | 1247 pm = None |
| 1229 # Disable progress for non-tty stdout. | 1248 # Disable progress for non-tty stdout. |
| 1230 if (sys.stdout.isatty() and not self._options.verbose and progress): | 1249 if (sys.stdout.isatty() and not self._options.verbose and progress): |
| 1231 if command in ('update', 'revert'): | 1250 if command in ('update', 'revert'): |
| 1232 pm = Progress('Syncing projects', 1) | 1251 pm = Progress('Syncing projects', 1) |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1687 raise gclient_utils.Error('client not configured; see \'gclient config\'') | 1706 raise gclient_utils.Error('client not configured; see \'gclient config\'') |
| 1688 | 1707 |
| 1689 if options.revisions and options.head: | 1708 if options.revisions and options.head: |
| 1690 # TODO(maruel): Make it a parser.error if it doesn't break any builder. | 1709 # TODO(maruel): Make it a parser.error if it doesn't break any builder. |
| 1691 print('Warning: you cannot use both --head and --revision') | 1710 print('Warning: you cannot use both --head and --revision') |
| 1692 | 1711 |
| 1693 if options.verbose: | 1712 if options.verbose: |
| 1694 # Print out the .gclient file. This is longer than if we just printed the | 1713 # Print out the .gclient file. This is longer than if we just printed the |
| 1695 # client dict, but more legible, and it might contain helpful comments. | 1714 # client dict, but more legible, and it might contain helpful comments. |
| 1696 print(client.config_content) | 1715 print(client.config_content) |
| 1716 | |
| 1697 ret = client.RunOnDeps('update', args) | 1717 ret = client.RunOnDeps('update', args) |
| 1698 if options.output_json: | 1718 if options.output_json: |
| 1699 slns = {} | 1719 slns = {} |
| 1700 for d in client.subtree(True): | 1720 for d in client.subtree(True): |
| 1701 normed = d.name.replace('\\', '/').rstrip('/') + '/' | 1721 normed = d.name.replace('\\', '/').rstrip('/') + '/' |
| 1702 slns[normed] = { | 1722 slns[normed] = { |
| 1703 'revision': d.got_revision, | 1723 'revision': d.got_revision, |
| 1704 'scm': d.used_scm.name if d.used_scm else None, | 1724 'scm': d.used_scm.name if d.used_scm else None, |
| 1705 } | 1725 } |
| 1706 with open(options.output_json, 'wb') as f: | 1726 with open(options.output_json, 'wb') as f: |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1921 raise | 1941 raise |
| 1922 except (gclient_utils.Error, subprocess2.CalledProcessError), e: | 1942 except (gclient_utils.Error, subprocess2.CalledProcessError), e: |
| 1923 print >> sys.stderr, 'Error: %s' % str(e) | 1943 print >> sys.stderr, 'Error: %s' % str(e) |
| 1924 return 1 | 1944 return 1 |
| 1925 | 1945 |
| 1926 | 1946 |
| 1927 if '__main__' == __name__: | 1947 if '__main__' == __name__: |
| 1928 sys.exit(Main(sys.argv[1:])) | 1948 sys.exit(Main(sys.argv[1:])) |
| 1929 | 1949 |
| 1930 # vim: ts=2:sw=2:tw=80:et: | 1950 # vim: ts=2:sw=2:tw=80:et: |
| OLD | NEW |