Bug 1384396 - Add a @depends_all utility function; r=nalexander
☠☠ backed out by 658cba6a9712 ☠ ☠
authorGregory Szorc <gps@mozilla.com>
Tue, 25 Jul 2017 22:00:38 -0700
changeset 419928 0c2bc12f4ebe44428385745266d2fd158e0c3382
parent 419927 958f5a158cd91a65da45cbd1fc4bb7d9f910afb8
child 419929 2a1b1485ffc702fb546d4c73686b5fba3e2e56dc
push id7566
push usermtabara@mozilla.com
push dateWed, 02 Aug 2017 08:25:16 +0000
treeherdermozilla-beta@86913f512c3c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnalexander
bugs1384396
milestone56.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1384396 - Add a @depends_all utility function; r=nalexander Often you only want to evaluate a function if all its dependencies are true. Expressing this in a "when" can be difficult. So let's add a convenience decorator for it. The existing code for @depends_if() was refactored to take an evaluation function as its first argument. This prevents some duplicate code and turns @depends_if() and @depends_all() into one-liners. MozReview-Commit-ID: Jbugvf0lioM
build/moz.configure/util.configure
--- a/build/moz.configure/util.configure
+++ b/build/moz.configure/util.configure
@@ -399,33 +399,49 @@ def dependable(obj):
         return depends(when=True)(obj)
     return depends(when=True)(lambda: obj)
 
 
 always = dependable(True)
 never = dependable(False)
 
 
-# Like @depends, but the decorated function is only called if one of the
-# arguments it would be called with has a positive value (bool(value) is True)
+# Create a decorator that will only execute the body of a function
+# if the passed function returns True when passed all positional
+# arguments.
 @template
-def depends_if(*args, **kwargs):
+def depends_tmpl(eval_args_fn, *args, **kwargs):
     if kwargs:
         assert len(kwargs) == 1
         when = kwargs['when']
     else:
         when = None
     def decorator(func):
         @depends(*args, when=when)
         def wrapper(*args):
-            if any(arg for arg in args):
+            if eval_args_fn(args):
                 return func(*args)
         return wrapper
     return decorator
 
+
+# Like @depends, but the decorated function is only called if one of the
+# arguments it would be called with has a positive value (bool(value) is True)
+@template
+def depends_if(*args, **kwargs):
+    return depends_tmpl(any, *args, **kwargs)
+
+
+# Like @depends, but the decorated function is only called if all of the
+# arguments it would be called with have a positive value.
+@template
+def depends_all(*args, **kwargs):
+    return depends_tmpl(all, *args, **kwargs)
+
+
 # Hacks related to old-configure
 # ==============================
 
 @dependable
 def old_configure_assignments():
     return []
 
 @dependable