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 """Smoke tests for gclient.py. | 6 """Smoke tests for gclient.py. |
7 | 7 |
8 Shell out 'gclient' and run basic conformance tests. | 8 Shell out 'gclient' and run basic conformance tests. |
9 | 9 |
10 This test assumes GClientSmokeBase.URL_BASE is valid. | 10 This test assumes GClientSmokeBase.URL_BASE is valid. |
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 self.enabled = self.FAKE_REPOS.set_up_git() | 841 self.enabled = self.FAKE_REPOS.set_up_git() |
842 | 842 |
843 def testSync(self): | 843 def testSync(self): |
844 if not self.enabled: | 844 if not self.enabled: |
845 return | 845 return |
846 # TODO(maruel): safesync. | 846 # TODO(maruel): safesync. |
847 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) | 847 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
848 # Test unversioned checkout. | 848 # Test unversioned checkout. |
849 self.parseGclient( | 849 self.parseGclient( |
850 ['sync', '--deps', 'mac', '--jobs', '1'], | 850 ['sync', '--deps', 'mac', '--jobs', '1'], |
851 ['running', ('running', self.root_dir + '/src'), | 851 ['running', 'running', 'running', 'running', 'running']) |
852 'running', ('running', self.root_dir + '/src/repo2'), | |
853 'running', ('running', self.root_dir + '/src/repo2/repo_renamed'), | |
854 'running', 'running']) | |
855 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must | 852 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must |
856 # add sync parsing to get the list of updated files. | 853 # add sync parsing to get the list of updated files. |
857 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 854 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
858 ('repo_2@1', 'src/repo2'), | 855 ('repo_2@1', 'src/repo2'), |
859 ('repo_3@2', 'src/repo2/repo_renamed')) | 856 ('repo_3@2', 'src/repo2/repo_renamed')) |
860 tree['src/git_hooked1'] = 'git_hooked1' | 857 tree['src/git_hooked1'] = 'git_hooked1' |
861 tree['src/git_hooked2'] = 'git_hooked2' | 858 tree['src/git_hooked2'] = 'git_hooked2' |
862 self.assertTree(tree) | 859 self.assertTree(tree) |
863 | 860 |
864 # Manually remove git_hooked1 before synching to make sure it's not | 861 # Manually remove git_hooked1 before synching to make sure it's not |
865 # recreated. | 862 # recreated. |
866 os.remove(join(self.root_dir, 'src', 'git_hooked1')) | 863 os.remove(join(self.root_dir, 'src', 'git_hooked1')) |
867 | 864 |
868 # Test incremental versioned sync: sync backward. | 865 # Test incremental versioned sync: sync backward. |
869 diffdir = os.path.join(self.root_dir, 'src', 'repo2', 'repo_renamed') | |
870 self.parseGclient( | 866 self.parseGclient( |
871 ['sync', '--jobs', '1', '--revision', | 867 ['sync', '--jobs', '1', '--revision', |
872 'src@' + self.githash('repo_1', 1), | 868 'src@' + self.githash('repo_1', 1), |
873 '--deps', 'mac', '--delete_unversioned_trees'], | 869 '--deps', 'mac', '--delete_unversioned_trees'], |
874 ['running', ('running', self.root_dir + '/src/repo2/repo3'), | 870 ['running', 'running', 'deleting']) |
875 'running', ('running', self.root_dir + '/src/repo4'), | |
876 ('running', diffdir), 'deleting']) | |
877 tree = self.mangle_git_tree(('repo_1@1', 'src'), | 871 tree = self.mangle_git_tree(('repo_1@1', 'src'), |
878 ('repo_2@2', 'src/repo2'), | 872 ('repo_2@2', 'src/repo2'), |
879 ('repo_3@1', 'src/repo2/repo3'), | 873 ('repo_3@1', 'src/repo2/repo3'), |
880 ('repo_4@2', 'src/repo4')) | 874 ('repo_4@2', 'src/repo4')) |
881 tree['src/git_hooked2'] = 'git_hooked2' | 875 tree['src/git_hooked2'] = 'git_hooked2' |
882 self.assertTree(tree) | 876 self.assertTree(tree) |
883 # Test incremental sync: delete-unversioned_trees isn't there. | 877 # Test incremental sync: delete-unversioned_trees isn't there. |
884 expect3 = ('running', os.path.join(self.root_dir, 'src', 'repo2', 'repo3')) | |
885 expect4 = ('running', os.path.join(self.root_dir, 'src', 'repo4')) | |
886 self.parseGclient( | 878 self.parseGclient( |
887 ['sync', '--deps', 'mac', '--jobs', '1'], | 879 ['sync', '--deps', 'mac', '--jobs', '1'], |
888 ['running', ('running', self.root_dir + '/src/repo2/repo_renamed'), | 880 ['running', 'running', 'running']) |
889 'running', 'running', expect3, expect4]) | |
890 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 881 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
891 ('repo_2@1', 'src/repo2'), | 882 ('repo_2@1', 'src/repo2'), |
892 ('repo_3@1', 'src/repo2/repo3'), | 883 ('repo_3@1', 'src/repo2/repo3'), |
893 ('repo_3@2', 'src/repo2/repo_renamed'), | 884 ('repo_3@2', 'src/repo2/repo_renamed'), |
894 ('repo_4@2', 'src/repo4')) | 885 ('repo_4@2', 'src/repo4')) |
895 tree['src/git_hooked1'] = 'git_hooked1' | 886 tree['src/git_hooked1'] = 'git_hooked1' |
896 tree['src/git_hooked2'] = 'git_hooked2' | 887 tree['src/git_hooked2'] = 'git_hooked2' |
897 self.assertTree(tree) | 888 self.assertTree(tree) |
898 | 889 |
899 def testSyncIgnoredSolutionName(self): | 890 def testSyncIgnoredSolutionName(self): |
900 """TODO(maruel): This will become an error soon.""" | 891 """TODO(maruel): This will become an error soon.""" |
901 if not self.enabled: | 892 if not self.enabled: |
902 return | 893 return |
903 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) | 894 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
904 self.parseGclient( | 895 self.parseGclient( |
905 ['sync', '--deps', 'mac', '--jobs', '1', | 896 ['sync', '--deps', 'mac', '--jobs', '1', |
906 '--revision', 'invalid@' + self.githash('repo_1', 1)], | 897 '--revision', 'invalid@' + self.githash('repo_1', 1)], |
907 ['running', ('running', self.root_dir + '/src'), | 898 ['running', 'running', 'running', 'running', 'running'], |
908 'running', ('running', self.root_dir + '/src/repo2'), | |
909 'running', ('running', self.root_dir + '/src/repo2/repo_renamed'), | |
910 'running', 'running'], | |
911 'Please fix your script, having invalid --revision flags ' | 899 'Please fix your script, having invalid --revision flags ' |
912 'will soon considered an error.\n') | 900 'will soon considered an error.\n') |
913 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 901 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
914 ('repo_2@1', 'src/repo2'), | 902 ('repo_2@1', 'src/repo2'), |
915 ('repo_3@2', 'src/repo2/repo_renamed')) | 903 ('repo_3@2', 'src/repo2/repo_renamed')) |
916 tree['src/git_hooked1'] = 'git_hooked1' | 904 tree['src/git_hooked1'] = 'git_hooked1' |
917 tree['src/git_hooked2'] = 'git_hooked2' | 905 tree['src/git_hooked2'] = 'git_hooked2' |
918 self.assertTree(tree) | 906 self.assertTree(tree) |
919 | 907 |
920 def testSyncNoSolutionName(self): | 908 def testSyncNoSolutionName(self): |
921 if not self.enabled: | 909 if not self.enabled: |
922 return | 910 return |
923 # When no solution name is provided, gclient uses the first solution listed. | 911 # When no solution name is provided, gclient uses the first solution listed. |
924 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) | 912 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
925 self.parseGclient( | 913 self.parseGclient( |
926 ['sync', '--deps', 'mac', '--jobs', '1', | 914 ['sync', '--deps', 'mac', '--jobs', '1', |
927 '--revision', self.githash('repo_1', 1)], | 915 '--revision', self.githash('repo_1', 1)], |
928 ['running', ('running', self.root_dir + '/src'), | 916 ['running', 'running', 'running', 'running']) |
929 'running', ('running', self.root_dir + '/src/repo2'), | |
930 'running', ('running', self.root_dir + '/src/repo2/repo3'), | |
931 'running', ('running', self.root_dir + '/src/repo4')]) | |
932 tree = self.mangle_git_tree(('repo_1@1', 'src'), | 917 tree = self.mangle_git_tree(('repo_1@1', 'src'), |
933 ('repo_2@2', 'src/repo2'), | 918 ('repo_2@2', 'src/repo2'), |
934 ('repo_3@1', 'src/repo2/repo3'), | 919 ('repo_3@1', 'src/repo2/repo3'), |
935 ('repo_4@2', 'src/repo4')) | 920 ('repo_4@2', 'src/repo4')) |
936 self.assertTree(tree) | 921 self.assertTree(tree) |
937 | 922 |
938 def testSyncJobs(self): | 923 def testSyncJobs(self): |
939 if not self.enabled: | 924 if not self.enabled: |
940 return | 925 return |
941 # TODO(maruel): safesync. | 926 # TODO(maruel): safesync. |
942 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) | 927 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
943 # Test unversioned checkout. | 928 # Test unversioned checkout. |
944 self.parseGclient( | 929 self.parseGclient( |
945 ['sync', '--deps', 'mac', '--jobs', '8'], | 930 ['sync', '--deps', 'mac', '--jobs', '8'], |
946 ['running', ('running', self.root_dir + '/src'), | 931 ['running', 'running', 'running', 'running', 'running'], |
947 'running', ('running', self.root_dir + '/src/repo2'), | |
948 'running', ('running', self.root_dir + '/src/repo2/repo_renamed'), | |
949 'running', 'running'], | |
950 untangle=True) | 932 untangle=True) |
951 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must | 933 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must |
952 # add sync parsing to get the list of updated files. | 934 # add sync parsing to get the list of updated files. |
953 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 935 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
954 ('repo_2@1', 'src/repo2'), | 936 ('repo_2@1', 'src/repo2'), |
955 ('repo_3@2', 'src/repo2/repo_renamed')) | 937 ('repo_3@2', 'src/repo2/repo_renamed')) |
956 tree['src/git_hooked1'] = 'git_hooked1' | 938 tree['src/git_hooked1'] = 'git_hooked1' |
957 tree['src/git_hooked2'] = 'git_hooked2' | 939 tree['src/git_hooked2'] = 'git_hooked2' |
958 self.assertTree(tree) | 940 self.assertTree(tree) |
959 | 941 |
960 # Manually remove git_hooked1 before synching to make sure it's not | 942 # Manually remove git_hooked1 before synching to make sure it's not |
961 # recreated. | 943 # recreated. |
962 os.remove(join(self.root_dir, 'src', 'git_hooked1')) | 944 os.remove(join(self.root_dir, 'src', 'git_hooked1')) |
963 | 945 |
964 # Test incremental versioned sync: sync backward. | 946 # Test incremental versioned sync: sync backward. |
965 expect3 = ('running', | |
966 os.path.join(self.root_dir, 'src', 'repo2', 'repo_renamed')) | |
967 # Use --jobs 1 otherwise the order is not deterministic. | 947 # Use --jobs 1 otherwise the order is not deterministic. |
968 self.parseGclient( | 948 self.parseGclient( |
969 ['sync', '--revision', 'src@' + self.githash('repo_1', 1), | 949 ['sync', '--revision', 'src@' + self.githash('repo_1', 1), |
970 '--deps', 'mac', '--delete_unversioned_trees', '--jobs', '1'], | 950 '--deps', 'mac', '--delete_unversioned_trees', '--jobs', '1'], |
971 [ | 951 [ 'running', 'running', 'deleting'], |
972 'running', | |
973 ('running', self.root_dir + '/src/repo2/repo3'), | |
974 'running', | |
975 ('running', self.root_dir + '/src/repo4'), | |
976 expect3, | |
977 'deleting', | |
978 ], | |
979 untangle=True) | 952 untangle=True) |
980 tree = self.mangle_git_tree(('repo_1@1', 'src'), | 953 tree = self.mangle_git_tree(('repo_1@1', 'src'), |
981 ('repo_2@2', 'src/repo2'), | 954 ('repo_2@2', 'src/repo2'), |
982 ('repo_3@1', 'src/repo2/repo3'), | 955 ('repo_3@1', 'src/repo2/repo3'), |
983 ('repo_4@2', 'src/repo4')) | 956 ('repo_4@2', 'src/repo4')) |
984 tree['src/git_hooked2'] = 'git_hooked2' | 957 tree['src/git_hooked2'] = 'git_hooked2' |
985 self.assertTree(tree) | 958 self.assertTree(tree) |
986 # Test incremental sync: delete-unversioned_trees isn't there. | 959 # Test incremental sync: delete-unversioned_trees isn't there. |
987 expect4 = os.path.join(self.root_dir, 'src', 'repo2', 'repo3') | |
988 expect5 = os.path.join(self.root_dir, 'src', 'repo4') | |
989 self.parseGclient( | 960 self.parseGclient( |
990 ['sync', '--deps', 'mac', '--jobs', '8'], | 961 ['sync', '--deps', 'mac', '--jobs', '8'], |
991 ['running', ('running', self.root_dir + '/src/repo2/repo_renamed'), | 962 ['running', 'running', 'running'], |
992 'running', 'running', ('running', expect4), ('running', expect5)], | |
993 untangle=True) | 963 untangle=True) |
994 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 964 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
995 ('repo_2@1', 'src/repo2'), | 965 ('repo_2@1', 'src/repo2'), |
996 ('repo_3@1', 'src/repo2/repo3'), | 966 ('repo_3@1', 'src/repo2/repo3'), |
997 ('repo_3@2', 'src/repo2/repo_renamed'), | 967 ('repo_3@2', 'src/repo2/repo_renamed'), |
998 ('repo_4@2', 'src/repo4')) | 968 ('repo_4@2', 'src/repo4')) |
999 tree['src/git_hooked1'] = 'git_hooked1' | 969 tree['src/git_hooked1'] = 'git_hooked1' |
1000 tree['src/git_hooked2'] = 'git_hooked2' | 970 tree['src/git_hooked2'] = 'git_hooked2' |
1001 self.assertTree(tree) | 971 self.assertTree(tree) |
1002 | 972 |
(...skipping 22 matching lines...) Expand all Loading... |
1025 tree['src/git_hooked1'] = 'git_hooked1' | 995 tree['src/git_hooked1'] = 'git_hooked1' |
1026 tree['src/git_hooked2'] = 'git_hooked2' | 996 tree['src/git_hooked2'] = 'git_hooked2' |
1027 self.assertTree(tree) | 997 self.assertTree(tree) |
1028 | 998 |
1029 def testPreDepsHooks(self): | 999 def testPreDepsHooks(self): |
1030 if not self.enabled: | 1000 if not self.enabled: |
1031 return | 1001 return |
1032 self.gclient(['config', self.git_base + 'repo_5', '--name', 'src']) | 1002 self.gclient(['config', self.git_base + 'repo_5', '--name', 'src']) |
1033 expectation = [ | 1003 expectation = [ |
1034 ('running', self.root_dir), # git clone repo_5 | 1004 ('running', self.root_dir), # git clone repo_5 |
1035 ('running', self.root_dir + '/src'), # git checkout src | |
1036 ('running', self.root_dir), # pre-deps hook | 1005 ('running', self.root_dir), # pre-deps hook |
1037 ('running', self.root_dir), # git clone repo_1 | 1006 ('running', self.root_dir), # git clone repo_1 |
1038 ('running', self.root_dir + '/src/repo1'), # git checkout repo1 | |
1039 ('running', self.root_dir), # git clone repo_1 | 1007 ('running', self.root_dir), # git clone repo_1 |
1040 ('running', self.root_dir + '/src/repo2'), # git checkout repo2 | |
1041 ] | 1008 ] |
1042 out = self.parseGclient(['sync', '--deps', 'mac', '--jobs=1', | 1009 out = self.parseGclient(['sync', '--deps', 'mac', '--jobs=1', |
1043 '--revision', 'src@' + self.githash('repo_5', 2)], | 1010 '--revision', 'src@' + self.githash('repo_5', 2)], |
1044 expectation) | 1011 expectation) |
1045 self.assertEquals(2, len(out[2])) | 1012 self.assertEquals(2, len(out[1])) |
1046 self.assertEquals('pre-deps hook', out[2][1]) | 1013 self.assertEquals('pre-deps hook', out[1][1]) |
1047 tree = self.mangle_git_tree(('repo_5@2', 'src'), | 1014 tree = self.mangle_git_tree(('repo_5@2', 'src'), |
1048 ('repo_1@2', 'src/repo1'), | 1015 ('repo_1@2', 'src/repo1'), |
1049 ('repo_2@1', 'src/repo2') | 1016 ('repo_2@1', 'src/repo2') |
1050 ) | 1017 ) |
1051 tree['src/git_pre_deps_hooked'] = 'git_pre_deps_hooked' | 1018 tree['src/git_pre_deps_hooked'] = 'git_pre_deps_hooked' |
1052 self.assertTree(tree) | 1019 self.assertTree(tree) |
1053 | 1020 |
1054 os.remove(join(self.root_dir, 'src', 'git_pre_deps_hooked')) | 1021 os.remove(join(self.root_dir, 'src', 'git_pre_deps_hooked')) |
1055 | 1022 |
1056 # Pre-DEPS hooks don't run with runhooks. | 1023 # Pre-DEPS hooks don't run with runhooks. |
(...skipping 24 matching lines...) Expand all Loading... |
1081 ('repo_2@1', 'src/repo2') | 1048 ('repo_2@1', 'src/repo2') |
1082 ) | 1049 ) |
1083 self.assertTree(tree) | 1050 self.assertTree(tree) |
1084 | 1051 |
1085 def testPreDepsHooksError(self): | 1052 def testPreDepsHooksError(self): |
1086 if not self.enabled: | 1053 if not self.enabled: |
1087 return | 1054 return |
1088 self.gclient(['config', self.git_base + 'repo_5', '--name', 'src']) | 1055 self.gclient(['config', self.git_base + 'repo_5', '--name', 'src']) |
1089 expectated_stdout = [ | 1056 expectated_stdout = [ |
1090 ('running', self.root_dir), # git clone repo_5 | 1057 ('running', self.root_dir), # git clone repo_5 |
1091 ('running', self.root_dir + '/src'), # git checkout src | |
1092 ('running', self.root_dir), # pre-deps hook | 1058 ('running', self.root_dir), # pre-deps hook |
1093 ('running', self.root_dir), # pre-deps hook (fails) | 1059 ('running', self.root_dir), # pre-deps hook (fails) |
1094 ] | 1060 ] |
1095 expected_stderr = ('Error: Command /usr/bin/python -c import sys; ' | 1061 expected_stderr = ('Error: Command /usr/bin/python -c import sys; ' |
1096 'sys.exit(1) returned non-zero exit status 1 in %s\n' | 1062 'sys.exit(1) returned non-zero exit status 1 in %s\n' |
1097 % self.root_dir) | 1063 % self.root_dir) |
1098 stdout, stderr, retcode = self.gclient(['sync', '--deps', 'mac', '--jobs=1', | 1064 stdout, stderr, retcode = self.gclient(['sync', '--deps', 'mac', '--jobs=1', |
1099 '--revision', | 1065 '--revision', |
1100 'src@' + self.githash('repo_5', 3)]) | 1066 'src@' + self.githash('repo_5', 3)]) |
1101 self.assertEquals(stderr, expected_stderr) | 1067 self.assertEquals(stderr, expected_stderr) |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1164 'custom_vars': {} | 1130 'custom_vars': {} |
1165 }]) | 1131 }]) |
1166 | 1132 |
1167 # Tested in testSync. | 1133 # Tested in testSync. |
1168 self.gclient(['sync', '--deps', 'mac']) | 1134 self.gclient(['sync', '--deps', 'mac']) |
1169 write(join(self.root_dir, 'src', 'repo2', 'hi'), 'Hey!') | 1135 write(join(self.root_dir, 'src', 'repo2', 'hi'), 'Hey!') |
1170 | 1136 |
1171 expected1 = ('running', os.path.join(self.root_dir, 'src')) | 1137 expected1 = ('running', os.path.join(self.root_dir, 'src')) |
1172 expected2 = ('running', os.path.join(expected1[1], 'repo2')) | 1138 expected2 = ('running', os.path.join(expected1[1], 'repo2')) |
1173 expected3 = ('running', os.path.join(expected2[1], 'repo_renamed')) | 1139 expected3 = ('running', os.path.join(expected2[1], 'repo_renamed')) |
1174 out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'], | 1140 out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'], []) |
1175 [expected1, expected2, expected3]) | |
1176 # TODO(maruel): http://crosbug.com/3584 It should output the unversioned | 1141 # TODO(maruel): http://crosbug.com/3584 It should output the unversioned |
1177 # files. | 1142 # files. |
1178 self.assertEquals(3, len(out)) | 1143 self.assertEquals(0, len(out)) |
1179 | 1144 |
1180 # Revert implies --force implies running hooks without looking at pattern | 1145 # Revert implies --force implies running hooks without looking at pattern |
1181 # matching. For each expected path, 'git reset' and 'git clean' are run, so | 1146 # matching. For each expected path, 'git reset' and 'git clean' are run, so |
1182 # there should be two results for each. The last two results should reflect | 1147 # there should be two results for each. The last two results should reflect |
1183 # writing git_hooked1 and git_hooked2. | 1148 # writing git_hooked1 and git_hooked2. There's only one result for the third |
| 1149 # because it is clean and has no output for 'git clean'. |
1184 expected4 = ('running', self.root_dir) | 1150 expected4 = ('running', self.root_dir) |
1185 out = self.parseGclient(['revert', '--deps', 'mac', '--jobs', '1'], | 1151 out = self.parseGclient(['revert', '--deps', 'mac', '--jobs', '1'], |
1186 [expected1, expected1, | 1152 [expected1, expected1, |
1187 expected2, expected2, | 1153 expected2, expected2, |
1188 expected3, expected3, | 1154 expected3, |
1189 expected4, expected4]) | 1155 expected4, expected4]) |
1190 self.assertEquals(8, len(out)) | 1156 self.assertEquals(7, len(out)) |
1191 tree = self.mangle_git_tree(('repo_1@3', 'src'), | 1157 tree = self.mangle_git_tree(('repo_1@3', 'src'), |
1192 ('repo_2@1', 'src/repo2'), | 1158 ('repo_2@1', 'src/repo2'), |
1193 ('repo_3@2', 'src/repo2/repo_renamed')) | 1159 ('repo_3@2', 'src/repo2/repo_renamed')) |
1194 tree['src/git_hooked1'] = 'git_hooked1' | 1160 tree['src/git_hooked1'] = 'git_hooked1' |
1195 tree['src/git_hooked2'] = 'git_hooked2' | 1161 tree['src/git_hooked2'] = 'git_hooked2' |
1196 self.assertTree(tree) | 1162 self.assertTree(tree) |
1197 | 1163 |
1198 # Make a new commit object in the origin repo, to force reset to fetch. | 1164 # Make a new commit object in the origin repo, to force reset to fetch. |
1199 self.FAKE_REPOS._commit_git('repo_2', { # pylint: disable=W0212 | 1165 self.FAKE_REPOS._commit_git('repo_2', { # pylint: disable=W0212 |
1200 'origin': 'git/repo_2@3\n', | 1166 'origin': 'git/repo_2@3\n', |
1201 }) | 1167 }) |
1202 | 1168 |
1203 self.gclient(['config', '--spec', config_template % { | 1169 self.gclient(['config', '--spec', config_template % { |
1204 'git_base': self.git_base, | 1170 'git_base': self.git_base, |
1205 'custom_vars': {'r2hash': self.FAKE_REPOS.git_hashes['repo_2'][-1][0] } | 1171 'custom_vars': {'r2hash': self.FAKE_REPOS.git_hashes['repo_2'][-1][0] } |
1206 }]) | 1172 }]) |
1207 out = self.parseGclient(['revert', '--deps', 'mac', '--jobs', '1'], | 1173 out = self.parseGclient(['revert', '--deps', 'mac', '--jobs', '1'], |
1208 [expected1, expected1, | 1174 [expected1, expected1, |
1209 expected2, expected2, | 1175 expected2, expected2, |
1210 expected3, expected3, | 1176 expected3, |
1211 expected4, expected4]) | 1177 expected4, expected4]) |
1212 self.assertEquals(8, len(out)) | 1178 self.assertEquals(7, len(out)) |
1213 tree = self.mangle_git_tree(('repo_1@3', 'src'), | 1179 tree = self.mangle_git_tree(('repo_1@3', 'src'), |
1214 ('repo_2@3', 'src/repo2'), | 1180 ('repo_2@3', 'src/repo2'), |
1215 ('repo_3@2', 'src/repo2/repo_renamed')) | 1181 ('repo_3@2', 'src/repo2/repo_renamed')) |
1216 tree['src/git_hooked1'] = 'git_hooked1' | 1182 tree['src/git_hooked1'] = 'git_hooked1' |
1217 tree['src/git_hooked2'] = 'git_hooked2' | 1183 tree['src/git_hooked2'] = 'git_hooked2' |
1218 self.assertTree(tree) | 1184 self.assertTree(tree) |
1219 | 1185 |
1220 results = self.gclient(['status', '--deps', 'mac', '--jobs', '1']) | 1186 results = self.gclient(['status', '--deps', 'mac', '--jobs', '1']) |
1221 out = results[0].splitlines(False) | 1187 out = results[0].splitlines(False) |
1222 # TODO(maruel): http://crosbug.com/3584 It should output the unversioned | 1188 # TODO(maruel): http://crosbug.com/3584 It should output the unversioned |
1223 # files. | 1189 # files. |
1224 self.assertEquals(6, len(out)) | 1190 self.assertEquals(0, len(out)) |
1225 | 1191 |
1226 class GClientSmokeBoth(GClientSmokeBase): | 1192 class GClientSmokeBoth(GClientSmokeBase): |
1227 def setUp(self): | 1193 def setUp(self): |
1228 super(GClientSmokeBoth, self).setUp() | 1194 super(GClientSmokeBoth, self).setUp() |
1229 self.enabled = self.FAKE_REPOS.set_up_svn() and self.FAKE_REPOS.set_up_git() | 1195 self.enabled = self.FAKE_REPOS.set_up_svn() and self.FAKE_REPOS.set_up_git() |
1230 | 1196 |
1231 def testMultiSolutions(self): | 1197 def testMultiSolutions(self): |
1232 if not self.enabled: | 1198 if not self.enabled: |
1233 return | 1199 return |
1234 self.gclient(['config', '--spec', | 1200 self.gclient(['config', '--spec', |
1235 'solutions=[' | 1201 'solutions=[' |
1236 '{"name": "src",' | 1202 '{"name": "src",' |
1237 ' "url": "' + self.svn_base + 'trunk/src/"},' | 1203 ' "url": "' + self.svn_base + 'trunk/src/"},' |
1238 '{"name": "src-git",' | 1204 '{"name": "src-git",' |
1239 '"url": "' + self.git_base + 'repo_1"}]']) | 1205 '"url": "' + self.git_base + 'repo_1"}]']) |
1240 self.parseGclient(['sync', '--deps', 'mac', '--jobs', '1'], | 1206 self.parseGclient(['sync', '--deps', 'mac', '--jobs', '1'], |
1241 ['running', | 1207 ['running', 'running', 'running', |
1242 'running', ('running', self.root_dir + '/src-git'), | |
1243 'running', | |
1244 # This is due to the way svn update is called for a single | 1208 # This is due to the way svn update is called for a single |
1245 # file when File() is used in a DEPS file. | 1209 # file when File() is used in a DEPS file. |
1246 ('running', self.root_dir + '/src/file/other'), | 1210 ('running', self.root_dir + '/src/file/other'), |
1247 'running', 'running', 'running', | 1211 'running', 'running', 'running', 'running', |
1248 'running', ('running', self.root_dir + '/src/repo2'), | 1212 'running', 'running', 'running', 'running']) |
1249 'running', ('running', self.root_dir + '/src/repo2/repo_renamed'), | |
1250 'running', 'running', 'running']) | |
1251 tree = self.mangle_git_tree(('repo_1@2', 'src-git'), | 1213 tree = self.mangle_git_tree(('repo_1@2', 'src-git'), |
1252 ('repo_2@1', 'src/repo2'), | 1214 ('repo_2@1', 'src/repo2'), |
1253 ('repo_3@2', 'src/repo2/repo_renamed')) | 1215 ('repo_3@2', 'src/repo2/repo_renamed')) |
1254 tree.update(self.mangle_svn_tree( | 1216 tree.update(self.mangle_svn_tree( |
1255 ('trunk/src@2', 'src'), | 1217 ('trunk/src@2', 'src'), |
1256 ('trunk/third_party/foo@1', 'src/third_party/foo'), | 1218 ('trunk/third_party/foo@1', 'src/third_party/foo'), |
1257 ('trunk/other@2', 'src/other'))) | 1219 ('trunk/other@2', 'src/other'))) |
1258 tree['src/file/other/DEPS'] = ( | 1220 tree['src/file/other/DEPS'] = ( |
1259 self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS']) | 1221 self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS']) |
1260 tree['src/git_hooked1'] = 'git_hooked1' | 1222 tree['src/git_hooked1'] = 'git_hooked1' |
(...skipping 10 matching lines...) Expand all Loading... |
1271 ' "url": "' + self.svn_base + 'trunk/src/"},' | 1233 ' "url": "' + self.svn_base + 'trunk/src/"},' |
1272 '{"name": "src-git",' | 1234 '{"name": "src-git",' |
1273 '"url": "' + self.git_base + 'repo_1"}]']) | 1235 '"url": "' + self.git_base + 'repo_1"}]']) |
1274 # There is no guarantee that the ordering will be consistent. | 1236 # There is no guarantee that the ordering will be consistent. |
1275 (stdout, stderr, returncode) = self.gclient( | 1237 (stdout, stderr, returncode) = self.gclient( |
1276 ['sync', '--deps', 'mac', '--jobs', '8']) | 1238 ['sync', '--deps', 'mac', '--jobs', '8']) |
1277 stdout = self.untangle(stdout) | 1239 stdout = self.untangle(stdout) |
1278 self.checkString('', stderr) | 1240 self.checkString('', stderr) |
1279 self.assertEquals(0, returncode) | 1241 self.assertEquals(0, returncode) |
1280 results = self.splitBlock(stdout) | 1242 results = self.splitBlock(stdout) |
1281 self.assertEquals(15, len(results)) | 1243 self.assertEquals(12, len(results)) |
1282 tree = self.mangle_git_tree(('repo_1@2', 'src-git'), | 1244 tree = self.mangle_git_tree(('repo_1@2', 'src-git'), |
1283 ('repo_2@1', 'src/repo2'), | 1245 ('repo_2@1', 'src/repo2'), |
1284 ('repo_3@2', 'src/repo2/repo_renamed')) | 1246 ('repo_3@2', 'src/repo2/repo_renamed')) |
1285 tree.update(self.mangle_svn_tree( | 1247 tree.update(self.mangle_svn_tree( |
1286 ('trunk/src@2', 'src'), | 1248 ('trunk/src@2', 'src'), |
1287 ('trunk/third_party/foo@1', 'src/third_party/foo'), | 1249 ('trunk/third_party/foo@1', 'src/third_party/foo'), |
1288 ('trunk/other@2', 'src/other'))) | 1250 ('trunk/other@2', 'src/other'))) |
1289 tree['src/file/other/DEPS'] = ( | 1251 tree['src/file/other/DEPS'] = ( |
1290 self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS']) | 1252 self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS']) |
1291 tree['src/git_hooked1'] = 'git_hooked1' | 1253 tree['src/git_hooked1'] = 'git_hooked1' |
1292 tree['src/git_hooked2'] = 'git_hooked2' | 1254 tree['src/git_hooked2'] = 'git_hooked2' |
1293 tree['src/svn_hooked1'] = 'svn_hooked1' | 1255 tree['src/svn_hooked1'] = 'svn_hooked1' |
1294 self.assertTree(tree) | 1256 self.assertTree(tree) |
1295 | 1257 |
1296 def testMultiSolutionsMultiRev(self): | 1258 def testMultiSolutionsMultiRev(self): |
1297 if not self.enabled: | 1259 if not self.enabled: |
1298 return | 1260 return |
1299 self.gclient(['config', '--spec', | 1261 self.gclient(['config', '--spec', |
1300 'solutions=[' | 1262 'solutions=[' |
1301 '{"name": "src",' | 1263 '{"name": "src",' |
1302 ' "url": "' + self.svn_base + 'trunk/src/"},' | 1264 ' "url": "' + self.svn_base + 'trunk/src/"},' |
1303 '{"name": "src-git",' | 1265 '{"name": "src-git",' |
1304 '"url": "' + self.git_base + 'repo_1"}]']) | 1266 '"url": "' + self.git_base + 'repo_1"}]']) |
1305 self.parseGclient( | 1267 self.parseGclient( |
1306 ['sync', '--deps', 'mac', '--jobs', '1', '--revision', '1', | 1268 ['sync', '--deps', 'mac', '--jobs', '1', '--revision', '1', |
1307 '-r', 'src-git@' + self.githash('repo_1', 1)], | 1269 '-r', 'src-git@' + self.githash('repo_1', 1)], |
1308 ['running', | 1270 ['running', 'running', 'running', 'running', 'running', |
1309 'running', ('running', self.root_dir + '/src-git'), | 1271 'running', 'running', 'running'], |
1310 'running', 'running', 'running', | |
1311 'running', ('running', self.root_dir + '/src/repo2'), | |
1312 'running', ('running', self.root_dir + '/src/repo2/repo3'), | |
1313 'running', ('running', self.root_dir + '/src/repo4')], | |
1314 expected_stderr= | 1272 expected_stderr= |
1315 'You must specify the full solution name like --revision src@1\n' | 1273 'You must specify the full solution name like --revision src@1\n' |
1316 'when you have multiple solutions setup in your .gclient file.\n' | 1274 'when you have multiple solutions setup in your .gclient file.\n' |
1317 'Other solutions present are: src-git.\n') | 1275 'Other solutions present are: src-git.\n') |
1318 tree = self.mangle_git_tree(('repo_1@1', 'src-git'), | 1276 tree = self.mangle_git_tree(('repo_1@1', 'src-git'), |
1319 ('repo_2@2', 'src/repo2'), | 1277 ('repo_2@2', 'src/repo2'), |
1320 ('repo_3@1', 'src/repo2/repo3'), | 1278 ('repo_3@1', 'src/repo2/repo3'), |
1321 ('repo_4@2', 'src/repo4')) | 1279 ('repo_4@2', 'src/repo4')) |
1322 tree.update(self.mangle_svn_tree( | 1280 tree.update(self.mangle_svn_tree( |
1323 ('trunk/src@1', 'src'), | 1281 ('trunk/src@1', 'src'), |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1497 | 1455 |
1498 if '-c' in sys.argv: | 1456 if '-c' in sys.argv: |
1499 COVERAGE = True | 1457 COVERAGE = True |
1500 sys.argv.remove('-c') | 1458 sys.argv.remove('-c') |
1501 if os.path.exists('.coverage'): | 1459 if os.path.exists('.coverage'): |
1502 os.remove('.coverage') | 1460 os.remove('.coverage') |
1503 os.environ['COVERAGE_FILE'] = os.path.join( | 1461 os.environ['COVERAGE_FILE'] = os.path.join( |
1504 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), | 1462 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), |
1505 '.coverage') | 1463 '.coverage') |
1506 unittest.main() | 1464 unittest.main() |
OLD | NEW |