Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(639)

Side by Side Diff: presubmit_support.py

Issue 7063004: Allowing project name to be used to select groups of bots. (Closed) Base URL: svn://chrome-svn/chrome/trunk/tools/depot_tools/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | trychange.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 """Enables directory-specific presubmit checks to run at upload and/or commit. 6 """Enables directory-specific presubmit checks to run at upload and/or commit.
7 """ 7 """
8 8
9 __version__ = '1.6.1' 9 __version__ = '1.6.1'
10 10
(...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 p = os.path.join(directory, 'PRESUBMIT.py') 862 p = os.path.join(directory, 'PRESUBMIT.py')
863 if os.path.isfile(p): 863 if os.path.isfile(p):
864 results.append(p) 864 results.append(p)
865 865
866 logging.debug('Presubmit files: %s' % ','.join(results)) 866 logging.debug('Presubmit files: %s' % ','.join(results))
867 return results 867 return results
868 868
869 869
870 class GetTrySlavesExecuter(object): 870 class GetTrySlavesExecuter(object):
871 @staticmethod 871 @staticmethod
872 def ExecPresubmitScript(script_text, presubmit_path): 872 def ExecPresubmitScript(script_text, presubmit_path, project):
873 """Executes GetPreferredTrySlaves() from a single presubmit script. 873 """Executes GetPreferredTrySlaves() from a single presubmit script.
874 874
875 Args: 875 Args:
876 script_text: The text of the presubmit script. 876 script_text: The text of the presubmit script.
877 presubmit_path: Project script to run.
878 project: Project name to pass to presubmit script for bot selection.
877 879
878 Return: 880 Return:
879 A list of try slaves. 881 A list of try slaves.
880 """ 882 """
881 context = {} 883 context = {}
882 try: 884 try:
883 exec script_text in context 885 exec script_text in context
884 except Exception, e: 886 except Exception, e:
885 raise PresubmitFailure('"%s" had an exception.\n%s' % (presubmit_path, e)) 887 raise PresubmitFailure('"%s" had an exception.\n%s' % (presubmit_path, e))
886 888
887 function_name = 'GetPreferredTrySlaves' 889 function_name = 'GetPreferredTrySlaves'
888 if function_name in context: 890 if function_name in context:
889 result = eval(function_name + '()', context) 891 try:
892 result = eval(function_name + '(' + repr(project) + ')', context)
893 except TypeError:
894 result = eval(function_name + '()', context)
890 if not isinstance(result, types.ListType): 895 if not isinstance(result, types.ListType):
891 raise PresubmitFailure( 896 raise PresubmitFailure(
892 'Presubmit functions must return a list, got a %s instead: %s' % 897 'Presubmit functions must return a list, got a %s instead: %s' %
893 (type(result), str(result))) 898 (type(result), str(result)))
894 for item in result: 899 for item in result:
895 if not isinstance(item, basestring): 900 if not isinstance(item, basestring):
896 raise PresubmitFailure('All try slaves names must be strings.') 901 raise PresubmitFailure('All try slaves names must be strings.')
897 if item != item.strip(): 902 if item != item.strip():
898 raise PresubmitFailure( 903 raise PresubmitFailure(
899 'Try slave names cannot start/end with whitespace') 904 'Try slave names cannot start/end with whitespace')
900 else: 905 else:
901 result = [] 906 result = []
902 return result 907 return result
903 908
904 909
905 def DoGetTrySlaves(changed_files, 910 def DoGetTrySlaves(changed_files,
906 repository_root, 911 repository_root,
907 default_presubmit, 912 default_presubmit,
913 project,
908 verbose, 914 verbose,
909 output_stream): 915 output_stream):
910 """Get the list of try servers from the presubmit scripts. 916 """Get the list of try servers from the presubmit scripts.
911 917
912 Args: 918 Args:
913 changed_files: List of modified files. 919 changed_files: List of modified files.
914 repository_root: The repository root. 920 repository_root: The repository root.
915 default_presubmit: A default presubmit script to execute in any case. 921 default_presubmit: A default presubmit script to execute in any case.
922 project: Optional name of a project used in selecting trybots.
916 verbose: Prints debug info. 923 verbose: Prints debug info.
917 output_stream: A stream to write debug output to. 924 output_stream: A stream to write debug output to.
918 925
919 Return: 926 Return:
920 List of try slaves 927 List of try slaves
921 """ 928 """
922 presubmit_files = ListRelevantPresubmitFiles(changed_files, repository_root) 929 presubmit_files = ListRelevantPresubmitFiles(changed_files, repository_root)
923 if not presubmit_files and verbose: 930 if not presubmit_files and verbose:
924 output_stream.write("Warning, no presubmit.py found.\n") 931 output_stream.write("Warning, no presubmit.py found.\n")
925 results = [] 932 results = []
926 executer = GetTrySlavesExecuter() 933 executer = GetTrySlavesExecuter()
927 if default_presubmit: 934 if default_presubmit:
928 if verbose: 935 if verbose:
929 output_stream.write("Running default presubmit script.\n") 936 output_stream.write("Running default presubmit script.\n")
930 fake_path = os.path.join(repository_root, 'PRESUBMIT.py') 937 fake_path = os.path.join(repository_root, 'PRESUBMIT.py')
931 results += executer.ExecPresubmitScript(default_presubmit, fake_path) 938 results += executer.ExecPresubmitScript(
939 default_presubmit, fake_path, project)
932 for filename in presubmit_files: 940 for filename in presubmit_files:
933 filename = os.path.abspath(filename) 941 filename = os.path.abspath(filename)
934 if verbose: 942 if verbose:
935 output_stream.write("Running %s\n" % filename) 943 output_stream.write("Running %s\n" % filename)
936 # Accept CRLF presubmit script. 944 # Accept CRLF presubmit script.
937 presubmit_script = gclient_utils.FileRead(filename, 'rU') 945 presubmit_script = gclient_utils.FileRead(filename, 'rU')
938 results += executer.ExecPresubmitScript(presubmit_script, filename) 946 results += executer.ExecPresubmitScript(
947 presubmit_script, filename, project)
939 948
940 slaves = list(set(results)) 949 slaves = list(set(results))
941 if slaves and verbose: 950 if slaves and verbose:
942 output_stream.write(', '.join(slaves)) 951 output_stream.write(', '.join(slaves))
943 output_stream.write('\n') 952 output_stream.write('\n')
944 return slaves 953 return slaves
945 954
946 955
947 class PresubmitExecuter(object): 956 class PresubmitExecuter(object):
948 def __init__(self, change, committing, tbr, rietveld, verbose): 957 def __init__(self, change, committing, tbr, rietveld, verbose):
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1227 except PresubmitFailure, e: 1236 except PresubmitFailure, e:
1228 print >> sys.stderr, e 1237 print >> sys.stderr, e
1229 print >> sys.stderr, 'Maybe your depot_tools is out of date?' 1238 print >> sys.stderr, 'Maybe your depot_tools is out of date?'
1230 print >> sys.stderr, 'If all fails, contact maruel@' 1239 print >> sys.stderr, 'If all fails, contact maruel@'
1231 return 2 1240 return 2
1232 1241
1233 1242
1234 if __name__ == '__main__': 1243 if __name__ == '__main__':
1235 fix_encoding.fix_encoding() 1244 fix_encoding.fix_encoding()
1236 sys.exit(Main(None)) 1245 sys.exit(Main(None))
OLDNEW
« no previous file with comments | « no previous file | trychange.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698