code: func (t *Tree) Load(s *Storage) error {
  	t.lock.Lock()
  	defer t.lock.Unlock()
  
  	children, err := t.getChildren(s)
  	if err != nil {
  		return err
  	}
  
  	// Go through all the children and load them.
  	for _, c := range children {
  		if err := c.Load(s); err != nil {
  			return err
  		}
  	}
  
  	// Set our tree up
  	t.children = children
  
  	return nil
  }
docs: // Load loads the configuration of the entire tree.
  //
  // The parameters are used to tell the tree where to find modules and
  // whether it can download/update modules along the way.
  //
  // Calling this multiple times will reload the tree.
  //
  // Various semantic-like checks are made along the way of loading since
  // module trees inherently require the configuration to be in a reasonably
  // sane state: no circular dependencies, proper module sources, etc. A full
  // suite of validations can be done by running Validate (after loading).