Bug 1407465 - Make most _MANIFESTS variables use SourcePaths. r?chmanchester
--- a/python/mozbuild/mozbuild/frontend/context.py
+++ b/python/mozbuild/mozbuild/frontend/context.py
@@ -547,19 +547,19 @@ class AbsolutePath(Path):
@memoize
def ContextDerivedTypedList(klass, base_class=List):
"""Specialized TypedList for use with ContextDerivedValue types.
"""
assert issubclass(klass, ContextDerivedValue)
class _TypedList(ContextDerivedValue, TypedList(klass, base_class)):
- def __init__(self, context, iterable=[]):
+ def __init__(self, context, iterable=[], **kwargs):
self.context = context
- super(_TypedList, self).__init__(iterable)
+ super(_TypedList, self).__init__(iterable, **kwargs)
def normalize(self, e):
if not isinstance(e, klass):
e = klass(self.context, e)
return e
return _TypedList
@@ -673,30 +673,30 @@ def ContextDerivedTypedHierarchicalStrin
child = self._children.get(name)
if not child:
child = self._children[name] = _TypedListWithItems(
self._context)
return child
return _TypedListWithItems
-def OrderedListWithAction(action):
+def OrderedPathListWithAction(action):
"""Returns a class which behaves as a StrictOrderingOnAppendList, but
invokes the given callable with each input and a context as it is
read, storing a tuple including the result and the original item.
This used to extend moz.build reading to make more data available in
filesystem-reading mode.
"""
- class _OrderedListWithAction(ContextDerivedValue,
- StrictOrderingOnAppendListWithAction):
+ class _OrderedListWithAction(ContextDerivedTypedList(SourcePath,
+ StrictOrderingOnAppendListWithAction)):
def __init__(self, context, *args):
def _action(item):
return item, action(context, item)
- super(_OrderedListWithAction, self).__init__(action=_action, *args)
+ super(_OrderedListWithAction, self).__init__(context, action=_action, *args)
return _OrderedListWithAction
def TypedListWithAction(typ, action):
"""Returns a class which behaves as a TypedList with the provided type, but
invokes the given given callable with each input and a context as it is
read, storing a tuple including the result and the original item.
@@ -708,18 +708,18 @@ def TypedListWithAction(typ, action):
def _action(item):
return item, action(context, item)
super(_TypedListWithAction, self).__init__(action=_action, *args)
return _TypedListWithAction
WebPlatformTestManifest = TypedNamedTuple("WebPlatformTestManifest",
[("manifest_path", unicode),
("test_root", unicode)])
-ManifestparserManifestList = OrderedListWithAction(read_manifestparser_manifest)
-ReftestManifestList = OrderedListWithAction(read_reftest_manifest)
+ManifestparserManifestList = OrderedPathListWithAction(read_manifestparser_manifest)
+ReftestManifestList = OrderedPathListWithAction(read_reftest_manifest)
WptManifestList = TypedListWithAction(WebPlatformTestManifest, read_wpt_manifest)
OrderedSourceList = ContextDerivedTypedList(SourcePath, StrictOrderingOnAppendList)
OrderedTestFlavorList = TypedList(Enum(*all_test_flavors()),
StrictOrderingOnAppendList)
OrderedStringList = TypedList(unicode, StrictOrderingOnAppendList)
DependentTestsEntry = ContextDerivedTypedRecord(('files', OrderedSourceList),
('tags', OrderedStringList),
--- a/python/mozbuild/mozbuild/frontend/emitter.py
+++ b/python/mozbuild/mozbuild/frontend/emitter.py
@@ -1270,17 +1270,17 @@ class TreeMetadataEmitter(LoggingMixin):
for flavor in WEB_PLATFORM_TESTS_FLAVORS:
for path, manifest in context.get("%s_MANIFESTS" % flavor.upper().replace('-', '_'), []):
for obj in self._process_web_platform_tests_manifest(context, path, manifest):
yield obj
def _process_test_manifest(self, context, info, manifest_path, mpmanifest):
flavor, install_root, install_subdir, package_tests = info
- path = mozpath.normpath(mozpath.join(context.srcdir, manifest_path))
+ path = manifest_path.full_path
manifest_dir = mozpath.dirname(path)
manifest_reldir = mozpath.dirname(mozpath.relpath(path,
context.config.topsrcdir))
manifest_sources = [mozpath.relpath(pth, context.config.topsrcdir)
for pth in mpmanifest.source_files]
install_prefix = mozpath.join(install_root, install_subdir)
try:
@@ -1370,18 +1370,17 @@ class TreeMetadataEmitter(LoggingMixin):
yield obj
except (AssertionError, Exception):
raise SandboxValidationError('Error processing test '
'manifest file %s: %s' % (path,
'\n'.join(traceback.format_exception(*sys.exc_info()))),
context)
def _process_reftest_manifest(self, context, flavor, manifest_path, manifest):
- manifest_full_path = mozpath.normpath(mozpath.join(
- context.srcdir, manifest_path))
+ manifest_full_path = manifest_path.full_path
manifest_reldir = mozpath.dirname(mozpath.relpath(manifest_full_path,
context.config.topsrcdir))
# reftest manifests don't come from manifest parser. But they are
# similar enough that we can use the same emitted objects. Note
# that we don't perform any installs for reftests.
obj = TestManifest(context, manifest_full_path, manifest,
flavor=flavor, install_prefix='%s/' % flavor,
--- a/python/mozbuild/mozbuild/testing.py
+++ b/python/mozbuild/mozbuild/testing.py
@@ -504,25 +504,25 @@ def install_test_files(topsrcdir, topobj
copier = FileCopier()
manifest.populate_registry(copier)
copier.copy(objdir_dest,
remove_unaccounted=False)
# Convenience methods for test manifest reading.
def read_manifestparser_manifest(context, manifest_path):
- path = mozpath.normpath(mozpath.join(context.srcdir, manifest_path))
+ path = manifest_path.full_path
return manifestparser.TestManifest(manifests=[path], strict=True,
rootdir=context.config.topsrcdir,
finder=context._finder,
handle_defaults=False)
def read_reftest_manifest(context, manifest_path):
import reftest
- path = mozpath.normpath(mozpath.join(context.srcdir, manifest_path))
+ path = manifest_path.full_path
manifest = reftest.ReftestManifest(finder=context._finder)
manifest.load(path)
return manifest
def read_wpt_manifest(context, paths):
manifest_path, tests_root = paths
full_path = mozpath.normpath(mozpath.join(context.srcdir, manifest_path))
old_path = sys.path[:]