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

Side by Side Diff: build/scripts/slave/chromium/archive_coverage.py

Issue 11273046: Goal here is to collect total_coverage and unittests coverage numbers separately. Below are the ste… (Closed) Base URL: https://src.chromium.org/chrome/trunk/tools/
Patch Set: Created 8 years, 1 month 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
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 """A tool to archive croc code coverage to the Chromium buildbot webserver. 6 """A tool to archive croc code coverage to the Chromium buildbot webserver.
7 7
8 When this is run, the current directory (cwd) should be the outer build 8 When this is run, the current directory (cwd) should be the outer build
9 directory (e.g., chrome-release/build/). 9 directory (e.g., chrome-release/build/).
10 10
(...skipping 12 matching lines...) Expand all
23 23
24 from common import chromium_utils 24 from common import chromium_utils
25 25
26 from slave import slave_utils 26 from slave import slave_utils
27 import config 27 import config
28 28
29 29
30 class ArchiveCoverage(object): 30 class ArchiveCoverage(object):
31 """Class to copy coverage HTML to the buildbot webserver.""" 31 """Class to copy coverage HTML to the buildbot webserver."""
32 32
33 def __init__(self, options): 33 def __init__(self, options, coverage_folder_name):
34 """Constructor. 34 """Constructor.
35 35
36 Args: 36 Args:
37 options: Command-line option object from optparse. 37 options: Command-line option object from optparse.
38 """ 38 """
39 # Do platform-specific config 39 # Do platform-specific config
40 if sys.platform in ('win32', 'cygwin'): 40 if sys.platform in ('win32', 'cygwin'):
41 self.is_posix = False 41 self.is_posix = False
42 self.from_dir = os.path.join(options.build_dir, options.target, 42 self.from_dir = os.path.join(options.build_dir, options.target,
43 'coverage_croc_html') 43 'coverage_croc_html')
44 44
45 elif sys.platform.startswith('darwin'): 45 elif sys.platform.startswith('darwin'):
46 self.is_posix = True 46 self.is_posix = True
47 self.from_dir = os.path.join(os.path.dirname(options.build_dir), 47 self.from_dir = os.path.join(os.path.dirname(options.build_dir),
48 'xcodebuild', options.target, 48 'xcodebuild', options.target,
49 'coverage_croc_html') 49 'coverage_croc_html')
50 50
51 elif sys.platform.startswith('linux'): 51 elif sys.platform.startswith('linux'):
52 self.is_posix = True 52 self.is_posix = True
53 self.from_dir = os.path.join(os.path.dirname(options.build_dir), 53 self.from_dir = os.path.join(os.path.dirname(options.build_dir),
54 'out', options.target, # make, not scons 54 'out', options.target, # make, not scons
55 coverage_folder_name,
55 'coverage_croc_html') 56 'coverage_croc_html')
56 57
57 else: 58 else:
58 print 'Unknown/unsupported platform.' 59 print 'Unknown/unsupported platform.'
59 sys.exit(1) 60 sys.exit(1)
60 61
61 self.from_dir = os.path.normpath(self.from_dir) 62 self.from_dir = os.path.normpath(self.from_dir)
63
cmp 2012/11/01 23:46:22 remove this line
pshenoy 2012/11/05 18:47:22 Done.
62 print 'copy from: %s' % self.from_dir 64 print 'copy from: %s' % self.from_dir
63 65
66 if not os.path.exists(self.from_dir):
67 print '%s directory does not exist' % self.from_dir
68 sys.exit(1)
69
64 # Extract the build name of this slave (e.g., 'chrome-release') from its 70 # Extract the build name of this slave (e.g., 'chrome-release') from its
65 # configuration file. 71 # configuration file.
66 chrome_dir = os.path.abspath(options.build_dir) 72 chrome_dir = os.path.abspath(options.build_dir)
67 print 'chrome_dir: %s' % chrome_dir 73 print 'chrome_dir: %s' % chrome_dir
68 build_name = slave_utils.SlaveBuildName(chrome_dir) 74 build_name = slave_utils.SlaveBuildName(chrome_dir)
69 print 'build name: %s' % build_name 75 print 'build name: %s' % build_name
70 76
71 # The 'last change:' line MUST appear for the buildbot output-parser to 77 # The 'last change:' line MUST appear for the buildbot output-parser to
72 # construct the 'view coverage' link. (See 78 # construct the 'view coverage' link. (See
73 # scripts/master/log_parser/archive_command.py) 79 # scripts/master/log_parser/archive_command.py)
(...skipping 18 matching lines...) Expand all
92 else: 98 else:
93 self.perf_subdir = build_name 99 self.perf_subdir = build_name
94 if options.build_number: 100 if options.build_number:
95 self.perf_subdir = os.path.join(self.perf_subdir, options.build_number) 101 self.perf_subdir = os.path.join(self.perf_subdir, options.build_number)
96 print 'build number: %s' % options.build_number 102 print 'build number: %s' % options.build_number
97 print 'perf subdir: %s' % self.perf_subdir 103 print 'perf subdir: %s' % self.perf_subdir
98 104
99 # TODO(jrg) use os.path.join here? 105 # TODO(jrg) use os.path.join here?
100 self.archive_path = '%scoverage/%s/%s' % ( 106 self.archive_path = '%scoverage/%s/%s' % (
101 archive_config.www_dir_base, self.perf_subdir, self.last_change) 107 archive_config.www_dir_base, self.perf_subdir, self.last_change)
108 # If this is for collecting coverage for unittests, then create
109 # a separate path.
110 if coverage_folder_name == 'unittests_coverage':
111 self.archive_path = os.path.join(self.archive_path, coverage_folder_name)
102 self.archive_path = os.path.normpath(self.archive_path) 112 self.archive_path = os.path.normpath(self.archive_path)
103 print 'archive path: %s' % self.archive_path 113 print 'archive path: %s' % self.archive_path
104 114
105 def _MakeSourceWorldReadable(self): 115 def _MakeSourceWorldReadable(self):
106 """Makes the source tree world-readable.""" 116 """Makes the source tree world-readable."""
107 for (dirpath, dirnames, filenames) in os.walk(self.from_dir): 117 for (dirpath, dirnames, filenames) in os.walk(self.from_dir):
108 for node in dirnames + filenames: 118 for node in dirnames + filenames:
109 chromium_utils.MakeWorldReadable(os.path.join(dirpath, node)) 119 chromium_utils.MakeWorldReadable(os.path.join(dirpath, node))
110 120
111 def Run(self): 121 def Run(self):
112 """Does the actual upload. 122 """Does the actual upload.
113 123
114 Returns: 124 Returns:
115 0 if successful, or non-zero error code if error. 125 0 if successful, or non-zero error code if error.
116 """ 126 """
117 if self.is_posix: 127 if os.path.exists(self.from_dir):
118 self._MakeSourceWorldReadable() 128 if self.is_posix:
cmp 2012/11/01 23:46:22 let's rewrite this so lines 127 is: if os.path.ex
pshenoy 2012/11/05 18:47:22 Done.
129 self._MakeSourceWorldReadable()
119 130
120 cmd = ['ssh', self.archive_host, 'mkdir', '-p', self.archive_path] 131 cmd = ['ssh', self.archive_host, 'mkdir', '-p', self.archive_path]
121 print 'Running: ' + ' '.join(cmd) 132 print 'Running: ' + ' '.join(cmd)
122 retval = subprocess.call(cmd) 133 retval = subprocess.call(cmd)
123 if retval: 134 if retval:
124 return retval 135 return retval
125 136
126 cmd = ['bash', '-c', 'scp -r -p %s/* %s:%s' % 137 cmd = ['bash', '-c', 'scp -r -p %s/* %s:%s' %
127 (self.from_dir, self.archive_host, self.archive_path)] 138 (self.from_dir, self.archive_host, self.archive_path)]
128 print 'Running: ' + ' '.join(cmd) 139 print 'Running: ' + ' '.join(cmd)
129 retval = subprocess.call(cmd) 140 retval = subprocess.call(cmd)
130 if retval: 141 if retval:
131 return retval 142 return retval
132 143
133 else: 144 else:
134 # Windows 145 # Windows
135 cmd = ['xcopy', '/S', '/I', '/Y', self.from_dir, self.archive_path] 146 cmd = ['xcopy', '/S', '/I', '/Y', self.from_dir, self.archive_path]
136 print 'Running: ' + ' '.join(cmd) 147 print 'Running: ' + ' '.join(cmd)
137 retval = subprocess.call(cmd) 148 retval = subprocess.call(cmd)
138 if retval: 149 if retval:
139 return retval 150 return retval
140 151
141 152
142 def Main(): 153 def Main():
143 """Main routine.""" 154 """Main routine."""
144 option_parser = optparse.OptionParser() 155 option_parser = optparse.OptionParser()
145 option_parser.add_option('--target', 156 option_parser.add_option('--target',
146 default='Debug', 157 default='Debug',
147 help='build target (Debug, Release) ' 158 help='build target (Debug, Release) '
148 '[default: %default]') 159 '[default: %default]')
149 option_parser.add_option('--build-dir', 160 option_parser.add_option('--build-dir',
150 default='chrome', 161 default='chrome',
151 metavar='DIR', 162 metavar='DIR',
152 help='directory in which build was run ' 163 help='directory in which build was run '
153 '[default: %default]') 164 '[default: %default]')
154 option_parser.add_option('--perf-subdir', 165 option_parser.add_option('--perf-subdir',
155 metavar='DIR', 166 metavar='DIR',
156 help='destination subdirectory under' 167 help='destination subdirectory under'
157 'coverage') 168 'coverage')
158 option_parser.add_option('--build-number', 169 option_parser.add_option('--build-number',
159 help='destination subdirectory under perf-subdir') 170 help='destination subdirectory under perf-subdir')
160 option_parser.add_option('--internal', action='store_true', 171 option_parser.add_option('--internal', action='store_true',
161 help='specifies if we should use Internal config') 172 help='specifies if we should use Internal config')
162 options, args = option_parser.parse_args() 173 options, args = option_parser.parse_args()
163 if args: 174 if args:
164 option_parser.error('Args not supported: %s' % args) 175 option_parser.error('Args not supported: %s' % args)
165 ac = ArchiveCoverage(options) 176 ac = ArchiveCoverage(options, 'total_coverage')
166 sys.exit(ac.Run()) 177 ac.Run()
178
John Grabowski 2012/10/30 21:34:02 remove blank line need to sys.exit(ac.run()) and
pshenoy 2012/11/05 18:47:22 Main() is called as sys.exit(Main())
179 auc = ArchiveCoverage(options, 'unittests_coverage')
180 auc.Run()
167 181
168 182
169 if '__main__' == __name__: 183 if '__main__' == __name__:
170 Main() 184 Main()
cmp 2012/11/01 23:46:22 let's put the sys.exit here: sys.exit(Main()) an
pshenoy 2012/11/05 18:47:22 Done.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698