зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1416008 - Support packaging code coverage files and running grcov on Windows. r=jmaher
--HG-- extra : rebase_source : 80f6f51cbff0e35933563f3b1b2467041c571b8e
This commit is contained in:
Родитель
f1dd512910
Коммит
0c39f198ab
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче