Merge mozilla-central to mozilla-inbound. a=merge CLOSED TREE
authorCiure Andrei <aciure@mozilla.com>
Fri, 08 Jun 2018 00:07:12 +0300
changeset 805581 8e386f33143372071bfbfeca7596a2144cf0ca85
parent 805580 17b140524c6ee9e1263175212dec5231bfe3059f (current diff)
parent 805479 e16a3d8427b8bb6ceeb0b970702fc2eaccd997b8 (diff)
child 805582 38c222c1bf73be8ef89397c23c607dfe34d748ab
push id112702
push userbmo:mh+mozilla@glandium.org
push dateFri, 08 Jun 2018 01:32:47 +0000
reviewersmerge
milestone62.0a1
Merge mozilla-central to mozilla-inbound. a=merge CLOSED TREE
testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android-armv6.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android-x86.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android-armv6.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android-x86.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android.json
testing/mozharness/configs/multi_locale/standalone_mozilla-central.py
testing/mozharness/configs/single_locale/dev-mozilla-beta.py
testing/mozharness/configs/single_locale/dev-mozilla-release.py
testing/mozharness/configs/single_locale/mozilla-esr52.py
testing/mozharness/configs/single_locale/mozilla-esr60.py
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -42,17 +42,17 @@ include $(topsrcdir)/config/android-comm
 	$(REPORT_BUILD)
 	$(MAKE) -C ../../../faster
 	$(MAKE) -C ../installer stage-package
 	$(MKDIR) -p $(@D)
 	rsync --update $(DIST)/fennec/$(notdir $(OMNIJAR_NAME)) $@
 	$(RM) $(DIST)/fennec/$(notdir $(OMNIJAR_NAME))
 
 .PHONY: features
-tools features::
+features::
 	$(call py_action,generate_builtin_addons,--features=features chrome/chrome/content/built_in_addons.json)
 
 ifndef MOZILLA_OFFICIAL
 # Targets built very early during a Gradle build.  In automation,
 # these are built before Gradle is invoked, and gradle-targets is not
 # made at all.  This is required to avoid building gradle-targets with
 # AB_CD=multi during multi-l10n builds.
 gradle-targets: $(generated_resources) $(generated_files)
--- a/taskcluster/mach_commands.py
+++ b/taskcluster/mach_commands.py
@@ -267,45 +267,53 @@ class MachCommands(MachCommandBase):
                      help='Action input (.yml or .json)')
     @CommandArgument('--task', default=None,
                      help='Task definition (.yml or .json; if omitted, the task will be'
                           'fetched from the queue)')
     @CommandArgument('callback', default=None,
                      help='Action callback name (Python function name)')
     def test_action_callback(self, **options):
         import taskgraph.parameters
+        from taskgraph.util.taskcluster import get_task_definition
         import taskgraph.actions
         import yaml
 
         def load_data(filename):
             with open(filename) as f:
                 if filename.endswith('.yml'):
                     return yaml.safe_load(f)
                 elif filename.endswith('.json'):
                     return json.load(f)
                 else:
                     raise Exception("unknown filename {}".format(filename))
 
         try:
             self.setup_logging()
             task_id = options['task_id']
+            if options['task']:
+                task = load_data(options['task'])
+            elif task_id:
+                task = get_task_definition(task_id)
+            else:
+                task = None
 
             if options['input']:
                 input = load_data(options['input'])
             else:
                 input = None
 
             parameters = taskgraph.parameters.load_parameters_file(options['parameters'])
             parameters.check()
 
             root = options['root']
 
             return taskgraph.actions.trigger_action_callback(
                     task_group_id=options['task_group_id'],
                     task_id=task_id,
+                    task=task,
                     input=input,
                     callback=options['callback'],
                     parameters=parameters,
                     root=root,
                     test=True)
         except Exception:
             traceback.print_exc()
             sys.exit(1)
--- a/taskcluster/taskgraph/actions/backfill.py
+++ b/taskcluster/taskgraph/actions/backfill.py
@@ -7,18 +7,17 @@
 from __future__ import absolute_import, print_function, unicode_literals
 
 import logging
 
 import requests
 from requests.exceptions import HTTPError
 
 from .registry import register_callback_action
-from .util import find_decision_task, create_task_from_def, fix_task_dependencies
-from slugid import nice as slugid
+from .util import find_decision_task, create_tasks
 from taskgraph.util.taskcluster import get_artifact_from_index
 from taskgraph.taskgraph import TaskGraph
 
 PUSHLOG_TMPL = '{}/json-pushes?version=2&startID={}&endID={}'
 INDEX_TMPL = 'gecko.v2.{}.pushlog-id.{}.decision'
 
 logger = logging.getLogger(__name__)
 
@@ -40,46 +39,27 @@ logger = logging.getLogger(__name__)
             'depth': {
                 'type': 'integer',
                 'default': 5,
                 'minimum': 1,
                 'maximum': 10,
                 'title': 'Depth',
                 'description': ('The number of previous pushes before the current '
                                 'push to attempt to trigger this task on.')
-            },
-            'inclusive': {
-                'type': 'boolean',
-                'default': False,
-                'title': 'Inclusive Range',
-                'description': ('If true, the backfill will also retrigger the task '
-                                'on the selected push.')
-            },
-            'addGeckoProfile': {
-                'type': 'boolean',
-                'default': False,
-                'title': 'Add Gecko Profile',
-                'description': 'If true, appends --geckoProfile to mozharness options.'
-            },
-            'testPath': {
-                'type': 'string',
-                'title': 'Test Path',
-                'description': 'If specified, set MOZHARNESS_TEST_PATHS to this value.'
             }
         },
         'additionalProperties': False
     },
     available=lambda parameters: parameters.get('project', None) != 'try'
 )
 def backfill_action(parameters, graph_config, input, task_group_id, task_id, task):
     label = task['metadata']['name']
     pushes = []
