Clarify.
[cdist.git] / cdist
diff --git a/cdist b/cdist
index 4e10752b95f6aefba0334907d25d07e60e5b5c38..7f2b72086f2239cf4f8ce5d01889a2d7700d01ff 100755 (executable)
--- a/cdist
+++ b/cdist
@@ -444,9 +444,10 @@ class Target:
         """
         Call package() in the cscript and return what it returns, except that
         anything not in a list will be put into one.
+        options: from command line
         """
         if len(inspect.getfullargspec(tree.cscript['package']).args) == 3:
-            packages = tree.call('package', tree.version, options)
+            packages = tree.call('package', tree.version, tree.add_defaults(options))
         else:
             log_normal("Deprecated cscript package() method with no options parameter")
             packages = tree.call('package', tree.version)
@@ -458,8 +459,10 @@ class Target:
             copyfile(p, os.path.join(output_dir, os.path.basename(devel_to_git(tree.commit, p))))
 
     def package(self, project, checkout, output_dir, options, notarize):
+        """
+        options: from command line
+        """
         tree = self.build(project, checkout, options, for_package=True)
-        tree.add_defaults(options)
         p = self._cscript_package(tree, options)
         self._copy_packages(tree, p, output_dir)
 
@@ -475,10 +478,9 @@ class Target:
         """test is the test case to run, or None"""
         tree = globals.trees.get(project, checkout, target)
 
-        tree.add_defaults(options)
         with TreeDirectory(tree):
             if len(inspect.getfullargspec(tree.cscript['test']).args) == 3:
-                return tree.call('test', options, test)
+                return tree.call('test', tree.add_defaults(options), test)
             else:
                 log_normal('Deprecated cscript test() method with no options parameter')
                 return tree.call('test', test)
@@ -861,8 +863,6 @@ class OSXSingleTarget(OSXTarget):
 
     def package(self, project, checkout, output_dir, options, notarize):
         tree = self.build(project, checkout, options, for_package=True)
-        tree.add_defaults(options)
-
         super().package(project, checkout, output_dir, options, notarize)
 
 
@@ -1107,8 +1107,8 @@ class Tree:
     def dependencies(self, options):
         """
         yield details of the dependencies of this tree.  Each dependency is returned
-        as a tuple of (tree, options, parent_tree).  The 'options' parameter are the options that
-        we want to force for 'self'.
+        as a tuple of (tree, options).
+        options: either from command line (for top-level tree) or from parent's dependencies() (for other trees)
         """
         if not 'dependencies' in self.cscript:
             return
@@ -1136,16 +1136,19 @@ class Tree:
     def build_dependencies(self, options):
         """
         Called on the 'main' project tree (-p on the command line) to build all dependencies.
-        'options' will be the ones from the command line.
+        options: either from command line (for top-level tree) or from parent's dependencies() (for other trees)
         """
-        for i in self.dependencies(options):
-            i[0].build(i[1])
+        for dependency, dependency_options in self.dependencies(options):
+            dependency.build(dependency_options)
 
     def build(self, options, for_package=False):
+        """
+        options: either from command line (for top-level tree) or from parent's dependencies() (for other trees)
+        """
         if self.built:
             return
 
-        log_verbose("Building %s %s %s with %s" % (self.name, self.commit_ish, self.version, options))
+        log_verbose("Building %s %s %s with %s" % (self.name, self.commit_ish, self.version, self.add_defaults(options)))
 
         variables = copy.copy(self.target.variables)