     cond do
       module = get(task) ->
         module
+
       proj ->
         fun.()
         nil
+
       true ->
         nil
     end

  @spec reenable(task_name) :: :ok
  def reenable(task) when is_binary(task) or is_atom(task) do
    task = to_string(task)
    proj = Mix.Project.get
    recursive = (module = get(task)) && recursive(module)

    Mix.TasksServer.delete_many([{:task, task, proj},
                                 {:alias, task, proj}])

    cond do
      recursive && Mix.Project.umbrella? ->
        recur fn proj ->
          Mix.TasksServer.delete_many([{:task, task, proj},
                                       {:alias, task, proj}])
        end

      proj = !recursive && Mix.ProjectStack.recursing() ->
        Mix.TasksServer.delete_many([{:task, task, proj},
                                     {:alias, task, proj}])

      true ->
        :ok

    # Get all dependency configuration but not the deps path
    # as we leave the control of the deps path still to the
    # umbrella child.
    config = Mix.Project.deps_config() |> Keyword.delete(:deps_path)

    for %Mix.Dep{app: app, opts: opts} <- Mix.Dep.Umbrella.cached() do
      Mix.Project.in_project(app, opts[:path], config, fun)
    end
  end