-    inclusive_tweak = 1 if input.get('inclusive') else 0
-    depth = input.get('depth', 5) + inclusive_tweak
-    end_id = int(parameters['pushlog_id']) - (1 - inclusive_tweak)
+    depth = input.get('depth', 5)
+    end_id = int(parameters['pushlog_id']) - 1
 
     while True:
         start_id = max(end_id - depth, 0)
         pushlog_url = PUSHLOG_TMPL.format(parameters['head_repository'], start_id, end_id)
         r = requests.get(pushlog_url)
         r.raise_for_status()
         pushes = pushes + r.json()['pushes'].keys()
         if len(pushes) >= depth:
@@ -105,26 +85,13 @@ def backfill_action(parameters, graph_co
                     INDEX_TMPL.format(parameters['project'], push),
                     'public/parameters.yml')
             push_decision_task_id = find_decision_task(push_params, graph_config)
         except HTTPError as e:
             logger.info('Skipping {} due to missing index artifacts! Error: {}'.format(push, e))
             continue
 
         if label in full_task_graph.tasks.keys():
-            task_def = fix_task_dependencies(full_task_graph.tasks[label], label_to_taskid)
-            task_def['taskGroupId'] = push_decision_task_id
-
-            if input.get('addGeckoProfile'):
-                mh_options = task_def['payload'].setdefault('env', {}) \
-                                                .get('MOZHARNESS_OPTIONS', '')
-                task_def['payload']['env']['MOZHARNESS_OPTIONS'] = mh_options + ' --geckoProfile'
-                task_def['extra']['treeherder']['symbol'] += '-p'
-
-            if input.get('testPath'):
-                env = task_def['payload'].setdefault('env', {})
-                env['MOZHARNESS_TEST_PATHS'] = input.get('testPath')
-                task_def['extra']['treeherder']['symbol'] += '-b'
-
-            new_task_id = slugid()
-            create_task_from_def(new_task_id, task_def, parameters['level'])
+            create_tasks(
+                    [label], full_task_graph, label_to_taskid,
+                    push_params, push_decision_task_id, push)
         else:
             logging.info('Could not find {} on {}. Skipping.'.format(label, push))
--- a/taskcluster/taskgraph/actions/mochitest_retrigger.py
+++ b/taskcluster/taskgraph/actions/mochitest_retrigger.py
@@ -6,18 +6,19 @@
 
 from __future__ import absolute_import, print_function, unicode_literals
 
 import json
 import logging
 
 from slugid import nice as slugid
 
-from .util import (create_task_from_def, fetch_graph_and_labels, fix_task_dependencies)
+from .util import (create_task_from_def, fetch_graph_and_labels)
 from .registry import register_callback_action
+from taskgraph.util.parameterization import resolve_task_references
 
 TASKCLUSTER_QUEUE_URL = "https://queue.taskcluster.net/v1/task"
 
 logger = logging.getLogger(__name__)
 
 
 @register_callback_action(
     name='retrigger-mochitest-reftest-with-options',
@@ -78,17 +79,23 @@ logger = logging.getLogger(__name__)
         'required': ['path']
     }
 )
 def mochitest_retrigger_action(parameters, graph_config, input, task_group_id, task_id, task):
     decision_task_id, full_task_graph, label_to_taskid = fetch_graph_and_labels(
         parameters, graph_config)
 
     pre_task = full_task_graph.tasks[task['metadata']['name']]
-    new_task_definition = fix_task_dependencies(pre_task, label_to_taskid)
+
+    # fix up the task's dependencies, similar to how optimization would
+    # have done in the decision
+    dependencies = {name: label_to_taskid[label]
+                    for name, label in pre_task.dependencies.iteritems()}
+    new_task_definition = resolve_task_references(pre_task.label, pre_task.task, dependencies)
+    new_task_definition.setdefault('dependencies', []).extend(dependencies.itervalues())
 
     # don't want to run mozharness tests, want a custom mach command instead
     new_task_definition['payload']['command'] += ['--no-run-tests']
 
     custom_mach_command = [task['tags']['test-type']]
 
     # mochitests may specify a flavor
     if new_task_definition['payload']['env'].get('MOCHITEST_FLAVOR'):
--- a/taskcluster/taskgraph/actions/util.py
+++ b/taskcluster/taskgraph/actions/util.py
@@ -13,17 +13,16 @@ import os
 
 from requests.exceptions import HTTPError
 
 from taskgraph import create
 from taskgraph.decision import write_artifact
 from taskgraph.taskgraph import TaskGraph
 from taskgraph.optimize import optimize_task_graph
 from taskgraph.util.taskcluster import get_session, find_task_id, get_artifact, list_tasks
-from taskgraph.util.parameterization import resolve_task_references
 
 logger = logging.getLogger(__name__)
 
 PUSHLOG_TMPL = '{}/json-pushes?version=2&changeset={}&tipsonly=1&full=1'
 
 
 def find_decision_task(parameters, graph_config):
     """Given the parameters for this action, find the taskId of the decision
@@ -101,26 +100,16 @@ def create_task_from_def(task_id, task_d
     it to this function. No dependencies will be scheduled. You must handle
     this yourself. Seeing how create_tasks handles it might prove helpful."""
     task_def['schedulerId'] = 'gecko-level-{}'.format(level)
     label = task_def['metadata']['name']
     session = get_session()
     create.create_task(session, task_id, label, task_def)
 
 
