Bug 1416008 - Support packaging code coverage files and running grcov on Windows. r=jmaher

--HG--
extra : rebase_source : 80f6f51cbff0e35933563f3b1b2467041c571b8e
This commit is contained in:
Marco Castelluccio 2017-11-10 15:39:32 +01:00
Родитель f1dd512910
Коммит 0c39f198ab
1 изменённых файлов: 31 добавлений и 21 удалений

Просмотреть файл

@ -53,7 +53,7 @@ class CodeCoverageMixin(object):
return True
# XXX workaround because bug 1110465 is hard
return self.buildbot_config['properties']['stage_platform'] in ('linux64-ccov',)
return 'ccov' in self.buildbot_config['properties']['stage_platform']
except (AttributeError, KeyError, TypeError):
return False
@ -73,7 +73,7 @@ class CodeCoverageMixin(object):
return True
# XXX workaround because bug 1110465 is hard
return self.buildbot_config['properties']['stage_platform'] in ('linux64-jsdcov',)
return 'jsdcov' in self.buildbot_config['properties']['stage_platform']
except (AttributeError, KeyError, TypeError):
return False
@ -138,6 +138,7 @@ class CodeCoverageMixin(object):
if not self.code_coverage_enabled:
return
del os.environ['GCOV_PREFIX']
del os.environ['JS_CODE_COVERAGE_OUTPUT_DIR']
@ -152,50 +153,59 @@ class CodeCoverageMixin(object):
if any(d in dirs for d in canary_dirs):
rel_topsrcdir = root
break
else:
if rel_topsrcdir is None:
# Unable to upload code coverage files. Since this is the whole
# point of code coverage, making this fatal.
self.fatal("Could not find relative topsrcdir in code coverage "
"data!")
self.fatal("Could not find relative topsrcdir in code coverage data!")
dirs = self.query_abs_dirs()
# Package GCOV coverage data.
dirs = self.query_abs_dirs()
file_path_gcda = os.path.join(
dirs['abs_blob_upload_dir'], 'code-coverage-gcda.zip')
command = ['zip', '-r', file_path_gcda, '.']
self.run_command(command, cwd=rel_topsrcdir)
file_path_gcda = os.path.join(dirs['abs_blob_upload_dir'], 'code-coverage-gcda.zip')
self.run_command(['zip', '-r', file_path_gcda, '.'], cwd=rel_topsrcdir)
# Package JSVM coverage data.
dirs = self.query_abs_dirs()
file_path_jsvm = os.path.join(
dirs['abs_blob_upload_dir'], 'code-coverage-jsvm.zip')
command = ['zip', '-r', file_path_jsvm, '.']
self.run_command(command, cwd=self.jsvm_dir)
file_path_jsvm = os.path.join(dirs['abs_blob_upload_dir'], 'code-coverage-jsvm.zip')
self.run_command(['zip', '-r', file_path_jsvm, '.'], cwd=self.jsvm_dir)
# GRCOV post-processing
# Download the gcno fom the build machine.
self.download_file(self.url_to_gcno, file_name=None, parent_dir=self.grcov_dir)
if mozinfo.os == 'linux':
prefix = '/builds/worker/workspace/build/src/'
elif mozinfo.os == 'win':
prefix = 'z:/build/build/src/'
# Run grcov on the zipped .gcno and .gcda files.
grcov_command = [
os.path.join(self.grcov_dir, 'grcov'),
'-t', 'lcov',
'-p', '/builds/worker/workspace/build/src/',
'-p', prefix,
'--ignore-dir', 'gcc',
os.path.join(self.grcov_dir, 'target.code-coverage-gcno.zip'), file_path_gcda
]
# 'grcov_output' will be a tuple, the first variable is the path to the lcov output,
# the other is the path to the standard error output.
grcov_output = self.get_output_from_command(grcov_command, cwd=self.grcov_dir, \
silent=True, tmpfile_base_path=os.path.join(self.grcov_dir, 'grcov_lcov_output'), \
save_tmpfiles=True, return_type='files')
grcov_output = self.get_output_from_command(
grcov_command,
cwd=self.grcov_dir,
silent=True,
tmpfile_base_path=os.path.join(self.grcov_dir, 'grcov_lcov_output'),
save_tmpfiles=True,
return_type='files'
)
new_output_name = grcov_output[0] + '.info'
os.rename(grcov_output[0], new_output_name)
# Zip the grcov output and upload it.
command = ['zip', os.path.join(dirs['abs_blob_upload_dir'], 'code-coverage-grcov.zip'), new_output_name]
self.run_command(command, cwd=self.grcov_dir)
self.run_command(
['zip', os.path.join(dirs['abs_blob_upload_dir'], 'code-coverage-grcov.zip'), new_output_name],
cwd=self.grcov_dir
)
shutil.rmtree(self.gcov_dir)
shutil.rmtree(self.jsvm_dir)
shutil.rmtree(self.grcov_dir)