From debee097559e049b03a41fb9d6baf549246acc58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pablo=20Mart=C3=ADnez?= <pablo.martinez.alvarez@gmail.com>
Date: Wed, 9 Aug 2017 17:18:54 +0200
Subject: [PATCH] Use mac_listener and inotifywait.exe binaries if present on
 System PATH (#36)

---
 lib/file_system/backends/fs_mac.ex     | 10 ++++++++--
 lib/file_system/backends/fs_windows.ex | 11 ++++++++---
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/lib/file_system/backends/fs_mac.ex b/lib/file_system/backends/fs_mac.ex
index f24ff2a..68a8476 100644
--- a/lib/file_system/backends/fs_mac.ex
+++ b/lib/file_system/backends/fs_mac.ex
@@ -36,6 +36,8 @@ defmodule FileSystem.Backends.FSMac do
   use GenServer
   @behaviour FileSystem.Backend
 
+  @default_exec_file "mac_listener"
+
   def bootstrap do
     exec_file = executable_path()
     cond do
@@ -78,7 +80,7 @@ defmodule FileSystem.Backends.FSMac do
   end
 
   defp executable_path do
-    executable_path(:system_env) || executable_path(:config) || executable_path(:priv)
+    executable_path(:system_env) || executable_path(:config) || executable_path(:system_path) || executable_path(:priv)
   end
 
   defp executable_path(:config) do
@@ -95,13 +97,17 @@ defmodule FileSystem.Backends.FSMac do
     System.get_env("FILESYSTEM_FSMAC_EXECUTABLE_FILE")
   end
 
+  defp executable_path(:system_path) do
+    System.find_executable(@default_exec_file)
+  end
+
   defp executable_path(:priv) do
     case :code.priv_dir(:file_system) do
       {:error, _} ->
         Logger.error "`priv` dir for `:file_system` application is not avalible in current runtime, appoint executable file with `config.exs` or `FILESYSTEM_FSMAC_EXECUTABLE_FILE` env."
         nil
       dir when is_list(dir) ->
-        Path.join(dir, "mac_listener")
+        Path.join(dir, @default_exec_file)
     end
   end
 
diff --git a/lib/file_system/backends/fs_windows.ex b/lib/file_system/backends/fs_windows.ex
index 2099b03..fbfcadb 100644
--- a/lib/file_system/backends/fs_windows.ex
+++ b/lib/file_system/backends/fs_windows.ex
@@ -26,6 +26,8 @@ defmodule FileSystem.Backends.FSWindows do
   @behaviour FileSystem.Backend
   @sep_char <<1>>
 
+  @default_exec_file "inotifywait.exe"
+
   def bootstrap do
     exec_file = executable_path()
     if not is_nil(exec_file) and File.exists?(exec_file) do
@@ -45,7 +47,7 @@ defmodule FileSystem.Backends.FSWindows do
   end
 
   defp executable_path do
-    executable_path(:system_env) || executable_path(:config) || executable_path(:priv)
+    executable_path(:system_env) || executable_path(:config) || executable_path(:system_path) || executable_path(:priv)
   end
 
   defp executable_path(:config) do
@@ -62,17 +64,20 @@ defmodule FileSystem.Backends.FSWindows do
     System.get_env("FILESYSTEM_FSMWINDOWS_EXECUTABLE_FILE")
   end
 
+  defp executable_path(:system_path) do
+    System.find_executable(@default_exec_file)
+  end
+
   defp executable_path(:priv) do
     case :code.priv_dir(:file_system) do
       {:error, _} ->
         Logger.error "`priv` dir for `:file_system` application is not avalible in current runtime, appoint executable file with `config.exs` or `FILESYSTEM_FSWINDOWS_EXECUTABLE_FILE` env."
         nil
       dir when is_list(dir) ->
-        Path.join(dir, "inotifywait.exe")
+        Path.join(dir, @default_exec_file)
     end
   end
 
-
   def parse_options(options) do
     case Keyword.pop(options, :dirs) do
       {nil, _} ->
-- 
GitLab