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:30:51 -0800
changeset 460325 e79dd299628806750827f8fc6ac115b117bc8691
parent 460324 98b912ebca4e31953d2deb30b19d9934be62c2f4
child 468166 f92af33f45dcf96b847237ad2f4d9af1dc214b8b
push id41371
push userbmo:cmanchester@mozilla.com
push dateThu, 12 Jan 2017 23:31:11 +0000
Bug 1330421 - Update artifact code to populate generated test support files from the tests archive. This updates the client artifact code to locate test support files in the common test archive and populate the objdir with these files appropriately. MozReview-Commit-ID: GuXjwUtsl
--- 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.
+# For an artifact build, _tests will already be partly populated, so run
+# this install manifest with NO_REMOVE set in this case.
+install-_tests: NO_REMOVE=1
 .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 $*)))
--- 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 (
 import mozinstall
 from mozpack.files import (
@@ -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(
     def process_symbols_archive(self, filename, processed_filename):
         with JarWriter(file=processed_filename, optimize=False, compress_level=5) as writer: