Browse Source

python fluff

Frank-Rainer Grahl 4 months ago
parent
commit
d25ef819b0

+ 76 - 0
frg/work-js/mozilla-release/patches/1428716-1-71a1.patch

@@ -0,0 +1,76 @@
+# HG changeset patch
+# User championshuttler <shivams2799@gmail.com>
+# Date 1569613605 0
+# Node ID 2ac45586caa93605f5f62297aeb0c48417144570
+# Parent  a5900dd780b10a85e1c4a05a26399d45c61f8f2f
+Bug 1428716 - Bump mozsystemmonitor to v1.0.0 and add classifiers. r=ahal
+
+Differential Revision: https://phabricator.services.mozilla.com/D47203
+
+diff --git a/testing/mozbase/mozsystemmonitor/setup.py b/testing/mozbase/mozsystemmonitor/setup.py
+--- a/testing/mozbase/mozsystemmonitor/setup.py
++++ b/testing/mozbase/mozsystemmonitor/setup.py
+@@ -3,28 +3,31 @@
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ from __future__ import absolute_import
+ 
+ import os
+ 
+ from setuptools import setup
+ 
+-PACKAGE_VERSION = '0.4'
++PACKAGE_VERSION = '1.0.0'
+ 
+ try:
+     pwd = os.path.dirname(os.path.abspath(__file__))
+     description = open(os.path.join(pwd, 'README.rst')).read()
+ except Exception:
+     description = ''
+ 
+ setup(
+     name='mozsystemmonitor',
+     description='Monitor system resource usage.',
+     long_description="see https://firefox-source-docs.mozilla.org/mozbase/index.html",
++    classifiers=['Programming Language :: Python :: 2.7',
++                 'Programming Language :: Python :: 3.5'],
++    # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+     license='MPL 2.0',
+     keywords='mozilla',
+     author='Mozilla Automation and Tools Team',
+     author_email='tools@lists.mozilla.org',
+     url='https://wiki.mozilla.org/Auto-tools/Projects/Mozbase',
+     packages=['mozsystemmonitor'],
+     version=PACKAGE_VERSION,
+     install_requires=['psutil >= 3.1.1'],
+diff --git a/testing/mozbase/mozsystemmonitor/tests/manifest.ini b/testing/mozbase/mozsystemmonitor/tests/manifest.ini
+--- a/testing/mozbase/mozsystemmonitor/tests/manifest.ini
++++ b/testing/mozbase/mozsystemmonitor/tests/manifest.ini
+@@ -1,4 +1,3 @@
+ [DEFAULT]
+ subsuite = mozbase
+-skip-if = python == 3
+ [test_resource_monitor.py]
+diff --git a/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py b/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
+--- a/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
++++ b/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
+@@ -56,17 +56,17 @@ class TestResourceMonitor(unittest.TestC
+             time.sleep(1)
+ 
+             with monitor.phase('phase2'):
+                 time.sleep(1)
+ 
+         monitor.stop()
+ 
+         self.assertEqual(len(monitor.phases), 2)
+-        self.assertEqual(['phase2', 'phase1'], monitor.phases.keys())
++        self.assertEqual(['phase2', 'phase1'], list(monitor.phases.keys()))
+ 
+         all = list(monitor.range_usage())
+         data1 = list(monitor.phase_usage('phase1'))
+         data2 = list(monitor.phase_usage('phase2'))
+ 
+         self.assertGreater(len(all), len(data1))
+         self.assertGreater(len(data1), len(data2))
+ 
+

+ 17 - 0
frg/work-js/mozilla-release/patches/1428716-2-71a1.patch

@@ -0,0 +1,17 @@
+# HG changeset patch
+# User championshuttler <shivams2799@gmail.com>
+# Date 1569612652 0
+# Node ID 5e548ced2bc430c2e96091df21b8c1c5f6e1c41e
+# Parent  2ac45586caa93605f5f62297aeb0c48417144570
+Bug 1428716 - Create setup.cfg for universal wheels in mozsystemmonitor. r=ahal
+
+Differential Revision: https://phabricator.services.mozilla.com/D47204
+
+diff --git a/testing/mozbase/mozsystemmonitor/setup.cfg b/testing/mozbase/mozsystemmonitor/setup.cfg
+new file mode 100644
+--- /dev/null
++++ b/testing/mozbase/mozsystemmonitor/setup.cfg
+@@ -0,0 +1,2 @@
++[bdist_wheel]
++universal=1
+

+ 265 - 0
frg/work-js/mozilla-release/patches/1436037-2no1-65a1.patch

@@ -0,0 +1,265 @@
+# HG changeset patch
+# User Andrew Halberstadt <ahalberstadt@mozilla.com>
+# Date 1544037616 0
+# Node ID c88d2cb951ca8b2622ed90f921194902bd4bb712
+# Parent  7bade3bec8b8dca02664588339d20c5f142ea7ab
+Bug 1436037 - [python] Create Windows python-test tasks, r=gps
+
+The following python-test paths are being moved out of 'make check' and into their own task:
+- python/mozlint
+- testing/mozbase
+- tools/lint
+
+The following python-test paths previously did not run on Windows:
+- python/mozterm
+- testing/marionette
+- testing/raptor
+- tools/tryselect
+
+Differential Revision: https://phabricator.services.mozilla.com/D10759
+
+diff --git a/python/mozlint/test/python.ini b/python/mozlint/test/python.ini
+--- a/python/mozlint/test/python.ini
++++ b/python/mozlint/test/python.ini
+@@ -1,10 +1,10 @@
+ [DEFAULT]
+-subsuite = mozlint, os == "linux"
++subsuite = mozlint
+ skip-if = python == 2
+ 
+ [test_cli.py]
+ [test_editor.py]
+ [test_formatters.py]
+ [test_parser.py]
+ [test_pathutils.py]
+ [test_result.py]
+diff --git a/testing/marionette/harness/marionette_harness/tests/harness_unit/test_marionette_runner.py b/testing/marionette/harness/marionette_harness/tests/harness_unit/test_marionette_runner.py
+--- a/testing/marionette/harness/marionette_harness/tests/harness_unit/test_marionette_runner.py
++++ b/testing/marionette/harness/marionette_harness/tests/harness_unit/test_marionette_runner.py
+@@ -1,14 +1,16 @@
+ # This Source Code Form is subject to the terms of the Mozilla Public
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ from __future__ import absolute_import
+ 
++import os
++
+ import manifestparser
+ import mozunit
+ import pytest
+ 
+ from mock import Mock, patch, mock_open, sentinel, DEFAULT
+ 
+ from marionette_harness.runtests import MarionetteTestRunner
+ 
+@@ -291,17 +293,17 @@ def test_add_test_directory(runner):
+     tests = list(dir_contents[0][2] + dir_contents[1][2])
+     assert len(runner.tests) == 0
+     # Need to use side effect to make isdir return True for test_dir and False for tests
+     with patch('os.path.isdir', side_effect=[True] + [False for t in tests]) as isdir:
+         with patch('os.walk', return_value=dir_contents) as walk:
+             runner.add_test(test_dir)
+     assert isdir.called and walk.called
+     for test in runner.tests:
+-        assert test_dir in test['filepath']
++        assert os.path.normpath(test_dir) in test['filepath']
+     assert len(runner.tests) == 2
+ 
+ 
+ @pytest.mark.parametrize("test_files_exist", [True, False])
+ def test_add_test_manifest(mock_runner, manifest_with_tests, monkeypatch, test_files_exist):
+     monkeypatch.setattr('marionette_harness.runner.base.TestManifest',
+                         manifest_with_tests.manifest_class)
+     mock_runner.marionette = mock_runner.driverclass()
+diff --git a/testing/mozbase/manifestparser/tests/manifest.ini b/testing/mozbase/manifestparser/tests/manifest.ini
+--- a/testing/mozbase/manifestparser/tests/manifest.ini
++++ b/testing/mozbase/manifestparser/tests/manifest.ini
+@@ -1,10 +1,10 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ skip-if = python == 3
+ [test_expressionparser.py]
+ [test_manifestparser.py]
+ [test_testmanifest.py]
+ [test_read_ini.py]
+ [test_convert_directory.py]
+ [test_filters.py]
+ [test_chunking.py]
+diff --git a/testing/mozbase/mozcrash/tests/manifest.ini b/testing/mozbase/mozcrash/tests/manifest.ini
+--- a/testing/mozbase/mozcrash/tests/manifest.ini
++++ b/testing/mozbase/mozcrash/tests/manifest.ini
+@@ -1,7 +1,7 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [test_basic.py]
+ [test_java_exception.py]
+ [test_save_path.py]
+ [test_stackwalk.py]
+ [test_symbols_path.py]
+diff --git a/testing/mozbase/mozdebug/tests/manifest.ini b/testing/mozbase/mozdebug/tests/manifest.ini
+--- a/testing/mozbase/mozdebug/tests/manifest.ini
++++ b/testing/mozbase/mozdebug/tests/manifest.ini
+@@ -1,4 +1,4 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ skip-if = python == 3
+ [test.py]
+diff --git a/testing/mozbase/mozfile/tests/manifest.ini b/testing/mozbase/mozfile/tests/manifest.ini
+--- a/testing/mozbase/mozfile/tests/manifest.ini
++++ b/testing/mozbase/mozfile/tests/manifest.ini
+@@ -1,10 +1,10 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [test_extract.py]
+ [test_load.py]
+ [test_move_remove.py]
+ [test_tempdir.py]
+ [test_tempfile.py]
+ [test_tree.py]
+ [test_url.py]
+ [test_which.py]
+diff --git a/testing/mozbase/mozhttpd/tests/manifest.ini b/testing/mozbase/mozhttpd/tests/manifest.ini
+--- a/testing/mozbase/mozhttpd/tests/manifest.ini
++++ b/testing/mozbase/mozhttpd/tests/manifest.ini
+@@ -1,10 +1,10 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [api.py]
+ skip-if = python == 3
+ [baseurl.py]
+ [basic.py]
+ [filelisting.py]
+ skip-if = python == 3
+ [paths.py]
+ [requestlog.py]
+diff --git a/testing/mozbase/mozinfo/tests/manifest.ini b/testing/mozbase/mozinfo/tests/manifest.ini
+--- a/testing/mozbase/mozinfo/tests/manifest.ini
++++ b/testing/mozbase/mozinfo/tests/manifest.ini
+@@ -1,3 +1,3 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [test.py]
+diff --git a/testing/mozbase/mozinstall/tests/manifest.ini b/testing/mozbase/mozinstall/tests/manifest.ini
+--- a/testing/mozbase/mozinstall/tests/manifest.ini
++++ b/testing/mozbase/mozinstall/tests/manifest.ini
+@@ -1,4 +1,4 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ skip-if = python == 3
+ [test.py]
+diff --git a/testing/mozbase/mozlog/tests/manifest.ini b/testing/mozbase/mozlog/tests/manifest.ini
+--- a/testing/mozbase/mozlog/tests/manifest.ini
++++ b/testing/mozbase/mozlog/tests/manifest.ini
+@@ -1,7 +1,7 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [test_logger.py]
+ [test_logtypes.py]
+ [test_formatters.py]
+ [test_structured.py]
+ [test_capture.py]
+\ No newline at end of file
+diff --git a/testing/mozbase/moznetwork/tests/manifest.ini b/testing/mozbase/moznetwork/tests/manifest.ini
+--- a/testing/mozbase/moznetwork/tests/manifest.ini
++++ b/testing/mozbase/moznetwork/tests/manifest.ini
+@@ -1,4 +1,4 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ skip-if = python == 3
+ [test.py]
+diff --git a/testing/mozbase/mozprocess/tests/manifest.ini b/testing/mozbase/mozprocess/tests/manifest.ini
+--- a/testing/mozbase/mozprocess/tests/manifest.ini
++++ b/testing/mozbase/mozprocess/tests/manifest.ini
+@@ -1,9 +1,9 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [test_kill.py]
+ [test_misc.py]
+ [test_poll.py]
+ [test_wait.py]
+ [test_output.py]
+ [test_params.py]
+ [test_process_reader.py]
+diff --git a/testing/mozbase/mozprofile/tests/manifest.ini b/testing/mozbase/mozprofile/tests/manifest.ini
+--- a/testing/mozbase/mozprofile/tests/manifest.ini
++++ b/testing/mozbase/mozprofile/tests/manifest.ini
+@@ -1,10 +1,10 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [test_addonid.py]
+ [test_server_locations.py]
+ [test_preferences.py]
+ [test_permissions.py]
+ [test_bug758250.py]
+ [test_nonce.py]
+ [test_clone_cleanup.py]
+ [test_profile.py]
+diff --git a/testing/mozbase/mozrunner/tests/manifest.ini b/testing/mozbase/mozrunner/tests/manifest.ini
+--- a/testing/mozbase/mozrunner/tests/manifest.ini
++++ b/testing/mozbase/mozrunner/tests/manifest.ini
+@@ -1,9 +1,9 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [test_crash.py]
+ [test_interactive.py]
+ [test_start.py]
+ [test_states.py]
+ [test_stop.py]
+ [test_threads.py]
+ [test_wait.py]
+diff --git a/testing/mozbase/mozsystemmonitor/tests/manifest.ini b/testing/mozbase/mozsystemmonitor/tests/manifest.ini
+--- a/testing/mozbase/mozsystemmonitor/tests/manifest.ini
++++ b/testing/mozbase/mozsystemmonitor/tests/manifest.ini
+@@ -1,3 +1,3 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ [test_resource_monitor.py]
+diff --git a/testing/mozbase/moztest/tests/manifest.ini b/testing/mozbase/moztest/tests/manifest.ini
+--- a/testing/mozbase/moztest/tests/manifest.ini
++++ b/testing/mozbase/moztest/tests/manifest.ini
+@@ -1,5 +1,5 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ skip-if = python == 3
+ [test.py]
+ [test_resolve.py]
+diff --git a/testing/mozbase/mozversion/tests/manifest.ini b/testing/mozbase/mozversion/tests/manifest.ini
+--- a/testing/mozbase/mozversion/tests/manifest.ini
++++ b/testing/mozbase/mozversion/tests/manifest.ini
+@@ -1,5 +1,5 @@
+ [DEFAULT]
+-subsuite = mozbase, os == "linux"
++subsuite = mozbase
+ 
+ [test_binary.py]
+ [test_apk.py]
+diff --git a/tools/lint/test/python.ini b/tools/lint/test/python.ini
+--- a/tools/lint/test/python.ini
++++ b/tools/lint/test/python.ini
+@@ -1,10 +1,10 @@
+ [DEFAULT]
+-subsuite=mozlint, os == "linux"
++subsuite = mozlint
+ skip-if = python == 2
+ 
+ [test_eslint.py]
+ skip-if = os == "win"  # node not installed on worker
+ [test_flake8.py]
+ requirements = tools/lint/python/flake8_requirements.txt
+ [test_pylint.py]
+ skip-if = os == "win" || os == "mac"  # only installed on linux

+ 71 - 0
frg/work-js/mozilla-release/patches/1471916-68a1.patch

@@ -0,0 +1,71 @@
+# HG changeset patch
+# User Nikki S <nikkisharpley@gmail.com>
+# Date 1553521778 0
+# Node ID ac9b05fb0fdf1133e1093358d021c433143b44dd
+# Parent  85e59768dda3f2342158df4dfaea41721378ef91
+[mozsystemmonitor] Add test manifest to testing/mozbase/moz.build (bug 1471916) r=davehunt
+
+Currently, tests in mozsystemmonitor are skipped because the manifest is missing
+from mozbase/moz.build. This has now been added.
+
+For the moment, this patch also skips the test if run against Python 3. This is
+not ideal - a better fix may be setting the unittest.skipIf condition to skip
+if the there is simply a failure when run with Python 3.
+
+Differential Revision: https://phabricator.services.mozilla.com/D22426
+
+diff --git a/testing/mozbase/moz.build b/testing/mozbase/moz.build
+--- a/testing/mozbase/moz.build
++++ b/testing/mozbase/moz.build
+@@ -12,16 +12,17 @@ PYTHON_UNITTEST_MANIFESTS += [
+     'mozhttpd/tests/manifest.ini',
+     'mozinfo/tests/manifest.ini',
+     'mozinstall/tests/manifest.ini',
+     'mozlog/tests/manifest.ini',
+     'moznetwork/tests/manifest.ini',
+     'mozprocess/tests/manifest.ini',
+     'mozprofile/tests/manifest.ini',
+     'mozrunner/tests/manifest.ini',
++    'mozsystemmonitor/tests/manifest.ini',
+     'moztest/tests/manifest.ini',
+     'mozversion/tests/manifest.ini',
+ ]
+ 
+ python_modules = [
+     'manifestparser',
+     'mozcrash',
+     'mozdebug',
+diff --git a/testing/mozbase/mozsystemmonitor/tests/manifest.ini b/testing/mozbase/mozsystemmonitor/tests/manifest.ini
+--- a/testing/mozbase/mozsystemmonitor/tests/manifest.ini
++++ b/testing/mozbase/mozsystemmonitor/tests/manifest.ini
+@@ -1,3 +1,4 @@
+ [DEFAULT]
+ subsuite = mozbase
++skip-if = python == 3
+ [test_resource_monitor.py]
+diff --git a/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py.1471916.later b/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py.1471916.later
+new file mode 100644
+--- /dev/null
++++ b/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py.1471916.later
+@@ -0,0 +1,21 @@
++--- test_resource_monitor.py
+++++ test_resource_monitor.py
++@@ -145,17 +145,17 @@ class TestResourceMonitor(unittest.TestC
++     def test_memory(self):
++         monitor = SystemResourceMonitor(poll_interval=0.25)
++ 
++         monitor.start()
++         time.sleep(1.0)
++         monitor.stop()
++ 
++         v = monitor.min_memory_available()
++-        self.assertIsInstance(v, long)
+++        self.assertIsInstance(v, (long, int))
++ 
++         v = monitor.max_memory_percent()
++         self.assertIsInstance(v, float)
++ 
++     def test_as_dict(self):
++         monitor = SystemResourceMonitor(poll_interval=0.25)
++ 
++         monitor.start()

+ 30 - 0
frg/work-js/mozilla-release/patches/1502358-65a1.patch

@@ -0,0 +1,30 @@
+# HG changeset patch
+# User Bob Clary <bclary@bclary.com>
+# Date 1540581961 25200
+# Node ID 859c3fd87f9371916f7f0e03ddb2260f21c6585b
+# Parent  19c3422995b8acfd33746ad7b2001d215865db4a
+Bug 1502358 - release mozsystemmonitor 0.4, r=ahal
+
+diff --git a/testing/mozbase/mozsystemmonitor/setup.py b/testing/mozbase/mozsystemmonitor/setup.py
+--- a/testing/mozbase/mozsystemmonitor/setup.py
++++ b/testing/mozbase/mozsystemmonitor/setup.py
+@@ -3,17 +3,17 @@
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ from __future__ import absolute_import
+ 
+ import os
+ 
+ from setuptools import setup
+ 
+-PACKAGE_VERSION = '0.3'
++PACKAGE_VERSION = '0.4'
+ 
+ try:
+     pwd = os.path.dirname(os.path.abspath(__file__))
+     description = open(os.path.join(pwd, 'README.rst')).read()
+ except Exception:
+     description = ''
+ 
+ setup(
+

+ 0 - 0
frg/work-js/mozilla-release/patches/1523143-67a1.patch → frg/work-js/mozilla-release/patches/1523143-1-67a1.patch


+ 44 - 0
frg/work-js/mozilla-release/patches/1523143-2-67a1.patch

@@ -0,0 +1,44 @@
+# HG changeset patch
+# User Mike Hommey <mh+mozilla@glandium.org>
+# Date 1548724516 0
+# Node ID d0c328ac350718d3fe180a0a60aa6c65a929b2a7
+# Parent  e1c6f99be2e529d7997e60e67b61ba9039cce568
+Bug 1523143 - Reject builds where the rust compiler host does not match the build host. r=chmanchester
+
+Depends on D17765
+
+Differential Revision: https://phabricator.services.mozilla.com/D17766
+
+diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure
+--- a/build/moz.configure/rust.configure
++++ b/build/moz.configure/rust.configure
+@@ -231,16 +231,28 @@ def rust_triple_alias(host_or_target):
+         return rustc_target.alias
+ 
+     return rust_target
+ 
+ 
+ rust_target_triple = rust_triple_alias(target)
+ rust_host_triple = rust_triple_alias(host)
+ 
++
++@depends(host, rust_host_triple, rustc_info.host)
++def validate_rust_host_triple(host, rust_host, rustc_host):
++    if rust_host != rustc_host:
++        if host.alias == rust_host:
++            configure_host = host_alias
++        else:
++            configure_host = '{}/{}'.format(host.alias, rust_host)
++        die("The rust compiler host ({}) is not suitable for the configure host ({})."
++            .format(rustc_host, configure_host))
++
++
+ set_config('RUST_TARGET', rust_target_triple)
+ set_config('RUST_HOST_TARGET', rust_host_triple)
+ 
+ 
+ @depends(rust_target_triple)
+ def rust_target_env_name(triple):
+     return triple.upper().replace('-', '_')
+ 
+

+ 54 - 0
frg/work-js/mozilla-release/patches/1523143-fix thisafterappyling-67a1.patch

@@ -0,0 +1,54 @@
+# HG changeset patch
+# User Frank-Rainer Grahl <frgrahl@gmx.net>
+# Parent  e6136321449c10b6ea9cb3cf2879c76faa0a7df8
+# Date 1548724516 0
+Bug 1523143 - temp patch goes awayn after shuffle in.
+
+diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure
+--- a/build/moz.configure/rust.configure
++++ b/build/moz.configure/rust.configure
+@@ -324,17 +324,17 @@ def rust_triple_alias(host_or_target):
+ rust_target_triple = rust_triple_alias(target)
+ rust_host_triple = rust_triple_alias(host)
+ 
+ 
+ @depends(host, rust_host_triple, rustc_info.host)
+ def validate_rust_host_triple(host, rust_host, rustc_host):
+     if rust_host != rustc_host:
+         if host.alias == rust_host:
+-            configure_host = host_alias
++            configure_host = host.alias
+         else:
+             configure_host = '{}/{}'.format(host.alias, rust_host)
+         die("The rust compiler host ({}) is not suitable for the configure host ({})."
+             .format(rustc_host, configure_host))
+ 
+ 
+ set_config('RUST_TARGET', rust_target_triple)
+ set_config('RUST_HOST_TARGET', rust_host_triple)
+diff --git a/build/moz.configure/rust.configure.1526062.later b/build/moz.configure/rust.configure.1526062.later
+deleted file mode 100644
+--- a/build/moz.configure/rust.configure.1526062.later
++++ /dev/null
+@@ -1,21 +0,0 @@
+---- rust.configure
+-+++ rust.configure
+-@@ -236,17 +236,17 @@ def rust_triple_alias(host_or_target):
+- rust_target_triple = rust_triple_alias(target)
+- rust_host_triple = rust_triple_alias(host)
+- 
+- 
+- @depends(host, rust_host_triple, rustc_info.host)
+- def validate_rust_host_triple(host, rust_host, rustc_host):
+-     if rust_host != rustc_host:
+-         if host.alias == rust_host:
+--            configure_host = host_alias
+-+            configure_host = host.alias
+-         else:
+-             configure_host = '{}/{}'.format(host.alias, rust_host)
+-         die("The rust compiler host ({}) is not suitable for the configure host ({})."
+-             .format(rustc_host, configure_host))
+- 
+- 
+- set_config('RUST_TARGET', rust_target_triple)
+- set_config('RUST_HOST_TARGET', rust_host_triple)

+ 35 - 0
frg/work-js/mozilla-release/patches/1558667-78a1.patch

@@ -0,0 +1,35 @@
+# HG changeset patch
+# User Geoff Brown <gbrown@mozilla.com>
+# Date 1590160134 0
+# Node ID 8267ea7dec5a433c8a8623a9119fa57212fd6897
+# Parent  8e32c73bbcbb47bc879efaba476797b4964aed7b
+Bug 1558667 - Try to make test_resource_monitor.py more robust; r=ahal
+
+This test has been failing, infrequently, mostly on osx/py2, for many months.
+Increasing the time interval between events appears to reduce failure frequency.
+
+Differential Revision: https://phabricator.services.mozilla.com/D76402
+
+diff --git a/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py b/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
+--- a/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
++++ b/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
+@@ -83,17 +83,17 @@ class TestResourceMonitor(unittest.TestC
+     def test_events(self):
+         monitor = SystemResourceMonitor(poll_interval=0.25)
+ 
+         monitor.start()
+         time.sleep(0.5)
+ 
+         t0 = time.time()
+         monitor.record_event('t0')
+-        time.sleep(0.5)
++        time.sleep(2)
+ 
+         monitor.record_event('t1')
+         time.sleep(0.5)
+         monitor.stop()
+ 
+         events = monitor.events
+         self.assertEqual(len(events), 2)
+ 
+

+ 686 - 0
frg/work-js/mozilla-release/patches/1654103-PARTIAL-mozsystemmonitor-84a1.patch

@@ -0,0 +1,686 @@
+# HG changeset patch
+# User Ricky Stewart <rstewart@mozilla.com>
+# Date 1603737293 0
+# Node ID 994ae8e4833c90447d91f0e26a718573cff5a514
+# Parent  40f5ebdbbd79fd9cb5c0e55081ac16e9e5ca9522
+Bug 1654103: Standardize on Black for Python code in `mozilla-central`.
+
+
+Allow-list all Python code in tree for use with the black linter, and re-format all code in-tree accordingly.
+
+To produce this patch I did all of the following:
+
+1. Make changes to tools/lint/black.yml to remove include: stanza and update list of source extensions.
+
+2. Run ./mach lint --linter black --fix
+
+3. Make some ad-hoc manual updates to python/mozbuild/mozbuild/test/configure/test_configure.py -- it has some hard-coded line numbers that the reformat breaks.
+
+4. Make some ad-hoc manual updates to `testing/marionette/client/setup.py`, `testing/marionette/harness/setup.py`, and `testing/firefox-ui/harness/setup.py`, which have hard-coded regexes that break after the reformat.
+
+5. Add a set of exclusions to black.yml. These will be deleted in a follow-up bug (1672023).
+
+# ignore-this-changeset
+
+Differential Revision: https://phabricator.services.mozilla.com/D94045
+
+diff --git a/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py b/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py
+--- a/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py
++++ b/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py
+@@ -12,27 +12,46 @@ import warnings
+ 
+ from collections import (
+     OrderedDict,
+     namedtuple,
+ )
+ 
+ 
+ class PsutilStub(object):
+-
+     def __init__(self):
+-        self.sswap = namedtuple('sswap', ['total', 'used', 'free', 'percent', 'sin',
+-                                          'sout'])
+-        self.sdiskio = namedtuple('sdiskio', ['read_count', 'write_count',
+-                                              'read_bytes', 'write_bytes',
+-                                              'read_time', 'write_time'])
+-        self.pcputimes = namedtuple('pcputimes', ['user', 'system'])
++        self.sswap = namedtuple(
++            "sswap", ["total", "used", "free", "percent", "sin", "sout"]
++        )
++        self.sdiskio = namedtuple(
++            "sdiskio",
++            [
++                "read_count",
++                "write_count",
++                "read_bytes",
++                "write_bytes",
++                "read_time",
++                "write_time",
++            ],
++        )
++        self.pcputimes = namedtuple("pcputimes", ["user", "system"])
+         self.svmem = namedtuple(
+-            'svmem', ['total', 'available', 'percent', 'used', 'free',
+-                      'active', 'inactive', 'buffers', 'cached'])
++            "svmem",
++            [
++                "total",
++                "available",
++                "percent",
++                "used",
++                "free",
++                "active",
++                "inactive",
++                "buffers",
++                "cached",
++            ],
++        )
+ 
+     def cpu_percent(self, a, b):
+         return [0]
+ 
+     def cpu_times(self, percpu):
+         if percpu:
+             return [self.pcputimes(0, 0)]
+         else:
+@@ -46,16 +65,17 @@ class PsutilStub(object):
+ 
+     def virtual_memory(self):
+         return self.svmem(0, 0, 0, 0, 0, 0, 0, 0, 0)
+ 
+ 
+ # psutil will raise NotImplementedError if the platform is not supported.
+ try:
+     import psutil
++
+     have_psutil = True
+ except Exception:
+     try:
+         # The PsutilStub should get us time intervals, at least
+         psutil = PsutilStub()
+     except Exception:
+         psutil = None
+ 
+@@ -108,18 +128,18 @@ def _collect(pipe, poll_interval):
+     # We should ideally use a monotonic clock. However, Python 2.7 doesn't
+     # make a monotonic clock available on all platforms. Python 3.3 does!
+     last_time = time.time()
+     io_last = get_disk_io_counters()
+     cpu_last = psutil.cpu_times(True)
+     swap_last = psutil.swap_memory()
+     psutil.cpu_percent(None, True)
+ 
+-    sin_index = swap_last._fields.index('sin')
+-    sout_index = swap_last._fields.index('sout')
++    sin_index = swap_last._fields.index("sin")
++    sout_index = swap_last._fields.index("sout")
+ 
+     sleep_interval = poll_interval
+ 
+     while not _poll(pipe, poll_interval=sleep_interval):
+         io = get_disk_io_counters()
+         cpu_times = psutil.cpu_times(True)
+         cpu_percent = psutil.cpu_percent(None, True)
+         virt_mem = psutil.virtual_memory()
+@@ -128,44 +148,53 @@ def _collect(pipe, poll_interval):
+ 
+         # TODO Does this wrap? At 32 bits? At 64 bits?
+         # TODO Consider patching "delta" API to upstream.
+         io_diff = [v - io_last[i] for i, v in enumerate(io)]
+         io_last = io
+ 
+         cpu_diff = []
+         for core, values in enumerate(cpu_times):
+-            cpu_diff.append([v - cpu_last[core][i] for i, v in
+-                             enumerate(values)])
++            cpu_diff.append([v - cpu_last[core][i] for i, v in enumerate(values)])
+ 
+         cpu_last = cpu_times
+ 
+         swap_entry = list(swap_mem)
+         swap_entry[sin_index] = swap_mem.sin - swap_last.sin
+         swap_entry[sout_index] = swap_mem.sout - swap_last.sout
+         swap_last = swap_mem
+ 
+-        data.append((last_time, measured_end_time, io_diff, cpu_diff,
+-                     cpu_percent, list(virt_mem), swap_entry))
++        data.append(
++            (
++                last_time,
++                measured_end_time,
++                io_diff,
++                cpu_diff,
++                cpu_percent,
++                list(virt_mem),
++                swap_entry,
++            )
++        )
+ 
+         collection_overhead = time.time() - last_time - poll_interval
+         last_time = measured_end_time
+         sleep_interval = max(0, poll_interval - collection_overhead)
+ 
+     for entry in data:
+         pipe.send(entry)
+ 
+-    pipe.send(('done', None, None, None, None, None, None))
++    pipe.send(("done", None, None, None, None, None, None))
+     pipe.close()
+     sys.exit(0)
+ 
+ 
+-SystemResourceUsage = namedtuple('SystemResourceUsage',
+-                                 ['start', 'end',
+-                                  'cpu_times', 'cpu_percent', 'io', 'virt', 'swap'])
++SystemResourceUsage = namedtuple(
++    "SystemResourceUsage",
++    ["start", "end", "cpu_times", "cpu_percent", "io", "virt", "swap"],
++)
+ 
+ 
+ class SystemResourceMonitor(object):
+     """Measures system resources.
+ 
+     Each instance measures system resources from the time it is started
+     until it is finished. It does this on a separate process so it doesn't
+     impact execution of the main Python process.
+@@ -258,37 +287,38 @@ class SystemResourceMonitor(object):
+         # failures invoking one of these functions.
+         try:
+             cpu_percent = psutil.cpu_percent(0.0, True)
+             cpu_times = psutil.cpu_times(False)
+             io = get_disk_io_counters()
+             virt = psutil.virtual_memory()
+             swap = psutil.swap_memory()
+         except Exception as e:
+-            warnings.warn('psutil failed to run: %s' % e)
++            warnings.warn("psutil failed to run: %s" % e)
+             return
+ 
+         self._cpu_cores = len(cpu_percent)
+         self._cpu_times_type = type(cpu_times)
+         self._cpu_times_len = len(cpu_times)
+         self._io_type = type(io)
+         self._io_len = len(io)
+         self._virt_type = type(virt)
+         self._virt_len = len(virt)
+         self._swap_type = type(swap)
+         self._swap_len = len(swap)
+ 
+         self._pipe, child_pipe = multiprocessing.Pipe(True)
+ 
+-        self._process = multiprocessing.Process(target=_collect,
+-                                                args=(child_pipe, poll_interval))
++        self._process = multiprocessing.Process(
++            target=_collect, args=(child_pipe, poll_interval)
++        )
+ 
+     def __del__(self):
+         if self._running:
+-            self._pipe.send(('terminate',))
++            self._pipe.send(("terminate",))
+             self._process.join()
+ 
+     # Methods to control monitoring.
+ 
+     def start(self):
+         """Start measuring system-wide CPU resource utilization.
+ 
+         You should only call this once per instance.
+@@ -310,49 +340,59 @@ class SystemResourceMonitor(object):
+         if not self._process:
+             self._stopped = True
+             return
+ 
+         assert self._running
+         assert not self._stopped
+ 
+         try:
+-            self._pipe.send(('terminate',))
++            self._pipe.send(("terminate",))
+         except Exception:
+             pass
+         self._running = False
+         self._stopped = True
+ 
+         self.measurements = []
+ 
+         # The child process will send each data sample over the pipe
+         # as a separate data structure. When it has finished sending
+         # samples, it sends a special "done" message to indicate it
+         # is finished.
+ 
+         while _poll(self._pipe, poll_interval=0.1):
+             try:
+-                start_time, end_time, io_diff, cpu_diff, cpu_percent, virt_mem, \
+-                    swap_mem = self._pipe.recv()
++                (
++                    start_time,
++                    end_time,
++                    io_diff,
++                    cpu_diff,
++                    cpu_percent,
++                    virt_mem,
++                    swap_mem,
++                ) = self._pipe.recv()
+             except Exception:
+                 # Let's assume we're done here
+                 break
+ 
+             # There should be nothing after the "done" message so
+             # terminate.
+-            if start_time == 'done':
++            if start_time == "done":
+                 break
+ 
+             io = self._io_type(*io_diff)
+             virt = self._virt_type(*virt_mem)
+             swap = self._swap_type(*swap_mem)
+             cpu_times = [self._cpu_times_type(*v) for v in cpu_diff]
+ 
+-            self.measurements.append(SystemResourceUsage(start_time, end_time,
+-                                                         cpu_times, cpu_percent, io, virt, swap))
++            self.measurements.append(
++                SystemResourceUsage(
++                    start_time, end_time, cpu_times, cpu_percent, io, virt, swap
++                )
++            )
+ 
+         # We establish a timeout so we don't hang forever if the child
+         # process has crashed.
+         self._process.join(10)
+         if self._process.is_alive():
+             self._process.terminate()
+             self._process.join(10)
+ 
+@@ -447,25 +487,24 @@ class SystemResourceMonitor(object):
+ 
+         for t, name in self.events:
+             if name == start_event:
+                 start_time = t
+             elif name == end_event:
+                 end_time = t
+ 
+         if start_time is None:
+-            raise Exception('Could not find start event: %s' % start_event)
++            raise Exception("Could not find start event: %s" % start_event)
+ 
+         if end_time is None:
+-            raise Exception('Could not find end event: %s' % end_event)
++            raise Exception("Could not find end event: %s" % end_event)
+ 
+         return self.range_usage(start_time, end_time)
+ 
+-    def aggregate_cpu_percent(self, start=None, end=None, phase=None,
+-                              per_cpu=True):
++    def aggregate_cpu_percent(self, start=None, end=None, phase=None, per_cpu=True):
+         """Obtain the aggregate CPU percent usage for a range.
+ 
+         Returns a list of floats representing average CPU usage percentage per
+         core if per_cpu is True (the default). If per_cpu is False, return a
+         single percentage value.
+ 
+         By default this will return data for the entire instrumented interval.
+         If phase is defined, data for a named phase will be returned. If start
+@@ -489,18 +528,17 @@ class SystemResourceMonitor(object):
+ 
+         if per_cpu:
+             return [sum(x) / samples for x in cpu]
+ 
+         cores = [sum(x) for x in cpu]
+ 
+         return sum(cores) / len(cpu) / samples
+ 
+-    def aggregate_cpu_times(self, start=None, end=None, phase=None,
+-                            per_cpu=True):
++    def aggregate_cpu_times(self, start=None, end=None, phase=None, per_cpu=True):
+         """Obtain the aggregate CPU times for a range.
+ 
+         If per_cpu is True (the default), this returns a list of named tuples.
+         Each tuple is as if it were returned by psutil.cpu_times(). If per_cpu
+         is False, this returns a single named tuple of the aforementioned type.
+         """
+         empty = [0 for i in range(0, self._cpu_times_len)]
+         cpu = [list(empty) for i in range(0, self._cpu_cores)]
+@@ -628,74 +666,76 @@ class SystemResourceMonitor(object):
+             virt_fields=list(self._virt_type._fields),
+             swap_fields=list(self._swap_type._fields),
+             samples=[],
+             phases=[],
+             system={},
+         )
+ 
+         def populate_derived(e):
+-            if e['cpu_percent_cores']:
+-                e['cpu_percent_mean'] = sum(e['cpu_percent_cores']) / \
+-                    len(e['cpu_percent_cores'])
++            if e["cpu_percent_cores"]:
++                e["cpu_percent_mean"] = sum(e["cpu_percent_cores"]) / len(
++                    e["cpu_percent_cores"]
++                )
+             else:
+-                e['cpu_percent_mean'] = None
++                e["cpu_percent_mean"] = None
+ 
+-            if e['cpu_times']:
+-                e['cpu_times_sum'] = [0.0] * self._cpu_times_len
++            if e["cpu_times"]:
++                e["cpu_times_sum"] = [0.0] * self._cpu_times_len
+                 for i in range(0, self._cpu_times_len):
+-                    e['cpu_times_sum'][i] = sum(core[i] for core in e['cpu_times'])
++                    e["cpu_times_sum"][i] = sum(core[i] for core in e["cpu_times"])
+ 
+-                e['cpu_times_total'] = sum(e['cpu_times_sum'])
++                e["cpu_times_total"] = sum(e["cpu_times_sum"])
+ 
+         def phase_entry(name, start, end):
+             e = dict(
+                 name=name,
+                 start=start,
+                 end=end,
+                 duration=end - start,
+                 cpu_percent_cores=self.aggregate_cpu_percent(phase=name),
+-                cpu_times=[list(c) for c in
+-                           self.aggregate_cpu_times(phase=name)],
++                cpu_times=[list(c) for c in self.aggregate_cpu_times(phase=name)],
+                 io=list(self.aggregate_io(phase=name)),
+             )
+             populate_derived(e)
+             return e
+ 
+         for m in self.measurements:
+             e = dict(
+                 start=m.start,
+                 end=m.end,
+                 io=list(m.io),
+                 virt=list(m.virt),
+                 swap=list(m.swap),
+                 cpu_percent_cores=list(m.cpu_percent),
+-                cpu_times=list(list(cpu) for cpu in m.cpu_times)
++                cpu_times=list(list(cpu) for cpu in m.cpu_times),
+             )
+ 
+             populate_derived(e)
+-            o['samples'].append(e)
++            o["samples"].append(e)
+ 
+-        if o['samples']:
+-            o['start'] = o['samples'][0]['start']
+-            o['end'] = o['samples'][-1]['end']
+-            o['duration'] = o['end'] - o['start']
+-            o['overall'] = phase_entry(None, o['start'], o['end'])
++        if o["samples"]:
++            o["start"] = o["samples"][0]["start"]
++            o["end"] = o["samples"][-1]["end"]
++            o["duration"] = o["end"] - o["start"]
++            o["overall"] = phase_entry(None, o["start"], o["end"])
+         else:
+-            o['start'] = None
+-            o['end'] = None
+-            o['duration'] = None
+-            o['overall'] = None
++            o["start"] = None
++            o["end"] = None
++            o["duration"] = None
++            o["overall"] = None
+ 
+-        o['events'] = [list(ev) for ev in self.events]
++        o["events"] = [list(ev) for ev in self.events]
+ 
+         for phase, v in self.phases.items():
+-            o['phases'].append(phase_entry(phase, v[0], v[1]))
++            o["phases"].append(phase_entry(phase, v[0], v[1]))
+ 
+         if have_psutil:
+-            o['system'].update(dict(
+-                cpu_logical_count=psutil.cpu_count(logical=True),
+-                cpu_physical_count=psutil.cpu_count(logical=False),
+-                swap_total=psutil.swap_memory()[0],
+-                vmem_total=psutil.virtual_memory()[0],
+-            ))
++            o["system"].update(
++                dict(
++                    cpu_logical_count=psutil.cpu_count(logical=True),
++                    cpu_physical_count=psutil.cpu_count(logical=False),
++                    swap_total=psutil.swap_memory()[0],
++                    vmem_total=psutil.virtual_memory()[0],
++                )
++            )
+ 
+         return o
+diff --git a/testing/mozbase/mozsystemmonitor/setup.py b/testing/mozbase/mozsystemmonitor/setup.py
+--- a/testing/mozbase/mozsystemmonitor/setup.py
++++ b/testing/mozbase/mozsystemmonitor/setup.py
+@@ -3,32 +3,34 @@
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ from __future__ import absolute_import
+ 
+ import os
+ 
+ from setuptools import setup
+ 
+-PACKAGE_VERSION = '1.0.0'
++PACKAGE_VERSION = "1.0.0"
+ 
+ try:
+     pwd = os.path.dirname(os.path.abspath(__file__))
+-    description = open(os.path.join(pwd, 'README.rst')).read()
++    description = open(os.path.join(pwd, "README.rst")).read()
+ except Exception:
+-    description = ''
++    description = ""
+ 
+ setup(
+-    name='mozsystemmonitor',
+-    description='Monitor system resource usage.',
++    name="mozsystemmonitor",
++    description="Monitor system resource usage.",
+     long_description="see https://firefox-source-docs.mozilla.org/mozbase/index.html",
+-    classifiers=['Programming Language :: Python :: 2.7',
+-                 'Programming Language :: Python :: 3.5'],
++    classifiers=[
++        "Programming Language :: Python :: 2.7",
++        "Programming Language :: Python :: 3.5",
++    ],
+     # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+-    license='MPL 2.0',
+-    keywords='mozilla',
+-    author='Mozilla Automation and Tools Team',
+-    author_email='tools@lists.mozilla.org',
+-    url='https://wiki.mozilla.org/Auto-tools/Projects/Mozbase',
+-    packages=['mozsystemmonitor'],
++    license="MPL 2.0",
++    keywords="mozilla",
++    author="Mozilla Automation and Tools Team",
++    author_email="tools@lists.mozilla.org",
++    url="https://wiki.mozilla.org/Auto-tools/Projects/Mozbase",
++    packages=["mozsystemmonitor"],
+     version=PACKAGE_VERSION,
+-    install_requires=['psutil >= 3.1.1'],
++    install_requires=["psutil >= 3.1.1"],
+ )
+diff --git a/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py b/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
+--- a/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
++++ b/testing/mozbase/mozsystemmonitor/tests/test_resource_monitor.py
+@@ -17,19 +17,18 @@ except ImportError:
+     psutil = None
+ 
+ from mozsystemmonitor.resourcemonitor import (
+     SystemResourceMonitor,
+     SystemResourceUsage,
+ )
+ 
+ 
+-@unittest.skipIf(psutil is None, 'Resource monitor requires psutil.')
++@unittest.skipIf(psutil is None, "Resource monitor requires psutil.")
+ class TestResourceMonitor(unittest.TestCase):
+-
+     def test_basic(self):
+         monitor = SystemResourceMonitor(poll_interval=0.5)
+ 
+         monitor.start()
+         time.sleep(3)
+ 
+         monitor.stop()
+ 
+@@ -47,30 +46,30 @@ class TestResourceMonitor(unittest.TestC
+         self.assertEqual(len(data), 0)
+ 
+     def test_phases(self):
+         monitor = SystemResourceMonitor(poll_interval=0.25)
+ 
+         monitor.start()
+         time.sleep(1)
+ 
+-        with monitor.phase('phase1'):
++        with monitor.phase("phase1"):
+             time.sleep(1)
+ 
+-            with monitor.phase('phase2'):
++            with monitor.phase("phase2"):
+                 time.sleep(1)
+ 
+         monitor.stop()
+ 
+         self.assertEqual(len(monitor.phases), 2)
+-        self.assertEqual(['phase2', 'phase1'], list(monitor.phases.keys()))
++        self.assertEqual(["phase2", "phase1"], list(monitor.phases.keys()))
+ 
+         all = list(monitor.range_usage())
+-        data1 = list(monitor.phase_usage('phase1'))
+-        data2 = list(monitor.phase_usage('phase2'))
++        data1 = list(monitor.phase_usage("phase1"))
++        data2 = list(monitor.phase_usage("phase2"))
+ 
+         self.assertGreater(len(all), len(data1))
+         self.assertGreater(len(data1), len(data2))
+ 
+         # This could fail if time.time() takes more than 0.1s. It really
+         # shouldn't.
+         self.assertAlmostEqual(data1[-1].end, data2[-1].end, delta=0.25)
+ 
+@@ -82,32 +81,32 @@ class TestResourceMonitor(unittest.TestC
+ 
+     def test_events(self):
+         monitor = SystemResourceMonitor(poll_interval=0.25)
+ 
+         monitor.start()
+         time.sleep(0.5)
+ 
+         t0 = time.time()
+-        monitor.record_event('t0')
++        monitor.record_event("t0")
+         time.sleep(2)
+ 
+-        monitor.record_event('t1')
++        monitor.record_event("t1")
+         time.sleep(0.5)
+         monitor.stop()
+ 
+         events = monitor.events
+         self.assertEqual(len(events), 2)
+ 
+         event = events[0]
+ 
+-        self.assertEqual(event[1], 't0')
++        self.assertEqual(event[1], "t0")
+         self.assertAlmostEqual(event[0], t0, delta=0.25)
+ 
+-        data = list(monitor.between_events_usage('t0', 't1'))
++        data = list(monitor.between_events_usage("t0", "t1"))
+         self.assertGreater(len(data), 0)
+ 
+     def test_aggregate_cpu(self):
+         monitor = SystemResourceMonitor(poll_interval=0.25)
+ 
+         monitor.start()
+         time.sleep(1)
+         monitor.stop()
+@@ -119,34 +118,34 @@ class TestResourceMonitor(unittest.TestC
+             self.assertIsInstance(v, float)
+ 
+         value = monitor.aggregate_cpu_percent(per_cpu=False)
+         self.assertIsInstance(value, float)
+ 
+         values = monitor.aggregate_cpu_times()
+         self.assertIsInstance(values, list)
+         self.assertGreater(len(values), 0)
+-        self.assertTrue(hasattr(values[0], 'user'))
++        self.assertTrue(hasattr(values[0], "user"))
+ 
+         t = type(values[0])
+ 
+         value = monitor.aggregate_cpu_times(per_cpu=False)
+         self.assertIsInstance(value, t)
+ 
+     def test_aggregate_io(self):
+         monitor = SystemResourceMonitor(poll_interval=0.25)
+ 
+         # There's really no easy way to ensure I/O occurs. For all we know
+         # reads and writes will all be serviced by the page cache.
+         monitor.start()
+         time.sleep(1.0)
+         monitor.stop()
+ 
+         values = monitor.aggregate_io()
+-        self.assertTrue(hasattr(values, 'read_count'))
++        self.assertTrue(hasattr(values, "read_count"))
+ 
+     def test_memory(self):
+         monitor = SystemResourceMonitor(poll_interval=0.25)
+ 
+         monitor.start()
+         time.sleep(1.0)
+         monitor.stop()
+ 
+@@ -156,34 +155,34 @@ class TestResourceMonitor(unittest.TestC
+         v = monitor.max_memory_percent()
+         self.assertIsInstance(v, float)
+ 
+     def test_as_dict(self):
+         monitor = SystemResourceMonitor(poll_interval=0.25)
+ 
+         monitor.start()
+         time.sleep(0.1)
+-        monitor.begin_phase('phase1')
+-        monitor.record_event('foo')
++        monitor.begin_phase("phase1")
++        monitor.record_event("foo")
+         time.sleep(0.1)
+-        monitor.begin_phase('phase2')
+-        monitor.record_event('bar')
++        monitor.begin_phase("phase2")
++        monitor.record_event("bar")
+         time.sleep(0.2)
+-        monitor.finish_phase('phase1')
++        monitor.finish_phase("phase1")
+         time.sleep(0.2)
+-        monitor.finish_phase('phase2')
++        monitor.finish_phase("phase2")
+         time.sleep(0.4)
+         monitor.stop()
+ 
+         d = monitor.as_dict()
+ 
+-        self.assertEqual(d['version'], 2)
+-        self.assertEqual(len(d['events']), 2)
+-        self.assertEqual(len(d['phases']), 2)
+-        self.assertIn('system', d)
+-        self.assertIsInstance(d['system'], dict)
+-        self.assertIsInstance(d['overall'], dict)
+-        self.assertIn('duration', d['overall'])
+-        self.assertIn('cpu_times', d['overall'])
++        self.assertEqual(d["version"], 2)
++        self.assertEqual(len(d["events"]), 2)
++        self.assertEqual(len(d["phases"]), 2)
++        self.assertIn("system", d)
++        self.assertIsInstance(d["system"], dict)
++        self.assertIsInstance(d["overall"], dict)
++        self.assertIn("duration", d["overall"])
++        self.assertIn("cpu_times", d["overall"])
+ 
+ 
+-if __name__ == '__main__':
++if __name__ == "__main__":
+     mozunit.main()

+ 86 - 0
frg/work-js/mozilla-release/patches/1799483-108a1.patch

@@ -0,0 +1,86 @@
+# HG changeset patch
+# User Kagami Sascha Rosylight <krosylight@mozilla.com>
+# Date 1667864157 0
+# Node ID 1e72b7d6fe9a22b3e6ee1f56ff96df3b8c918120
+# Parent  b5e6723fc7afa8c5cbf0f353e50fd9bac804723d
+Bug 1799483 - Simplify _execute_child with catch-all syntax r=releng-reviewers,gbrown
+
+That syntax is added in Python 3.0 by https://peps.python.org/pep-3132/.
+
+Differential Revision: https://phabricator.services.mozilla.com/D161484
+
+diff --git a/testing/mozbase/mozprocess/mozprocess/processhandler.py b/testing/mozbase/mozprocess/mozprocess/processhandler.py
+--- a/testing/mozbase/mozprocess/mozprocess/processhandler.py
++++ b/testing/mozbase/mozprocess/mozprocess/processhandler.py
+@@ -262,52 +262,35 @@ class ProcessHandlerMixin(object):
+             self._cleanup()
+             return self.returncode
+ 
+         """ Private Members of Process class """
+ 
+         if isWin:
+             # Redefine the execute child so that we can track process groups
+             def _execute_child(self, *args_tuple):
+-                # workaround for bug 1670130
+-                if sys.hexversion >= 0x03090000:  # after 3.9.0
+-                    (args, executable, preexec_fn, close_fds,
+-                     pass_fds, cwd, env,
+-                     startupinfo, creationflags, shell,
+-                     p2cread, p2cwrite,
+-                     c2pread, c2pwrite,
+-                     errread, errwrite,
+-                     restore_signals,
+-                     gid, gids, uid,
+-                     umask,
+-                     start_new_session) = args_tuple
+-                elif six.PY3:
+-                    (args, executable, preexec_fn, close_fds,
+-                     pass_fds, cwd, env,
+-                     startupinfo, creationflags, shell,
+-                     p2cread, p2cwrite,
+-                     c2pread, c2pwrite,
+-                     errread, errwrite,
+-                     restore_signals, start_new_session) = args_tuple
+-                # workaround for bug 950894
+-                elif sys.hexversion < 0x02070600:  # prior to 2.7.6
+-                    (args, executable, preexec_fn, close_fds,
+-                     cwd, env, universal_newlines, startupinfo,
+-                     creationflags, shell,
+-                     p2cread, p2cwrite,
+-                     c2pread, c2pwrite,
+-                     errread, errwrite) = args_tuple
+-                    to_close = set()
+-                else:  # 2.7.6 and later
+-                    (args, executable, preexec_fn, close_fds,
+-                     cwd, env, universal_newlines, startupinfo,
+-                     creationflags, shell, to_close,
+-                     p2cread, p2cwrite,
+-                     c2pread, c2pwrite,
+-                     errread, errwrite) = args_tuple
++                (
++                    args,
++                    executable,
++                    preexec_fn,
++                    close_fds,
++                    pass_fds,
++                    cwd,
++                    env,
++                    startupinfo,
++                    creationflags,
++                    shell,
++                    p2cread,
++                    p2cwrite,
++                    c2pread,
++                    c2pwrite,
++                    errread,
++                    errwrite,
++                    *_,
++                ) = args_tuple
+                 if not isinstance(args, six.string_types):
+                     args = subprocess.list2cmdline(args)
+ 
+                 # Always or in the create new process group
+                 creationflags |= winprocess.CREATE_NEW_PROCESS_GROUP
+ 
+                 if startupinfo is None:
+                     startupinfo = winprocess.STARTUPINFO()

+ 37 - 34
frg/work-js/mozilla-release/patches/series

@@ -8216,7 +8216,7 @@ NOBUG-20190118-zlib-66a1.patch
 1523263-67a1.patch
 1521491-4-67a1.patch
 1521491-5-67a1.patch
-1523143-67a1.patch
+1523143-1-67a1.patch
 1497873-1-67a1.patch
 1497873-2-67a1.patch
 1522268-67a1.patch
@@ -10213,8 +10213,14 @@ TOP-NOBUG-fixcompile-25319.patch
 TOP-NOBUG-revendor-25319.patch
 TOP-NOBUG-JSFIXUPS-25319.patch
 1897801-about-seamonkey-mozilla-25319.patch
-
-
+1799483-108a1.patch
+1436037-2no1-65a1.patch
+1502358-65a1.patch
+1471916-68a1.patch
+1428716-1-71a1.patch
+1428716-2-71a1.patch
+1558667-78a1.patch
+1654103-PARTIAL-mozsystemmonitor-84a1.patch
 
 
 
@@ -10353,6 +10359,34 @@ original-patches-js
 ipc-start
 fixxxxed.patch
 
+rust-configure-start
+1523143-2-67a1.patch
+1523143-fix thisafterappyling-67a1.patch
+1516228-1-66a1.patch
+1516228-2-66a1.patch
+1516228-3-66a1.patch
+1516228-4-66a1.patch
+1516228-5-66a1.patch
+1524079-67a1.patch
+1526249-67a1.patch
+1524396-1-68a1.patch
+1524396-2-68a1.patch
+1536486-68a1.patch
+1551618-68a1.patch
+1552476-68a1.patch
+1547196-68a1.patch
+1526857-69a1.patch
+
+PY_1516228_1-66a1.patch
+PY_1516228_2-66a1.patch
+PY_1516228_3-66a1.patch
+PY_1516228_4-66a1.patch
+PY_1516228_5-66a1.patch
+
+PY_1554976_1-70a1.patch
+rust-configure-stop
+
+
 dynamic-imports-optional-start
 #fix-for1472211
 #1709328-90a1.patch
@@ -10581,40 +10615,9 @@ mozilla-esr91-push_618636.patch
 L-1428535-1c-tocheck-59a1.patch
 mozilla-esr78-push_468241.patch
 
-1516228-1-66a1.patch
-1516228-2-66a1.patch
-1516228-3-66a1.patch
-1516228-4-66a1.patch
-1516228-5-66a1.patch
-1524079-67a1.patch
-1526249-67a1.patch
-L-1524467-2-67a1.patch
-1524396-1-68a1.patch
-1524396-2-68a1.patch
-1536486-68a1.patch
-1547196-68a1.patch
-1551618-68a1.patch
-1552476-68a1.patch
-
-
-1526857-69a1.patch
-PY_1516228_1-66a1.patch
-PY_1516228_2-66a1.patch
-PY_1516228_3-66a1.patch
-PY_1516228_4-66a1.patch
-PY_1516228_5-66a1.patch
 
-PY_1554976_1-70a1.patch
 PY_1646794-82a1.patch
 
-
-
-
-
-
-
-
-
 L-NOBUG-killwebrtctelemetry-25317.patch
 
 

+ 9 - 1
frg/work-js/mozilla-release/patches/series-test

@@ -8216,7 +8216,7 @@ NOBUG-20190118-zlib-66a1.patch
 1523263-67a1.patch
 1521491-4-67a1.patch
 1521491-5-67a1.patch
-1523143-67a1.patch
+1523143-1-67a1.patch
 1497873-1-67a1.patch
 1497873-2-67a1.patch
 1522268-67a1.patch
@@ -10212,3 +10212,11 @@ TOP-NOBUG-fixcompile-25319.patch
 TOP-NOBUG-revendor-25319.patch
 TOP-NOBUG-JSFIXUPS-25319.patch
 1897801-about-seamonkey-mozilla-25319.patch
+1799483-108a1.patch
+1436037-2no1-65a1.patch
+1502358-65a1.patch
+1471916-68a1.patch
+1428716-1-71a1.patch
+1428716-2-71a1.patch
+1558667-78a1.patch
+1654103-PARTIAL-mozsystemmonitor-84a1.patch