-def fix_task_dependencies(task_def, label_to_taskid):
-    """fix up the task's dependencies, similar to how optimization would
-    have done in the decision"""
-    dependencies = {name: label_to_taskid[label]
-                    for name, label in task_def.dependencies.iteritems()}
-    new_task_definition = resolve_task_references(task_def.label, task_def.task, dependencies)
-    new_task_definition.setdefault('dependencies', []).extend(dependencies.itervalues())
-    return new_task_definition
-
-
 def update_parent(task, graph):
     task.task.setdefault('extra', {})['parent'] = os.environ.get('TASK_ID', '')
     return task
 
 
 def create_tasks(to_run, full_task_graph, label_to_taskid,
                  params, decision_task_id=None, suffix=''):
     """Create new tasks.  The task definition will have {relative-datestamp':
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android-armv6.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-beta.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-beta",
-    "mozilla_dir": "build",
-    "mozconfig": "build/mobile/android/config/mozconfigs/android-armv6/release"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android-x86.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-beta.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-beta",
-    "mozilla_dir": "build",
-    "mozconfig": "build/mobile/android/config/mozconfigs/android-x86/release"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-beta.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-beta",
-    "mozilla_dir": "build"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android-armv6.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-release.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-release",
-    "mozilla_dir": "build",
-    "mozconfig": "build/mobile/android/config/mozconfigs/android-armv6/release"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android-x86.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-release.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-release",
-    "mozilla_dir": "build",
-    "mozconfig": "build/mobile/android/config/mozconfigs/android-x86/release"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-release.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-release",
-    "mozilla_dir": "build"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/standalone_mozilla-central.py
+++ /dev/null
@@ -1,41 +0,0 @@
-
-import os
-# The name of the directory we'll pull our source into.
-BUILD_DIR = "mozilla-central"
-# This is where the l10n repos are (everything after https://hg.mozilla.org/)
-# for mozilla-central, that's "l10n-central".
-# For mozilla-aurora, that's "releases/l10n/mozilla-aurora"
-L10N_REPO_PATH = "l10n-central"
-# Currently this is assumed to be a subdirectory of your build dir
-OBJDIR = "objdir-droid"
-# Absolute path to your mozconfig.
-# By default it looks at "./mozconfig"
-MOZCONFIG = os.path.join(os.getcwd(), "mozconfig")
-
-config = {
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": OBJDIR,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % BUILD_DIR,
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "l10n_repos": [],
-    "hg_l10n_base": "https://hg.mozilla.org/%s" % L10N_REPO_PATH,
-    "hg_l10n_tag": "default",
-    "l10n_dir": "l10n",
-    "mozilla_dir": BUILD_DIR,
-    "mozconfig": MOZCONFIG,
-    "default_actions": [
-        "pull-locale-source",
-        "build",
-        "package-en-US",
-        "backup-objdir",
-        "restore-objdir",
-        "add-locales",
-        "android-assemble-app",
-        "package-multi",
-        "summary",
-    ],
-}
--- a/testing/mozharness/configs/single_locale/alder.py
+++ b/testing/mozharness/configs/single_locale/alder.py
@@ -1,32 +1,13 @@
-# This configuration uses mozilla-central binaries (en-US, localized complete
-# mars) and urls but it generates 'alder' artifacts. With this setup, binaries
-# generated on alder are NOT overwriting mozilla-central files.
-# Using this configuration, on a successful build, artifacts will be uploaded
-# here:
-#
-# * http://dev-stage01.srv.releng.scl3.mozilla.com/pub/mozilla.org/firefox/nightly/latest-alder-l10n/
-#   (in staging environment)
-# * https://ftp.mozilla.org/pub/firefox/nightly/latest-alder-l10n/
-#   (in production environment)
-#
-# If you really want to have localized alder builds, use the use the following
-# values:
-# * "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/alder-%(platform)s/latest/",
-# * "mar_tools_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/alder-%(platform)s/latest/",
-# * "repo": "https://hg.mozilla.org/projects/alder",
-#
-
 import os
 
 config = {
     "nightly_build": True,
     "branch": "alder",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/ash.py
+++ b/testing/mozharness/configs/single_locale/ash.py
@@ -1,32 +1,13 @@
-# This configuration uses mozilla-central binaries (en-US, localized complete
-# mars) and urls but it generates 'ash' artifacts. With this setup, binaries
-# generated on ash are NOT overwriting mozilla-central files.
-# Using this configuration, on a successful build, artifacts will be uploaded
-# here:
-#
-# * http://dev-stage01.srv.releng.scl3.mozilla.com/pub/mozilla.org/firefox/nightly/latest-ash-l10n/
-#   (in staging environment)
-# * https://ftp.mozilla.org/pub/firefox/nightly/latest-ash-l10n/
-#   (in production environment)
-#
-# If you really want to have localized ash builds, use the use the following
-# values:
-# * "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/ash-%(platform)s/latest/",
-# * "mar_tools_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/ash-%(platform)s/latest/",
-# * "repo": "https://hg.mozilla.org/projects/ash",
-#
-
 import os
 
 config = {
     "nightly_build": True,
     "branch": "ash",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/ash_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/ash_android-api-16.py
@@ -1,38 +1,36 @@
+import os
+
 BRANCH = "ash"
 MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": EN_US_BINARY_URL,
+        "EN_US_BINARY_URL": os.environ['EN_US_BINARY_URL'],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/autoland.py
+++ b/testing/mozharness/configs/single_locale/autoland.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-central",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/autoland_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/autoland_android-api-16.py
@@ -1,40 +1,36 @@
 import os
 
 BRANCH = "autoland"
 MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/dev-mozilla-beta.py
+++ /dev/null
@@ -1,11 +0,0 @@
-config = {
-    "branch": "jamun",
-    "nightly_build": True,
-    "update_channel": "beta",
-
-    # l10n
-    "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
-
-    # purge options
-    'is_automation': True,
-}
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/dev-mozilla-release.py
+++ /dev/null
@@ -1,11 +0,0 @@
-config = {
-    "branch": "jamun",
-    "nightly_build": True,
-    "update_channel": "release",
-
-    # l10n
-    "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
-
-    # purge options
-    'is_automation': True,
-}
--- a/testing/mozharness/configs/single_locale/jamun.py
+++ b/testing/mozharness/configs/single_locale/jamun.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "jamun",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly-jamun",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/jamun_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/jamun_android-api-16.py
@@ -1,37 +1,33 @@
 import os
 
 BRANCH = "jamun"
 MOZILLA_DIR = BRANCH
-EN_US_BINARY_URL = None     # No build has been uploaded to archive.m.o
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "mozilla-beta",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "nightly-jamun",
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/linux.py
+++ b/testing/mozharness/configs/single_locale/linux.py
@@ -1,21 +1,19 @@
 config = {
-    "platform": "linux",
     "app_name": "browser",
     "mozconfig_platform": "linux32",
     "mozconfig_variant": "l10n-mozconfig",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 }
--- a/testing/mozharness/configs/single_locale/linux64.py
+++ b/testing/mozharness/configs/single_locale/linux64.py
@@ -1,21 +1,18 @@
 config = {
-    "platform": "linux64",
     "app_name": "browser",
     "mozconfig_platform": "linux64",
     "mozconfig_variant": "l10n-mozconfig",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 }
--- a/testing/mozharness/configs/single_locale/linux64_devedition.py
+++ b/testing/mozharness/configs/single_locale/linux64_devedition.py
@@ -1,23 +1,20 @@
 config = {
-    "platform": "linux64",
     "app_name": "browser",
     "mozconfig_platform": "linux64",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/linux_devedition.py
+++ b/testing/mozharness/configs/single_locale/linux_devedition.py
@@ -1,23 +1,20 @@
 config = {
-    "platform": "linux",
     "app_name": "browser",
     "mozconfig_platform": "linux32",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/macosx64.py
+++ b/testing/mozharness/configs/single_locale/macosx64.py
@@ -1,26 +1,23 @@
 config = {
     # mozconfig file to use, it depends on branch and platform names
-    "platform": "macosx64",
     "app_name": "browser",
     "mozconfig_platform": "macosx64",
     "mozconfig_variant": "l10n-mozconfig",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     "upload_env_extra": {
         "MOZ_PKG_PLATFORM": "mac",
     },
 
     # l10n
     "ignore_locales": ["en-US", "ja"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "Contents/Resources/application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 }
--- a/testing/mozharness/configs/single_locale/macosx64_devedition.py
+++ b/testing/mozharness/configs/single_locale/macosx64_devedition.py
@@ -1,29 +1,26 @@
 config = {
     # mozconfig file to use, it depends on branch and platform names
-    "platform": "macosx64",
     "app_name": "browser",
     "mozconfig_platform": "macosx64",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     "upload_env_extra": {
         "MOZ_PKG_PLATFORM": "mac",
     },
 
     # l10n
     "ignore_locales": ["en-US", "ja"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "Contents/Resources/application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/maple_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/maple_android-api-16.py
@@ -1,38 +1,33 @@
 import os
 
 BRANCH = "maple"
 MOZILLA_DIR = BRANCH
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/" \
-                   "mobile/nightly/latest-maple-android-api-16/en-US"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "nightly-maple",
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-aurora.py
+++ b/testing/mozharness/configs/single_locale/mozilla-aurora.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-aurora",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-aurora/",
     "update_channel": "aurora",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/releases/l10n/mozilla-aurora",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-aurora_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-aurora_android-api-16.py
@@ -1,40 +1,36 @@
 import os
 
 BRANCH = "mozilla-aurora"
 MOZ_UPDATE_CHANNEL = "aurora"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/releases/l10n/%s" % BRANCH,
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": MOZILLA_DIR,
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-beta.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-beta",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-beta/",
     "update_channel": "beta",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-beta_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta_android-api-16.py
@@ -6,32 +6,28 @@ OBJDIR = "obj-firefox"
 EN_US_BINARY_URL = None
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
-    "locales_platform": "android-api-16",
     "ignore_locales": ["en-US"],
-    "platform": "android",
     "build_target": "Android_arm-eabi-gcc3",
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
     "l10n_dir": "l10n-central",
 
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_OBJDIR": OBJDIR,
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
 }
--- a/testing/mozharness/configs/single_locale/mozilla-beta_devedition.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta_devedition.py
@@ -1,12 +1,11 @@
 config = {
     "nightly_build": True,
     "branch": "mozilla-beta",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-beta/",
     "update_channel": "aurora",  # devedition uses aurora based branding
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # purge options
     'is_automation': True,
 }
--- a/testing/mozharness/configs/single_locale/mozilla-central.py
+++ b/testing/mozharness/configs/single_locale/mozilla-central.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-central",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-central_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-central_android-api-16.py
@@ -1,40 +1,36 @@
 import os
 
 BRANCH = "mozilla-central"
 MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/mozilla-esr52.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# This config references releases/l10n/mozilla-release instead of l10n-central
-# because 52 predates cross-channel localization, which rides the train
-# with 57.
-# If you copy this config for the ESR following 57, change hg_l10n_base
-# to l10n-central.
-config = {
-    "nightly_build": True,
-    "branch": "mozilla-esr52",
-    "en_us_binary_url": "https://archive.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-esr52/",
-    "update_channel": "esr",
-
-    # l10n
-    "hg_l10n_base": "https://hg.mozilla.org/releases/l10n/mozilla-release",
-
-    # purge options
-    'is_automation': True,
-}
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/mozilla-esr60.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import os
-
-config = {
-    "nightly_build": True,
-    "branch": "mozilla-esr60",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-esr60/",
-    "update_channel": "esr",
-
-    # l10n
-    "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
-
-    # mar
-    "mar_tools_url": os.environ["MAR_TOOLS_URL"],
-
-    # purge options
-    'is_automation': True,
-}
--- a/testing/mozharness/configs/single_locale/mozilla-inbound.py
+++ b/testing/mozharness/configs/single_locale/mozilla-inbound.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-inbound",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-inbound_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-inbound_android-api-16.py
@@ -1,40 +1,36 @@
 import os
 
 BRANCH = "mozilla-inbound"
 MOZ_UPDATE_CHANNEL = "default"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-release.py
+++ b/testing/mozharness/configs/single_locale/mozilla-release.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-release",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-release/",
     "update_channel": "release",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-release_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-release_android-api-16.py
@@ -1,37 +1,32 @@
 import os
 BRANCH = "mozilla-release"
 MOZ_UPDATE_CHANNEL = "release"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = None
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
-    "locales_platform": "android-api-16",
     "ignore_locales": ["en-US"],
-    "platform": "android",
     "build_target": "Android_arm-eabi-gcc3",
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
     "l10n_dir": "l10n-central",
 
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_OBJDIR": OBJDIR,
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
 }
--- a/testing/mozharness/configs/single_locale/tc_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/tc_android-api-16.py
@@ -1,10 +1,9 @@
 config = {
-    "locales_file": "src/mobile/locales/l10n-changesets.json",
     "mozconfig": "src/mobile/android/config/mozconfigs/android-api-16/l10n-nightly",
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/src",
     },
     "tooltool_servers": ['http://relengapi/tooltool/'],
 
     "upload_env": {
--- a/testing/mozharness/configs/single_locale/tc_linux32.py
+++ b/testing/mozharness/configs/single_locale/tc_linux32.py
@@ -1,18 +1,15 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
--- a/testing/mozharness/configs/single_locale/tc_linux64.py
+++ b/testing/mozharness/configs/single_locale/tc_linux64.py
@@ -1,18 +1,15 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
--- a/testing/mozharness/configs/single_locale/tc_macosx64.py
+++ b/testing/mozharness/configs/single_locale/tc_macosx64.py
@@ -1,18 +1,15 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
--- a/testing/mozharness/configs/single_locale/tc_win32.py
+++ b/testing/mozharness/configs/single_locale/tc_win32.py
@@ -1,23 +1,19 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     'vcs_share_base': os.path.join('y:', os.sep, 'hg-shared'),
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         # EN_US_INSTALLER_BINARY_URL falls back on EN_US_BINARY_URL
         "EN_US_INSTALLER_BINARY_URL": os.environ.get(
-            "EN_US_INSTALLER_BINARY_URL", os.environ.get(
-                "EN_US_BINARY_URL", EN_US_BINARY_URL)),
+            "EN_US_INSTALLER_BINARY_URL", os.environ["EN_US_BINARY_URL"]),
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE', 'c:/builds/tooltool_cache'),
         'EN_US_PACKAGE_NAME': 'target.zip',
         'EN_US_PKG_INST_BASENAME': 'target.installer',
     },
     "upload_env": {
--- a/testing/mozharness/configs/single_locale/tc_win64.py
+++ b/testing/mozharness/configs/single_locale/tc_win64.py
@@ -1,23 +1,19 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     'vcs_share_base': os.path.join('y:', os.sep, 'hg-shared'),
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         # EN_US_INSTALLER_BINARY_URL falls back on EN_US_BINARY_URL
         "EN_US_INSTALLER_BINARY_URL": os.environ.get(
-            "EN_US_INSTALLER_BINARY_URL", os.environ.get(
-                "EN_US_BINARY_URL", EN_US_BINARY_URL)),
+            "EN_US_INSTALLER_BINARY_URL", os.environ["EN_US_BINARY_URL"]),
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE', 'c:/builds/tooltool_cache'),
         'EN_US_PACKAGE_NAME': 'target.zip',
         'EN_US_PKG_INST_BASENAME': 'target.installer',
     },
     "upload_env": {
--- a/testing/mozharness/configs/single_locale/try.py
+++ b/testing/mozharness/configs/single_locale/try.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": False,
     "branch": "try",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly-try",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/try_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/try_android-api-16.py
@@ -1,38 +1,33 @@
 import os
 
 BRANCH = "try"
 MOZILLA_DIR = BRANCH
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/" \
-                   "mobile/nightly/latest-mozilla-central-android-api-16/en-US"
 
 config = {
     "branch": "try",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "nightly_build": True,
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "try", # XXX Invalid
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android", # XXX Validate
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/win32.py
+++ b/testing/mozharness/configs/single_locale/win32.py
@@ -1,30 +1,27 @@
 config = {
-    "platform": "win32",
     "app_name": "browser",
     "mozconfig_platform": "win32",
     "mozconfig_variant": "l10n-mozconfig",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win32/l10n.manifest',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {}
 }
--- a/testing/mozharness/configs/single_locale/win32_devedition.py
+++ b/testing/mozharness/configs/single_locale/win32_devedition.py
@@ -1,29 +1,26 @@
 config = {
-    "platform": "win32",
     "app_name": "browser",
     "mozconfig_platform": "win32",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win32/l10n.manifest',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {},
 
--- a/testing/mozharness/configs/single_locale/win64.py
+++ b/testing/mozharness/configs/single_locale/win64.py
@@ -1,29 +1,26 @@
 config = {
-    "platform": "win64",
     "app_name": "browser",
     "mozconfig_platform": "win64",
     "mozconfig_variant": "l10n-mozconfig",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win64/l10n.manifest',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {}
 }
--- a/testing/mozharness/configs/single_locale/win64_devedition.py
+++ b/testing/mozharness/configs/single_locale/win64_devedition.py
@@ -1,29 +1,26 @@
 config = {
-    "platform": "win64",
     "app_name": "browser",
     "mozconfig_platform": "win64",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win64/l10n.manifest',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {},
 
--- a/testing/mozharness/mozharness/mozilla/l10n/locales.py
+++ b/testing/mozharness/mozharness/mozilla/l10n/locales.py
@@ -3,22 +3,18 @@
 # 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/.
 # ***** END LICENSE BLOCK *****
 """Localization.
 """
 
 import os
-from urlparse import urljoin
 import pprint
 import sys
-from copy import deepcopy
-
-sys.path.insert(1, os.path.dirname(sys.path[0]))
 
 from mozharness.base.config import parse_config_file
 
 
 # LocalesMixin {{{1
 class LocalesMixin(object):
     def __init__(self, **kwargs):
         """ Mixins generally don't have an __init__.
