Bug 1330421 - Update artifact code to populate generated test support files from the tests archive. draft
authorChris Manchester <cmanchester@mozilla.com>
Thu, 12 Jan 2017 15:19:41 -0800
changeset 460309 69be2c2924ae863dc7965654328409ac1441bdf2
parent 460308 76c54117a78a6f5e5122476fab010192eb2e3457
child 542030 b9165e10269d62f73b5a1060d26da7c0a3d517d8
push id41369
push userbmo:cmanchester@mozilla.com
push dateThu, 12 Jan 2017 23:20:01 +0000
bugs1330421
milestone53.0a1
Bug 1330421 - Update artifact code to populate generated test support files from the tests archive. MozReview-Commit-ID: GuXjwUtsl
Makefile.in
python/mozbuild/mozbuild/artifacts.py
--- a/Makefile.in
+++ b/Makefile.in
@@ -185,16 +185,22 @@ tup:
 # js as standalone because automated builds are building nspr separately and
 # that would remove the resulting files.
 # Eventually, a standalone js build would just be able to build nspr itself,
 # removing the need for the former.
 ifdef JS_STANDALONE
 NO_REMOVE=1
 endif
 
+# For an artifact build, _tests will already be partly populated, so run
+# this install manifest with NO_REMOVE set in this case.
+ifdef MOZ_ARTIFACT_BUILDS
+install-_tests: NO_REMOVE=1
+endif
+
 .PHONY: $(addprefix install-,$(subst /,_,$(install_manifests)))
 $(addprefix install-,$(install_manifests)): install-%: $(install_manifest_depends)
 ifneq (,$(filter FasterMake+RecursiveMake,$(BUILD_BACKENDS)))
 	@# If we're using the hybrid FasterMake/RecursiveMake backend, we want
 	@# to ensure the FasterMake end doesn't have install manifests for the
 	@# same directory, because that would blow up
 	$(if $(wildcard _build_manifests/install/$(subst /,_,$*)),$(if $(wildcard faster/install_$(subst /,_,$*)*),$(error FasterMake and RecursiveMake ends of the hybrid build system want to handle $*)))
 endif
--- a/python/mozbuild/mozbuild/artifacts.py
+++ b/python/mozbuild/mozbuild/artifacts.py
@@ -58,16 +58,17 @@ import subprocess
 import tarfile
 import tempfile
 import urlparse
 import zipfile
 
 import pylru
 import taskcluster
 
+from mozbuild.action.test_archive import OBJDIR_TEST_FILES
 from mozbuild.util import (
     ensureParentDir,
     FileAvoidWrite,
 )
 import mozinstall
 from mozpack.files import (
     JarFinder,
     TarFinder,
@@ -190,16 +191,27 @@ class ArtifactJob(object):
                     destpath = mozpath.relpath(filename, src_prefix)
                     destpath = mozpath.join(dest_prefix, destpath)
                     self.log(logging.INFO, 'artifact',
                              {'destpath': destpath},
                              'Adding {destpath} to processed archive')
                     mode = entry['external_attr'] >> 16
                     writer.add(destpath.encode('utf-8'), reader[filename], mode=mode)
                     added_entry = True
+                for files_entry in OBJDIR_TEST_FILES.values():
+                    origin_pattern = files_entry['pattern']
+                    leaf_filename = filename
+                    if 'dest' in files_entry:
+                        dest = files_entry['dest']
+                        origin_pattern = mozpath.join(dest, origin_pattern)
+                        leaf_filename = filename[len(dest) + 1:]
+                    if mozpath.match(filename, origin_pattern):
+                        destpath = mozpath.join('..', files_entry['base'], leaf_filename)
+                        mode = entry['external_attr'] >> 16
+                        writer.add(destpath.encode('utf-8'), reader[filename], mode=mode)
 
         if not added_entry:
             raise ValueError('Archive format changed! No pattern from "{patterns}"'
                              'matched an archive path.'.format(
                                  patterns=LinuxArtifactJob.test_artifact_patterns))
 
     def process_symbols_archive(self, filename, processed_filename):
         with JarWriter(file=processed_filename, optimize=False, compress_level=5) as writer: