Bug 1384241 - Review comment: Use memoized_property; use acdefines() helper. r=gps draft
authorNick Alexander <nalexander@mozilla.com>
Wed, 26 Jul 2017 19:34:34 -0700
changeset 616497 3d3a048ec518daa3e855300b47c5d4938e7482de
parent 616496 fa928c88094fbb87cad3e461eaf92cade510be0b
child 616498 f669c42b119a35931bbc551b98a98689779e1889
push id70704
push usernalexander@mozilla.com
push dateThu, 27 Jul 2017 03:35:28 +0000
reviewersgps
bugs1384241
milestone56.0a1
Bug 1384241 - Review comment: Use memoized_property; use acdefines() helper. r=gps MozReview-Commit-ID: 4EfJilJurv7
python/mozbuild/mozbuild/faster_daemon.py
--- a/python/mozbuild/mozbuild/faster_daemon.py
+++ b/python/mozbuild/mozbuild/faster_daemon.py
@@ -9,16 +9,17 @@ build faster| builds.
 
 from __future__ import absolute_import, print_function, unicode_literals
 
 import datetime
 import os
 import sys
 import time
 
+import mozbuild.util
 import mozpack.path as mozpath
 from mozpack.manifests import (
     InstallManifest,
 )
 from mozpack.copier import (
     FileCopier,
     FileRegistrySubtree,
 )
@@ -61,55 +62,53 @@ class FasterBuildChange(object):
         self.unrecognized = set()
         self.input_to_outputs = {}
         self.output_to_inputs = {}
 
 
 class Daemon(object):
     def __init__(self, config_environment):
         self.config_environment = config_environment
-        self._file_copier = None
         self._client = None
         self._subscriptions = []
 
     @property
     def defines(self):
-        defines = dict((name, self.config_environment.defines[name])
-                       for name in self.config_environment.defines
-                       if name not in self.config_environment.non_global_defines)
+        defines = dict(self.config_environment.acdefines)
+        # These additions work around warts in the build system: see
+        # http://searchfox.org/mozilla-central/rev/ad093e98f42338effe2e2513e26c3a311dd96422/config/faster/rules.mk#92-93
+        # and
+        # http://searchfox.org/mozilla-central/rev/ad093e98f42338effe2e2513e26c3a311dd96422/python/mozbuild/mozbuild/backend/tup.py#244-253.
         defines.update({
             'AB_CD': 'en-US',
-            'BUILD_FASTER': 1,
+            'BUILD_FASTER': '1',
         })
         defines.update({
             'BOOKMARKS_INCLUDE_DIR': mozpath.join(self.config_environment.topsrcdir,
                                                   'browser', 'locales', 'en-US', 'profile'),
         })
         return defines
 
-    @property
+    @mozbuild.util.memoized_property
     def file_copier(self):
-        if self._file_copier is None:
-            file_copier = FileCopier()
+        file_copier = FileCopier()
 
-            finder = FileFinder(mozpath.join(self.config_environment.topobjdir, 'faster'))
-            for path, f in finder.find('*.track'):
-                manifest = InstallManifest(fileobj=f.open())
+        finder = FileFinder(mozpath.join(self.config_environment.topobjdir, 'faster'))
+        for path, f in finder.find('*.track'):
+            manifest = InstallManifest(fileobj=f.open())
 
-                # Turn 'install_dist_bin_browser.track' into ['browser'].
-                parts = os.path.basename(os.path.splitext(path)[0]).split('_')
-                parts = parts[3:]
+            # Turn 'install_dist_bin_browser.track' into ['browser'].
+            parts = os.path.basename(os.path.splitext(path)[0]).split('_')
+            parts = parts[3:]
 
-                subtree = mozpath.join(*parts) if parts else None
-                manifest.populate_registry(FileRegistrySubtree(subtree, file_copier),
-                                           defines_override=self.defines)
+            subtree = mozpath.join(*parts) if parts else None
+            manifest.populate_registry(FileRegistrySubtree(subtree, file_copier),
+                                       defines_override=self.defines)
 
-            self._file_copier = file_copier
-
-        return self._file_copier
+        return file_copier
 
     def watch_set(self, depth=2):
         file_copier = self.file_copier
 
         # We want the set of watches to be "reasonable", so we watch
         # (by default) $TOPSRCDIR/two/levels or $TOPSRCDIR/onelevel.
         # Many folks root $TOPOBJDIR in $TOPSRCDIR, so we handle that
         # situation specially.  We definitely don't want to watch