Bug 1384396 - Add a @depends_all utility function; r?nalexander draft
authorGregory Szorc <gps@mozilla.com>
Tue, 25 Jul 2017 22:00:38 -0700
changeset 616113 27a00bdf0e897dc1599f4a4e7067813346624e03
parent 615935 388d81ed93fa640f91d155f36254667c734157cf
child 616114 562220381401ed811bda3c93af222b1f98b560e9
push id70592
push userbmo:gps@mozilla.com
push dateWed, 26 Jul 2017 18:28:45 +0000
reviewersnalexander
bugs1384396
milestone56.0a1
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