OLD | NEW |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 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 """A wrapper script to manage a set of client modules in different SCM. | 6 """A wrapper script to manage a set of client modules in different SCM. |
7 | 7 |
8 This script is intended to be used to help basic management of client | 8 This script is intended to be used to help basic management of client |
9 program sources residing in one or more Subversion modules and Git | 9 program sources residing in one or more Subversion modules and Git |
10 repositories, along with other modules it depends on, also in Subversion or Git, | 10 repositories, along with other modules it depends on, also in Subversion or Git, |
(...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
840 else: | 840 else: |
841 if revision_overrides.has_key(name): | 841 if revision_overrides.has_key(name): |
842 return (url, revision_overrides[name]) | 842 return (url, revision_overrides[name]) |
843 else: | 843 else: |
844 return (url, revision) | 844 return (url, revision) |
845 | 845 |
846 # text of the snapshot gclient file | 846 # text of the snapshot gclient file |
847 new_gclient = "" | 847 new_gclient = "" |
848 # Dictionary of { path : SCM url } to ensure no duplicate solutions | 848 # Dictionary of { path : SCM url } to ensure no duplicate solutions |
849 solution_names = {} | 849 solution_names = {} |
850 entries = {} | |
851 entries_deps_content = {} | |
850 # Run on the base solutions first. | 852 # Run on the base solutions first. |
851 for solution in solutions: | 853 for solution in solutions: |
852 # Dictionary of { path : SCM url } to describe the gclient checkout | 854 # Dictionary of { path : SCM url } to describe the gclient checkout |
853 entries = {} | |
854 entries_deps_content = {} | |
855 name = solution["name"] | 855 name = solution["name"] |
856 if name in solution_names: | 856 if name in solution_names: |
857 raise gclient_utils.Error("solution %s specified more than once" % name) | 857 raise gclient_utils.Error("solution %s specified more than once" % name) |
858 (url, rev) = GetURLAndRev(name, solution["url"]) | 858 (url, rev) = GetURLAndRev(name, solution["url"]) |
859 entries[name] = "%s@%s" % (url, rev) | 859 entries[name] = "%s@%s" % (url, rev) |
860 solution_names[name] = "%s@%s" % (url, rev) | 860 solution_names[name] = "%s@%s" % (url, rev) |
861 deps_file = solution.get("deps_file", self._options.deps_file) | 861 deps_file = solution.get("deps_file", self._options.deps_file) |
862 if '/' in deps_file or '\\' in deps_file: | 862 if '/' in deps_file or '\\' in deps_file: |
863 raise gclient_utils.Error('deps_file name must not be a path, just a ' | 863 raise gclient_utils.Error('deps_file name must not be a path, just a ' |
864 'filename.') | 864 'filename.') |
865 try: | 865 try: |
866 deps_content = gclient_utils.FileRead( | 866 deps_content = gclient_utils.FileRead( |
867 os.path.join(self._root_dir, name, deps_file)) | 867 os.path.join(self._root_dir, name, deps_file)) |
868 except IOError, e: | 868 except IOError, e: |
869 if e.errno != errno.ENOENT: | 869 if e.errno != errno.ENOENT: |
870 raise | 870 raise |
871 deps_content = "" | 871 deps_content = "" |
872 entries_deps_content[name] = deps_content | 872 entries_deps_content[name] = deps_content |
873 | 873 |
874 # Process the dependencies next (sort alphanumerically to ensure that | 874 # Process the dependencies next (sort alphanumerically to ensure that |
875 # containing directories get populated first and for readability) | 875 # containing directories get populated first and for readability) |
876 deps = self._ParseAllDeps(entries, entries_deps_content) | 876 # DEBUG |
M-A Ruel
2010/03/11 23:46:07
Remove this please.
| |
877 deps_to_process = deps.keys() | 877 #print "entries\n%s\nentries_deps_content\n%s" % (entries, entries_deps_cont ent) |
878 deps_to_process.sort() | 878 # END DEBUG |
879 deps = self._ParseAllDeps(entries, entries_deps_content) | |
880 deps_to_process = deps.keys() | |
881 deps_to_process.sort() | |
879 | 882 |
880 # First pass for direct dependencies. | 883 # First pass for direct dependencies. |
881 for d in deps_to_process: | 884 for d in deps_to_process: |
882 if type(deps[d]) == str: | 885 if type(deps[d]) == str: |
883 (url, rev) = GetURLAndRev(d, deps[d]) | 886 (url, rev) = GetURLAndRev(d, deps[d]) |
884 entries[d] = "%s@%s" % (url, rev) | 887 entries[d] = "%s@%s" % (url, rev) |
885 | 888 |
886 # Second pass for inherited deps (via the From keyword) | 889 # Second pass for inherited deps (via the From keyword) |
887 for d in deps_to_process: | 890 for d in deps_to_process: |
888 if type(deps[d]) != str: | 891 if type(deps[d]) != str: |
889 deps_parent_url = entries[deps[d].module_name] | 892 deps_parent_url = entries[deps[d].module_name] |
890 if deps_parent_url.find("@") < 0: | 893 if deps_parent_url.find("@") < 0: |
891 raise gclient_utils.Error("From %s missing revisioned url" % | 894 raise gclient_utils.Error("From %s missing revisioned url" % |
892 deps[d].module_name) | 895 deps[d].module_name) |
893 content = gclient_utils.FileRead(os.path.join( | 896 content = gclient_utils.FileRead(os.path.join( |
894 self._root_dir, | 897 self._root_dir, |
895 deps[d].module_name, | 898 deps[d].module_name, |
896 self._options.deps_file)) | 899 self._options.deps_file)) |
897 sub_deps = self._ParseSolutionDeps(deps[d].module_name, content, {}) | 900 sub_deps = self._ParseSolutionDeps(deps[d].module_name, content, {}) |
898 (url, rev) = GetURLAndRev(d, sub_deps[d]) | 901 (url, rev) = GetURLAndRev(d, sub_deps[d]) |
899 entries[d] = "%s@%s" % (url, rev) | 902 entries[d] = "%s@%s" % (url, rev) |
900 | 903 |
901 # Build the snapshot configuration string | 904 # Build the snapshot configuration string |
902 if self._options.snapshot: | 905 if self._options.snapshot: |
903 url = entries.pop(name) | 906 url = entries.pop(name) |
904 custom_deps = ",\n ".join(["\"%s\": \"%s\"" % (x, entries[x]) | 907 custom_deps = ",\n ".join(["\"%s\": \"%s\"" % (x, entries[x]) |
905 for x in sorted(entries.keys())]) | 908 for x in sorted(entries.keys())]) |
906 | 909 |
907 new_gclient += DEFAULT_SNAPSHOT_SOLUTION_TEXT % { | 910 new_gclient += DEFAULT_SNAPSHOT_SOLUTION_TEXT % { |
908 'solution_name': name, | 911 'solution_name': name, |
909 'solution_url': url, | 912 'solution_url': url, |
910 'safesync_url' : "", | 913 'safesync_url' : "", |
911 'solution_deps': custom_deps, | 914 'solution_deps': custom_deps, |
912 } | 915 } |
913 else: | 916 else: |
914 print(";\n".join(["%s: %s" % (x, entries[x]) | 917 print(";\n".join(["%s: %s" % (x, entries[x]) |
915 for x in sorted(entries.keys())])) | 918 for x in sorted(entries.keys())])) |
916 | 919 |
917 # Print the snapshot configuration file | 920 # Print the snapshot configuration file |
918 if self._options.snapshot: | 921 if self._options.snapshot: |
919 config = DEFAULT_SNAPSHOT_FILE_TEXT % {'solution_list': new_gclient} | 922 config = DEFAULT_SNAPSHOT_FILE_TEXT % {'solution_list': new_gclient} |
920 snapclient = GClient(self._root_dir, self._options) | 923 snapclient = GClient(self._root_dir, self._options) |
921 snapclient.SetConfig(config) | 924 snapclient.SetConfig(config) |
922 print(snapclient._config_content) | 925 print(snapclient._config_content) |
923 | 926 |
924 | 927 |
925 ## gclient commands. | 928 ## gclient commands. |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1247 | 1250 |
1248 if "__main__" == __name__: | 1251 if "__main__" == __name__: |
1249 try: | 1252 try: |
1250 result = Main(sys.argv) | 1253 result = Main(sys.argv) |
1251 except gclient_utils.Error, e: | 1254 except gclient_utils.Error, e: |
1252 print >> sys.stderr, "Error: %s" % str(e) | 1255 print >> sys.stderr, "Error: %s" % str(e) |
1253 result = 1 | 1256 result = 1 |
1254 sys.exit(result) | 1257 sys.exit(result) |
1255 | 1258 |
1256 # vim: ts=2:sw=2:tw=80:et: | 1259 # vim: ts=2:sw=2:tw=80:et: |
OLD | NEW |