regress (3077:31da34df3139) regress (3097:6d06427d2248)
1#! /usr/bin/env python
2# Copyright (c) 2005-2006 The Regents of The University of Michigan
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions are
7# met: redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer;

--- 18 unchanged lines hidden (view full) ---

27#
28# Authors: Steve Reinhardt
29
30import sys
31import os
32import optparse
33import datetime
34
1#! /usr/bin/env python
2# Copyright (c) 2005-2006 The Regents of The University of Michigan
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions are
7# met: redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer;

--- 18 unchanged lines hidden (view full) ---

27#
28# Authors: Steve Reinhardt
29
30import sys
31import os
32import optparse
33import datetime
34
35#
36# Regression invocation:
37#
38# regress \
39# --workdir poolfs \
40# --scons-opts 'BATCH=yes USE_MYSQL=no -j 30 -Q' \
41# --recurse
42
43progname = os.path.basename(sys.argv[0])
44
45optparser = optparse.OptionParser()
46optparser.add_option('-v', '--verbose', dest='verbose', action='store_true',
47 default=False,
48 help='echo commands before executing')
35progname = os.path.basename(sys.argv[0])
36
37optparser = optparse.OptionParser()
38optparser.add_option('-v', '--verbose', dest='verbose', action='store_true',
39 default=False,
40 help='echo commands before executing')
49optparser.add_option('--scratch', dest='scratch', action='store_true',
50 default=False,
51 help='rebuld from scratch')
52optparser.add_option('--builds', dest='builds',
53 default='ALPHA_SE,ALPHA_FS,MIPS_SE,SPARC_SE',
54 help='comma-separated list of builds to test')
55optparser.add_option('--variants', dest='variants',
56 default='opt',
57 help='comma-separated list of build variants to test')
41optparser.add_option('--builds', dest='builds',
42 default='ALPHA_SE,ALPHA_FS,MIPS_SE,SPARC_SE',
43 help='comma-separated list of builds to test')
44optparser.add_option('--variants', dest='variants',
45 default='opt',
46 help='comma-separated list of build variants to test')
58optparser.add_option('--workdir', dest='workdir',
59 help='directory for checked-out source trees')
60optparser.add_option('--scons-opts', dest='scons_opts', default='',
61 help='scons options')
47optparser.add_option('--scons-opts', dest='scons_opts', default='',
48 help='scons options')
62optparser.add_option('--no-pull', dest='pull', action='store_false',
63 default=True,
64 help="don't pull changes from repository")
65optparser.add_option('--recurse', dest='recurse', action='store_true',
66 default=False,
67 help='call recursively to get summary up front')
68
69(options, tests) = optparser.parse_args()
70
71
72# split list options on ',' to get Python lists
73builds = options.builds.split(',')
74variants = options.variants.split(',')
75
49
50(options, tests) = optparser.parse_args()
51
52
53# split list options on ',' to get Python lists
54builds = options.builds.split(',')
55variants = options.variants.split(',')
56
76# Repositories to clone/update
77repos = ['m5']
78
79# Call os.system() and raise exception if return status is non-zero
80def system(cmd):
81 if options.verbose:
82 print cmd
83 status = os.system(cmd)
84 if status != 0:
85 upper = (status & 0xff00) >> 8
86 lower = (status & 0xff)
87 raise OSError, "shell command '%s' failed, status %d:%d" \
88 % (cmd, upper, lower)
89
90# Quote string s so it can be passed as a shell arg
91def shellquote(s):
92 if ' ' in s:
93 s = "'%s'" % s
94 return s
95
57# Call os.system() and raise exception if return status is non-zero
58def system(cmd):
59 if options.verbose:
60 print cmd
61 status = os.system(cmd)
62 if status != 0:
63 upper = (status & 0xff00) >> 8
64 lower = (status & 0xff)
65 raise OSError, "shell command '%s' failed, status %d:%d" \
66 % (cmd, upper, lower)
67
68# Quote string s so it can be passed as a shell arg
69def shellquote(s):
70 if ' ' in s:
71 s = "'%s'" % s
72 return s
73
96# The '--recurse' option invokes scons once to perform any necessary
97# rebuilds/test runs with the (possibly verbose) output placed in a
98# log file, then (if the buld was successful) returns scons to print a
99# summary of the results.
100if options.recurse:
101 sys.argv.remove('--recurse') # avoid infinite recursion...
102 timestr = datetime.datetime.now().isoformat('-')[:19]
103 logfile = '%s-%s' % (progname, timestr)
104 # quote args for shell
105 qargs = [shellquote(a) for a in sys.argv]
106 # always run the sub-job in verbose mode
107 qargs.append('-v')
108 cmd = '%s > %s 2>&1' % (' '.join(qargs), logfile)
109 try:
110 system(cmd)
111 except OSError, exc:
112 print "Error: recursive invocation failed, aborting."
113 print exc
114 print "======================="
115 os.system('cat %s' % logfile)
116 sys.exit(1)
117 # recursive call succeeded... re-run to generate summary
118 # don't *re*-build from scratch now
119 options.scratch = False
120 # no need to re-pull since the recursive call shoudl have done that
121 options.pull = False
122 print "Recursive invocation successful, see %s for output." % logfile
123
124try:
74try:
125 if options.workdir:
126 if options.verbose:
127 print 'cd', options.workdir
128 os.chdir(options.workdir)
129
130 if options.scratch:
131 for dir in repos:
132 system('rm -rf %s' % dir)
133 system('bk clone /bk/%s' % dir)
134 elif options.pull:
135 for dir in repos:
136 system('cd %s; bk pull' % dir)
137
138 if not tests:
139 print "No tests specified."
140 sys.exit(1)
141
75 if not tests:
76 print "No tests specified."
77 sys.exit(1)
78
142 if options.verbose:
143 print 'cd m5'
144 os.chdir('m5')
145
146 if 'all' in tests:
147 targets = ['build/%s/tests/%s' % (build, variant)
148 for build in builds
149 for variant in variants]
150 else:
151 targets = ['build/%s/tests/%s/%s' % (build, variant, test)
152 for build in builds
153 for variant in variants
154 for test in tests]
155
156 system('scons %s %s' % (options.scons_opts, ' '.join(targets)))
157
158 sys.exit(0)
159
160except OSError, exc:
161 print "%s: " % progname, exc
162 sys.exit(1)
79 if 'all' in tests:
80 targets = ['build/%s/tests/%s' % (build, variant)
81 for build in builds
82 for variant in variants]
83 else:
84 targets = ['build/%s/tests/%s/%s' % (build, variant, test)
85 for build in builds
86 for variant in variants
87 for test in tests]
88
89 system('scons %s %s' % (options.scons_opts, ' '.join(targets)))
90
91 sys.exit(0)
92
93except OSError, exc:
94 print "%s: " % progname, exc
95 sys.exit(1)