diff options
| -rw-r--r-- | lib/pleroma/upload/filter/exiftool.ex | 9 | ||||
| -rw-r--r-- | lib/pleroma/utils.ex | 15 | ||||
| -rw-r--r-- | mix.exs | 6 | ||||
| -rw-r--r-- | test/upload/filter/exiftool_test.exs | 2 | 
4 files changed, 28 insertions, 4 deletions
diff --git a/lib/pleroma/upload/filter/exiftool.ex b/lib/pleroma/upload/filter/exiftool.ex index c7fb6aefa..94622acd0 100644 --- a/lib/pleroma/upload/filter/exiftool.ex +++ b/lib/pleroma/upload/filter/exiftool.ex @@ -9,8 +9,15 @@ defmodule Pleroma.Upload.Filter.Exiftool do    """    @behaviour Pleroma.Upload.Filter +  require Logger +    def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do -    System.cmd("exiftool", ["-overwrite_original", "-gps:all=", file], parallelism: true) +    if Pleroma.Utils.command_available?("exiftool") do +      System.cmd("exiftool", ["-overwrite_original", "-gps:all=", file], parallelism: true) +    else +      Logger.warn("exiftool is not available, filter #{__MODULE__} skipped") +    end +      :ok    end diff --git a/lib/pleroma/utils.ex b/lib/pleroma/utils.ex index 6b8e3accf..21d1159be 100644 --- a/lib/pleroma/utils.ex +++ b/lib/pleroma/utils.ex @@ -9,4 +9,19 @@ defmodule Pleroma.Utils do      |> Enum.map(&Path.join(dir, &1))      |> Kernel.ParallelCompiler.compile()    end + +  @doc """ +  POSIX-compliant check if command is available in the system + +  ## Examples +      iex> command_available?("git") +      true +      iex> command_available?("wrongcmd") +      false + +  """ +  @spec command_available?(String.t()) :: boolean() +  def command_available?(command) do +    match?({_output, 0}, System.cmd("sh", ["-c", "command -v #{command}"])) +  end  end @@ -234,10 +234,10 @@ defmodule Pleroma.Mixfile do    defp version(version) do      identifier_filter = ~r/[^0-9a-z\-]+/i -    {_cmdgit, cmdgit_err} = System.cmd("sh", ["-c", "command -v git"]) +    git_available? = Pleroma.Utils.command_available?("git")      git_pre_release = -      if cmdgit_err == 0 do +      if git_available? do          {tag, tag_err} =            System.cmd("git", ["describe", "--tags", "--abbrev=0"], stderr_to_stdout: true) @@ -263,7 +263,7 @@ defmodule Pleroma.Mixfile do      # Branch name as pre-release version component, denoted with a dot      branch_name = -      with 0 <- cmdgit_err, +      with true <- git_available?,             {branch_name, 0} <- System.cmd("git", ["rev-parse", "--abbrev-ref", "HEAD"]),             branch_name <- String.trim(branch_name),             branch_name <- System.get_env("PLEROMA_BUILD_BRANCH") || branch_name, diff --git a/test/upload/filter/exiftool_test.exs b/test/upload/filter/exiftool_test.exs index a1b7e46cd..8ed7d650b 100644 --- a/test/upload/filter/exiftool_test.exs +++ b/test/upload/filter/exiftool_test.exs @@ -7,6 +7,8 @@ defmodule Pleroma.Upload.Filter.ExiftoolTest do    alias Pleroma.Upload.Filter    test "apply exiftool filter" do +    assert Pleroma.Utils.command_available?("exiftool") +      File.cp!(        "test/fixtures/DSCN0010.jpg",        "test/fixtures/DSCN0010_tmp.jpg"  | 