--- a/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py
+++ b/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py
@@ -4,24 +4,22 @@
 # 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/.
 # ***** END LICENSE BLOCK *****
 """multi_locale_build.py
 
 This should be a mostly generic multilocale build script.
 """
 
-from copy import deepcopy
 import os
 import sys
 
 sys.path.insert(1, os.path.dirname(os.path.dirname(sys.path[0])))
 
-from mozharness.base.errors import MakefileErrorList, SSHErrorList
-from mozharness.base.log import FATAL
+from mozharness.base.errors import MakefileErrorList
 from mozharness.base.vcs.vcsbase import MercurialScript
 from mozharness.mozilla.l10n.locales import LocalesMixin
 
 
 # MultiLocaleBuild {{{1
 class MultiLocaleBuild(LocalesMixin, MercurialScript):
     """ This class targets Fennec multilocale builds.
         We were considering this for potential Firefox desktop multilocale.
@@ -71,94 +69,54 @@ class MultiLocaleBuild(LocalesMixin, Mer
          "default": "l10n",
          "help": "Specify the l10n dir name"
          }
     ]]
 
     def __init__(self, require_config_file=True):
         LocalesMixin.__init__(self)
         MercurialScript.__init__(self, config_options=self.config_options,
-                                 all_actions=['clobber',
-                                              'pull-build-source',
-                                              'pull-locale-source',
-                                              'build',
-                                              'package-en-US',
-                                              'upload-en-US',
-                                              'backup-objdir',
-                                              'restore-objdir',
+                                 all_actions=['pull-locale-source',
                                               'add-locales',
                                               'android-assemble-app',
                                               'package-multi',
-                                              'upload-multi',
                                               'summary'],
                                  require_config_file=require_config_file)
 
     def query_l10n_env(self):
         return self.query_env()
 
-    def clobber(self):
-        c = self.config
-        if c['work_dir'] != '.':
-            path = os.path.join(c['base_work_dir'], c['work_dir'])
-            if os.path.exists(path):
-                self.rmtree(path, error_level=FATAL)
-        else:
-            self.info("work_dir is '.'; skipping for now.")
-
-    def pull_build_source(self):
-        c = self.config
-        repos = c['repos']
-        self.vcs_checkout_repos(repos, tag_override=c.get('tag_override'))
-
     # pull_locale_source() defined in LocalesMixin.
 
-    def build(self):
-        c = self.config
-        dirs = self.query_abs_dirs()
-        self.copyfile(os.path.join(dirs['abs_work_dir'], c['mozconfig']),
-                      os.path.join(dirs['abs_mozilla_dir'], 'mozconfig'),
-                      error_level=FATAL)
-
-        mach = os.path.join(dirs['abs_mozilla_dir'], 'mach')
-        env = self.query_env()
-        if self._process_command(command=[sys.executable, mach, 'build'],
-                                 cwd=dirs['abs_mozilla_dir'],
-                                 env=env, error_list=MakefileErrorList):
-            self.fatal("Erroring out after the build failed.")
-
     def android_assemble_app(self):
         dirs = self.query_abs_dirs()
 
         command = 'make -C mobile/android/base android_apks'
         env = self.query_env()
         if self._process_command(command=command,
                                  cwd=dirs['abs_objdir'],
                                  env=env, error_list=MakefileErrorList):
             self.fatal("Erroring out after assembling Android APKs failed.")
 
     def add_locales(self):
-        c = self.config
         dirs = self.query_abs_dirs()
         locales = self.query_locales()
 
         for locale in locales:
             command = 'make chrome-%s L10NBASEDIR=%s' % (locale, dirs['abs_l10n_dir'])
             status = self._process_command(command=command,
                                            cwd=dirs['abs_locales_dir'],
                                            error_list=MakefileErrorList)
             if status:
                 self.return_code += 1
                 self.add_summary("Failed to add locale %s!" % locale,
                                  level="error")
             else:
                 self.add_summary("Added locale %s successfully." % locale)
 
-    def package_en_US(self):
-        self.package(package_type='en-US')
-
     def preflight_package_multi(self):
         dirs = self.query_abs_dirs()
         self.run_command("rm -rfv dist/fennec*", cwd=dirs['abs_objdir'])
         # bug 933290
         self.run_command(["touch", "mobile/android/installer/Makefile"], cwd=dirs['abs_objdir'])
 
     def package_multi(self):
         self.package(package_type='multi')
@@ -187,50 +145,16 @@ class MultiLocaleBuild(LocalesMixin, Mer
             env['MOZ_CHROME_MULTILOCALE'] = "en-US " + \
                                             ' '.join(self.query_locales())
             self.info("MOZ_CHROME_MULTILOCALE is %s" % env['MOZ_CHROME_MULTILOCALE'])
         self._process_command(command=command, cwd=dirs['abs_objdir'],
                               env=env, error_list=MakefileErrorList,
                               halt_on_failure=True)
         self.additional_packaging(package_type=package_type, env=env)
 
-    def upload_en_US(self):
-        # TODO
-        self.info("Not written yet.")
-
-    def backup_objdir(self):
-        dirs = self.query_abs_dirs()
-        if not os.path.isdir(dirs['abs_objdir']):
-            self.warning("%s doesn't exist! Skipping..." % dirs['abs_objdir'])
-            return
-        rsync = self.query_exe('rsync')
-        backup_dir = '%s-bak' % dirs['abs_objdir']
-        self.rmtree(backup_dir)
-        self.mkdir_p(backup_dir)
-        self.run_command([rsync, '-a', '--delete', '--partial',
-                          '%s/' % dirs['abs_objdir'],
-                          '%s/' % backup_dir],
-                         error_list=SSHErrorList)
-
-    def restore_objdir(self):
-        dirs = self.query_abs_dirs()
-        rsync = self.query_exe('rsync')
-        backup_dir = '%s-bak' % dirs['abs_objdir']
-        if not os.path.isdir(dirs['abs_objdir']) or not os.path.isdir(backup_dir):
-            self.warning("Both %s and %s need to exist to restore the objdir! Skipping..." % (dirs['abs_objdir'], backup_dir))
-            return
-        self.run_command([rsync, '-a', '--delete', '--partial',
-                          '%s/' % backup_dir,
-                          '%s/' % dirs['abs_objdir']],
-                         error_list=SSHErrorList)
-
-    def upload_multi(self):
-        # TODO
-        self.info("Not written yet.")
-
     def _process_command(self, **kwargs):
         """Stub wrapper function that allows us to call scratchbox in
            MaemoMultiLocaleBuild.
 
         """
         return self.run_command(**kwargs)
 
 # __main__ {{{1
--- a/testing/mozharness/mozharness/mozilla/mar.py
+++ b/testing/mozharness/mozharness/mozilla/mar.py
@@ -18,19 +18,17 @@ class MarMixin(object):
 
     def download_mar_tools(self):
         """downloads mar tools executables (mar,mbsdiff)
            and stores them local_dir()"""
         self.info("getting mar tools")
         dst_dir = self._mar_tool_dir()
         self.mkdir_p(dst_dir)
         config = self.config
-        replace_dict = {'platform': config['platform'],
-                        'branch': config['branch']}
-        url = config['mar_tools_url'] % replace_dict
+        url = config['mar_tools_url']
         binaries = (config['mar'], config['mbsdiff'])
         for binary in binaries:
             from_url = "/".join((url, binary))
             full_path = os.path.join(dst_dir, binary)
             if not os.path.exists(full_path):
                 self.download_file(from_url, file_name=full_path)
                 self.info("downloaded %s" % full_path)
             else:
--- a/testing/mozharness/scripts/desktop_l10n.py
+++ b/testing/mozharness/scripts/desktop_l10n.py
@@ -10,17 +10,17 @@ This script manages Desktop repacks for 
 """
 import os
 import glob
 import re
 import sys
 import shlex
 
 # load modules from parent dir
-sys.path.insert(1, os.path.dirname(sys.path[0]))
+sys.path.insert(1, os.path.dirname(sys.path[0]))  # noqa
 
 from mozharness.base.errors import MakefileErrorList
 from mozharness.base.script import BaseScript
 from mozharness.base.vcs.vcsbase import VCSMixin
 from mozharness.mozilla.automation import AutomationMixin
 from mozharness.mozilla.building.buildbase import (
     MakeUploadOutputParser,
     get_mozconfig_path,
@@ -40,48 +40,37 @@ SUCCESS = 0
 FAILURE = 1
 
 SUCCESS_STR = "Success"
 FAILURE_STR = "Failed"
 
 
 # mandatory configuration options, without them, this script will not work
 # it's a list of values that are already known before starting a build
-configuration_tokens = ('branch',
-                        'platform',
-                        'update_channel',
-                        )
+configuration_tokens = ('branch', 'update_channel')
+
 # some other values such as "%(version)s", ...
 # are defined at run time and they cannot be enforced in the _pre_config_lock
 # phase
-runtime_config_tokens = ('version', 'locale', 'from_buildid',
-                         'abs_objdir', 'revision',
-                         'to_buildid', 'en_us_binary_url',
-                         'en_us_installer_binary_url', 'mar_tools_url',
-                         'who')
+runtime_config_tokens = ('version', 'locale', 'abs_objdir', 'revision',
+                         'en_us_installer_binary_url')
 
 
 # DesktopSingleLocale {{{1
 class DesktopSingleLocale(LocalesMixin, AutomationMixin,
                           VCSMixin, BaseScript, MarMixin):
     """Manages desktop repacks"""
     config_options = [[
         ['--locale', ],
         {"action": "extend",
          "dest": "locales",
          "type": "string",
          "help": "Specify the locale(s) to sign and update. Optionally pass"
                  " revision separated by colon, en-GB:default."}
     ], [
-        ['--locales-file', ],
-        {"action": "store",
-         "dest": "locales_file",
-         "type": "string",
-         "help": "Specify a file to determine which locales to sign and update"}
-    ], [
         ['--tag-override', ],
         {"action": "store",
          "dest": "tag_override",
          "type": "string",
          "help": "Override the tags set for all repos"}
     ], [
         ['--revision', ],
         {"action": "store",
@@ -109,27 +98,22 @@ class DesktopSingleLocale(LocalesMixin, 
     def __init__(self, require_config_file=True):
         # fxbuild style:
         buildscript_kwargs = {
             'all_actions': [
                 "clone-locales",
                 "list-locales",
                 "setup",
                 "repack",
-                "funsize-props",
                 "summary",
             ],
             'config': {
                 "ignore_locales": ["en-US"],
                 "locales_dir": "browser/locales",
-                "buildid_section": "App",
-                "buildid_option": "BuildID",
-                "application_ini": "application.ini",
                 "log_name": "single_locale",
-                "hashType": "sha512",
             },
         }
 
         LocalesMixin.__init__(self)
         BaseScript.__init__(
             self,
             config_options=self.config_options,
             require_config_file=require_config_file,
@@ -258,19 +242,16 @@ class DesktopSingleLocale(LocalesMixin, 
     # Helper methods {{{2
     def query_bootstrap_env(self):
         """returns the env for repacks"""
         if self.bootstrap_env:
             return self.bootstrap_env
         config = self.config
         replace_dict = self.query_abs_dirs()
 
-        replace_dict['en_us_binary_url'] = config.get('en_us_binary_url')
-        # Override en_us_binary_url if packageUrl is passed as a property from
-        # the en-US build
         bootstrap_env = self.query_env(partial_env=config.get("bootstrap_env"),
                                        replace_dict=replace_dict)
         for binary in self._mar_binaries():
             # "mar -> MAR" and 'mar.exe -> MAR' (windows)
             name = binary.replace('.exe', '')
             name = name.upper()
             binary_path = os.path.join(self._mar_tool_dir(), binary)
             # windows fix...
@@ -635,22 +616,16 @@ class DesktopSingleLocale(LocalesMixin, 
         self.abs_dirs = abs_dirs
         return self.abs_dirs
 
     def _mar_binaries(self):
         """returns a tuple with mar and mbsdiff paths"""
         config = self.config
         return (config['mar'], config['mbsdiff'])
 
-    def _mar_dir(self, dirname):
-        """returns the full path of dirname;
-            dirname is an entry in configuration"""
-        dirs = self.query_abs_dirs()
-        return os.path.join(dirs['abs_objdir'], self.config[dirname])
-
     # TODO: replace with ToolToolMixin
     def _get_tooltool_auth_file(self):
         # set the default authentication file based on platform; this
         # corresponds to where puppet puts the token
         if 'tooltool_authentication_file' in self.config:
             fn = self.config['tooltool_authentication_file']
         elif self._is_windows():
             fn = r'c:\builds\relengapi.tok'
--- a/testing/mozharness/scripts/mobile_l10n.py
+++ b/testing/mozharness/scripts/mobile_l10n.py
@@ -17,17 +17,17 @@ import sys
 
 try:
     import simplejson as json
     assert json
 except ImportError:
     import json
 
 # load modules from parent dir
-sys.path.insert(1, os.path.dirname(sys.path[0]))
+sys.path.insert(1, os.path.dirname(sys.path[0]))  # noqa
 
 from mozharness.base.errors import MakefileErrorList
 from mozharness.base.log import OutputParser
 from mozharness.mozilla.automation import AutomationMixin
 from mozharness.mozilla.tooltool import TooltoolMixin
 from mozharness.base.vcs.vcsbase import MercurialScript
 from mozharness.mozilla.l10n.locales import LocalesMixin
 from mozharness.mozilla.secrets import SecretsMixin
@@ -39,23 +39,16 @@ class MobileSingleLocale(LocalesMixin, T
     config_options = [[
         ['--locale', ],
         {"action": "extend",
          "dest": "locales",
          "type": "string",
          "help": "Specify the locale(s) to sign and update"
          }
     ], [
-        ['--locales-file', ],
-        {"action": "store",
-         "dest": "locales_file",
-         "type": "string",
-         "help": "Specify a file to determine which locales to sign and update"
-         }
-    ], [
         ['--tag-override', ],
         {"action": "store",
          "dest": "tag_override",
          "type": "string",
          "help": "Override the tags set for all repos"
          }
     ], [
         ['--revision', ],