Proposed Addition To System Module

53 views
Skip to first unread message

Onorio Catenacci

unread,
Jan 4, 2017, 12:22:18 PM1/4/17
to elixir-lang-core
Hi all,

Recently I've been working on some utility Elixir scripts. One of the scripts I was working on was a "Work In Progress" script for checking my current progress into git.  The thing that I ran across that was interesting to me is (I hope) demonstrated by the code below:

# We may want to memoize this at some point in the future but it hardly seems worth the extra complication right now.
  defp find_exe(command_to_find, default_command) do
    case {command, _} = System.cmd get_correct_search_command(),[command_to_find] do
      {_,1} -> default_command
      {_,0} -> String.trim(command,get_correct_line_ending())
    end
  end

  defp get_correct_line_ending() do
    case {_osfamily, _} = :os.type() do
      {:unix,_} -> "\n"
      {:win32,_} -> "\r\n"
      {:ose,_} -> "\n"
      {_,_} -> "\n" # This should not ever get hit
    end
  end

  defp get_correct_search_command() do
    case {_osfamily, _} = :os.type() do
      {os,_} when os in [:unix,:ose] -> "which"
      {:win32,_} -> "where"
    end
  end

I'm trying to find the git command on the path.  As far as I know on Linux and OSX that's "which" and on Windows it's "where".  But the thing is "where" returns the string with a "\r\n" at the end.  I can trim this but, of course, I need to figure out the right line ending for the OS I'm currently on.  I confess I didn't try this on Linux or Mac to see if "which" behaves the same or not but I can see some utility to knowing which line-ending is present on your current OS as part of the standard System module. 

I don't think there's anything in the System module to simply get the correct line-ending for the current OS--at least I couldn't find it.  I could swear that Jose mentioned to me once that there's something internally to get the correct line ending for the current OS.  Could we maybe expose the current correct line ending?  Maybe System.os_specific_line_ending or something of that sort?  As I say, I recall Jose mentioning something to me about this in the past and if we've already discussed it and decided against it, I apologize.  I didn't turn up anything on a search of the archives. 

Does this seem like a good idea? Thoughts? Criticisms? :)

oc

José Valim

unread,
Jan 4, 2017, 12:58:28 PM1/4/17
to elixir-l...@googlegroups.com
For the particular problem of finding an executable, can't you use System.find_executable/1?



José Valim
Skype: jv.ptec
Founder and Director of R&D

--
You received this message because you are subscribed to the Google Groups "elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/6cc54b36-3215-46f3-8d77-73e6cd50604c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Onorio Catenacci

unread,
Jan 4, 2017, 1:02:27 PM1/4/17
to elixir-lang-core, jose....@plataformatec.com.br
Ack.

Surest way to find out where your googling skills are weakest is to post something to a public mailing list. :)

That said, I still think there would be some utility in being able to check the line-endings on the system.  But I wouldn't be prepared to argue strongly for it.

oc

To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-co...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages