diff options
| author | rinpatch <rinpatch@sdf.org> | 2019-06-08 17:40:40 +0300 | 
|---|---|---|
| committer | rinpatch <rinpatch@sdf.org> | 2019-06-08 17:40:40 +0300 | 
| commit | d7ec0898e5aa7acae463760fd85d1ebf8307b4f9 (patch) | |
| tree | 35a30d91ca93ce74909b707f8b5a38e166c2d94b /lib/mix | |
| parent | 4b98a7ce4ef4b4e7b74f533e6d6ed343e1b34c48 (diff) | |
| download | pleroma-d7ec0898e5aa7acae463760fd85d1ebf8307b4f9.tar.gz pleroma-d7ec0898e5aa7acae463760fd85d1ebf8307b4f9.zip | |
Make mix tasks work in a release
Diffstat (limited to 'lib/mix')
| -rw-r--r-- | lib/mix/tasks/pleroma/common.ex | 54 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/instance.ex | 12 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/relay.ex | 4 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/uploads.ex | 12 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 64 | 
5 files changed, 89 insertions, 57 deletions
| diff --git a/lib/mix/tasks/pleroma/common.ex b/lib/mix/tasks/pleroma/common.ex index 25977f656..0e03a7872 100644 --- a/lib/mix/tasks/pleroma/common.ex +++ b/lib/mix/tasks/pleroma/common.ex @@ -10,19 +10,51 @@ defmodule Mix.Tasks.Pleroma.Common do    end    def get_option(options, opt, prompt, defval \\ nil, defname \\ nil) do -    Keyword.get(options, opt) || -      case Mix.shell().prompt("#{prompt} [#{defname || defval}]") do -        "\n" -> -          case defval do -            nil -> get_option(options, opt, prompt, defval) -            defval -> defval -          end - -        opt -> -          opt |> String.trim() -      end +    Keyword.get(options, opt) || shell_prompt(prompt, defval, defname)    end +  def shell_prompt(prompt, defval \\ nil, defname \\ nil) do +    prompt_message = "#{prompt} [#{defname || defval}]" + +    input = +      if mix_shell?(), +        do: Mix.shell().prompt(prompt_message), +        else: :io.get_line(prompt_message) + +    case input do +      "\n" -> +        case defval do +          nil -> +            shell_prompt(prompt, defval, defname) + +          defval -> +            defval +        end + +      input -> +        String.trim(input) +    end +  end + +  def shell_yes?(message) do +    shell_prompt(message, "Yn") in ~w(Yn Y y) +  end + +  def shell_info(message) do +    if mix_shell?(), +      do: Mix.shell().info(message), +      else: IO.puts(message) +  end + +  def shell_error(message) do +    if mix_shell?(), +      do: Mix.shell().error(message), +      else: IO.puts(:stderr, message) +  end + +  @doc "Performs a safe check whether `Mix.shell/0` is available (does not raise if Mix is not loaded)" +  def mix_shell?, do: :erlang.function_exported(Mix, :shell, 0) +    def escape_sh_path(path) do      ~S(') <> String.replace(path, ~S('), ~S(\')) <> ~S(')    end diff --git a/lib/mix/tasks/pleroma/instance.ex b/lib/mix/tasks/pleroma/instance.ex index 6cee8d630..88925dbaf 100644 --- a/lib/mix/tasks/pleroma/instance.ex +++ b/lib/mix/tasks/pleroma/instance.ex @@ -155,17 +155,17 @@ defmodule Mix.Tasks.Pleroma.Instance do            dbpass: dbpass          ) -      Mix.shell().info( +      Common.shell_info(          "Writing config to #{config_path}. You should rename it to config/prod.secret.exs or config/dev.secret.exs."        )        File.write(config_path, result_config) -      Mix.shell().info("Writing #{psql_path}.") +      Common.shell_info("Writing #{psql_path}.")        File.write(psql_path, result_psql)        write_robots_txt(indexable) -      Mix.shell().info( +      Common.shell_info(          "\n" <>            """            To get started: @@ -179,7 +179,7 @@ defmodule Mix.Tasks.Pleroma.Instance do            end        )      else -      Mix.shell().error( +      Common.shell_error(          "The task would have overwritten the following files:\n" <>            (Enum.map(paths, &"- #{&1}\n") |> Enum.join("")) <>            "Rerun with `--force` to overwrite them." @@ -204,10 +204,10 @@ defmodule Mix.Tasks.Pleroma.Instance do      if File.exists?(robots_txt_path) do        File.cp!(robots_txt_path, "#{robots_txt_path}.bak") -      Mix.shell().info("Backing up existing robots.txt to #{robots_txt_path}.bak") +      Common.shell_info("Backing up existing robots.txt to #{robots_txt_path}.bak")      end      File.write(robots_txt_path, robots_txt) -    Mix.shell().info("Writing #{robots_txt_path}.") +    Common.shell_info("Writing #{robots_txt_path}.")    end  end diff --git a/lib/mix/tasks/pleroma/relay.ex b/lib/mix/tasks/pleroma/relay.ex index fbec473c5..213ae24d2 100644 --- a/lib/mix/tasks/pleroma/relay.ex +++ b/lib/mix/tasks/pleroma/relay.ex @@ -30,7 +30,7 @@ defmodule Mix.Tasks.Pleroma.Relay do        # put this task to sleep to allow the genserver to push out the messages        :timer.sleep(500)      else -      {:error, e} -> Mix.shell().error("Error while following #{target}: #{inspect(e)}") +      {:error, e} -> Common.shell_error("Error while following #{target}: #{inspect(e)}")      end    end @@ -41,7 +41,7 @@ defmodule Mix.Tasks.Pleroma.Relay do        # put this task to sleep to allow the genserver to push out the messages        :timer.sleep(500)      else -      {:error, e} -> Mix.shell().error("Error while following #{target}: #{inspect(e)}") +      {:error, e} -> Common.shell_error("Error while following #{target}: #{inspect(e)}")      end    end  end diff --git a/lib/mix/tasks/pleroma/uploads.ex b/lib/mix/tasks/pleroma/uploads.ex index 106fcf443..8855b5538 100644 --- a/lib/mix/tasks/pleroma/uploads.ex +++ b/lib/mix/tasks/pleroma/uploads.ex @@ -38,10 +38,10 @@ defmodule Mix.Tasks.Pleroma.Uploads do        Pleroma.Config.put([Upload, :uploader], uploader)      end -    Mix.shell().info("Migrating files from local #{local_path} to #{to_string(uploader)}") +    Common.shell_info("Migrating files from local #{local_path} to #{to_string(uploader)}")      if delete? do -      Mix.shell().info( +      Common.shell_info(          "Attention: uploaded files will be deleted, hope you have backups! (--delete ; cancel with ^C)"        ) @@ -78,7 +78,7 @@ defmodule Mix.Tasks.Pleroma.Uploads do        |> Enum.filter(& &1)      total_count = length(uploads) -    Mix.shell().info("Found #{total_count} uploads") +    Common.shell_info("Found #{total_count} uploads")      uploads      |> Task.async_stream( @@ -90,7 +90,7 @@ defmodule Mix.Tasks.Pleroma.Uploads do              :ok            error -> -            Mix.shell().error("failed to upload #{inspect(upload.path)}: #{inspect(error)}") +            Common.shell_error("failed to upload #{inspect(upload.path)}: #{inspect(error)}")          end        end,        timeout: 150_000 @@ -99,10 +99,10 @@ defmodule Mix.Tasks.Pleroma.Uploads do      # credo:disable-for-next-line Credo.Check.Warning.UnusedEnumOperation      |> Enum.reduce(0, fn done, count ->        count = count + length(done) -      Mix.shell().info("Uploaded #{count}/#{total_count} files") +      Common.shell_info("Uploaded #{count}/#{total_count} files")        count      end) -    Mix.shell().info("Done!") +    Common.shell_info("Done!")    end  end diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 25fc40ea7..7eaa49836 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -115,7 +115,7 @@ defmodule Mix.Tasks.Pleroma.User do      admin? = Keyword.get(options, :admin, false)      assume_yes? = Keyword.get(options, :assume_yes, false) -    Mix.shell().info(""" +    Common.shell_info("""      A user will be created with the following information:        - nickname: #{nickname}        - email: #{email} @@ -128,7 +128,7 @@ defmodule Mix.Tasks.Pleroma.User do        - admin: #{if(admin?, do: "true", else: "false")}      """) -    proceed? = assume_yes? or Mix.shell().yes?("Continue?") +    proceed? = assume_yes? or Common.shell_yes?("Continue?")      if proceed? do        Common.start_pleroma() @@ -145,7 +145,7 @@ defmodule Mix.Tasks.Pleroma.User do        changeset = User.register_changeset(%User{}, params, need_confirmation: false)        {:ok, _user} = User.register(changeset) -      Mix.shell().info("User #{nickname} created") +      Common.shell_info("User #{nickname} created")        if moderator? do          run(["set", nickname, "--moderator"]) @@ -159,7 +159,7 @@ defmodule Mix.Tasks.Pleroma.User do          run(["reset_password", nickname])        end      else -      Mix.shell().info("User will not be created.") +      Common.shell_info("User will not be created.")      end    end @@ -168,10 +168,10 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do        User.perform(:delete, user) -      Mix.shell().info("User #{nickname} deleted.") +      Common.shell_info("User #{nickname} deleted.")      else        _ -> -        Mix.shell().error("No local user #{nickname}") +        Common.shell_error("No local user #{nickname}")      end    end @@ -181,12 +181,12 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{} = user <- User.get_cached_by_nickname(nickname) do        {:ok, user} = User.deactivate(user, !user.info.deactivated) -      Mix.shell().info( +      Common.shell_info(          "Activation status of #{nickname}: #{if(user.info.deactivated, do: "de", else: "")}activated"        )      else        _ -> -        Mix.shell().error("No user #{nickname}") +        Common.shell_error("No user #{nickname}")      end    end @@ -195,7 +195,7 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{local: true} = user <- User.get_cached_by_nickname(nickname),           {:ok, token} <- Pleroma.PasswordResetToken.create_token(user) do -      Mix.shell().info("Generated password reset token for #{user.nickname}") +      Common.shell_info("Generated password reset token for #{user.nickname}")        IO.puts(          "URL: #{ @@ -208,7 +208,7 @@ defmodule Mix.Tasks.Pleroma.User do        )      else        _ -> -        Mix.shell().error("No local user #{nickname}") +        Common.shell_error("No local user #{nickname}")      end    end @@ -216,7 +216,7 @@ defmodule Mix.Tasks.Pleroma.User do      Common.start_pleroma()      with %User{} = user <- User.get_cached_by_nickname(nickname) do -      Mix.shell().info("Deactivating #{user.nickname}") +      Common.shell_info("Deactivating #{user.nickname}")        User.deactivate(user)        {:ok, friends} = User.get_friends(user) @@ -224,7 +224,7 @@ defmodule Mix.Tasks.Pleroma.User do        Enum.each(friends, fn friend ->          user = User.get_cached_by_id(user.id) -        Mix.shell().info("Unsubscribing #{friend.nickname} from #{user.nickname}") +        Common.shell_info("Unsubscribing #{friend.nickname} from #{user.nickname}")          User.unfollow(user, friend)        end) @@ -233,11 +233,11 @@ defmodule Mix.Tasks.Pleroma.User do        user = User.get_cached_by_id(user.id)        if Enum.empty?(user.following) do -        Mix.shell().info("Successfully unsubscribed all followers from #{user.nickname}") +        Common.shell_info("Successfully unsubscribed all followers from #{user.nickname}")        end      else        _ -> -        Mix.shell().error("No user #{nickname}") +        Common.shell_error("No user #{nickname}")      end    end @@ -274,7 +274,7 @@ defmodule Mix.Tasks.Pleroma.User do          end      else        _ -> -        Mix.shell().error("No local user #{nickname}") +        Common.shell_error("No local user #{nickname}")      end    end @@ -284,10 +284,10 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{} = user <- User.get_cached_by_nickname(nickname) do        user = user |> User.tag(tags) -      Mix.shell().info("Tags of #{user.nickname}: #{inspect(tags)}") +      Common.shell_info("Tags of #{user.nickname}: #{inspect(tags)}")      else        _ -> -        Mix.shell().error("Could not change user tags for #{nickname}") +        Common.shell_error("Could not change user tags for #{nickname}")      end    end @@ -297,10 +297,10 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{} = user <- User.get_cached_by_nickname(nickname) do        user = user |> User.untag(tags) -      Mix.shell().info("Tags of #{user.nickname}: #{inspect(tags)}") +      Common.shell_info("Tags of #{user.nickname}: #{inspect(tags)}")      else        _ -> -        Mix.shell().error("Could not change user tags for #{nickname}") +        Common.shell_error("Could not change user tags for #{nickname}")      end    end @@ -326,7 +326,7 @@ defmodule Mix.Tasks.Pleroma.User do      with {:ok, val} <- options[:expires_at],           options = Map.put(options, :expires_at, val),           {:ok, invite} <- UserInviteToken.create_invite(options) do -      Mix.shell().info( +      Common.shell_info(          "Generated user invite token " <> String.replace(invite.invite_type, "_", " ")        ) @@ -340,14 +340,14 @@ defmodule Mix.Tasks.Pleroma.User do        IO.puts(url)      else        error -> -        Mix.shell().error("Could not create invite token: #{inspect(error)}") +        Common.shell_error("Could not create invite token: #{inspect(error)}")      end    end    def run(["invites"]) do      Common.start_pleroma() -    Mix.shell().info("Invites list:") +    Common.shell_info("Invites list:")      UserInviteToken.list_invites()      |> Enum.each(fn invite -> @@ -361,7 +361,7 @@ defmodule Mix.Tasks.Pleroma.User do            " | Max use: #{max_use}    Left use: #{max_use - invite.uses}"          end -      Mix.shell().info( +      Common.shell_info(          "ID: #{invite.id} | Token: #{invite.token} | Token type: #{invite.invite_type} | Used: #{            invite.used          }#{expire_info}#{using_info}" @@ -374,9 +374,9 @@ defmodule Mix.Tasks.Pleroma.User do      with {:ok, invite} <- UserInviteToken.find_by_token(token),           {:ok, _} <- UserInviteToken.update_invite(invite, %{used: true}) do -      Mix.shell().info("Invite for token #{token} was revoked.") +      Common.shell_info("Invite for token #{token} was revoked.")      else -      _ -> Mix.shell().error("No invite found with token #{token}") +      _ -> Common.shell_error("No invite found with token #{token}")      end    end @@ -385,10 +385,10 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do        {:ok, _} = User.delete_user_activities(user) -      Mix.shell().info("User #{nickname} statuses deleted.") +      Common.shell_info("User #{nickname} statuses deleted.")      else        _ -> -        Mix.shell().error("No local user #{nickname}") +        Common.shell_error("No local user #{nickname}")      end    end @@ -400,10 +400,10 @@ defmodule Mix.Tasks.Pleroma.User do        message = if user.info.confirmation_pending, do: "needs", else: "doesn't need" -      Mix.shell().info("#{nickname} #{message} confirmation.") +      Common.shell_info("#{nickname} #{message} confirmation.")      else        _ -> -        Mix.shell().error("No local user #{nickname}") +        Common.shell_error("No local user #{nickname}")      end    end @@ -416,7 +416,7 @@ defmodule Mix.Tasks.Pleroma.User do      {:ok, user} = User.update_and_set_cache(user_cng) -    Mix.shell().info("Moderator status of #{user.nickname}: #{user.info.is_moderator}") +    Common.shell_info("Moderator status of #{user.nickname}: #{user.info.is_moderator}")      user    end @@ -429,7 +429,7 @@ defmodule Mix.Tasks.Pleroma.User do      {:ok, user} = User.update_and_set_cache(user_cng) -    Mix.shell().info("Admin status of #{user.nickname}: #{user.info.is_admin}") +    Common.shell_info("Admin status of #{user.nickname}: #{user.info.is_admin}")      user    end @@ -442,7 +442,7 @@ defmodule Mix.Tasks.Pleroma.User do      {:ok, user} = User.update_and_set_cache(user_cng) -    Mix.shell().info("Locked status of #{user.nickname}: #{user.info.locked}") +    Common.shell_info("Locked status of #{user.nickname}: #{user.info.locked}")      user    end  end | 
