code: def _get_missing_trees(self, path, root_tree):
          
          dirpath = posixpath.split(path)[0]
          dirs = dirpath.split('/')
          if not dirs or dirs == ['']:
              return []
  
          def get_tree_for_dir(tree, dirname):
              for name, mode, id in tree.iteritems():
                  if name == dirname:
                      obj = self.repository._repo[id]
                      if isinstance(obj, objects.Tree):
                          return obj
                      else:
                          raise RepositoryError("Cannot create directory %s "
                          "at tree %s as path is occupied and is not a "
                          "Tree" % (dirname, tree))
              return None
  
          trees = []
          parent = root_tree
          for dirname in dirs:
              tree = get_tree_for_dir(parent, dirname)
              if tree is None:
                  tree = objects.Tree()
                  dirmode = 040000
                  parent.add(dirmode, dirname, tree.id)
                  parent = tree
              # Always append tree
              trees.append(tree)
          return trees
docs: Creates missing ``Tree`` objects for the given path.
  
          :param path: path given as a string. It may be a path to a file node
            (i.e. ``foo/bar/baz.txt``) or directory path - in that case it must
            end with slash (i.e. ``foo/bar/``).
          :param root_tree: ``dulwich.objects.Tree`` object from which we start
            traversing (should be commit's root tree)