Remove bash invocation on Windows in rebar_utils:sh/2
jan.kloetzke at freenet.de
Fri Sep 30 10:18:53 EDT 2011
The following applies to rebar on Windows only!
I've recently submitted a pull request to remove the bash invocation on
Windows in rebar_utils:sh/2 (see https://github.com/basho/rebar/pull/142).
It's not intended for immediate merging but rather than to be *tested* by some
folks who use rebar on Windows, preferably with one of the less commonly used
So, if you are using rebar on Windows then I would appreciate any feedback.
== Rationale ==
Currently rebar_utils:sh/2 will invoke all commands through bash.exe if found.
Otherwise the command will be executed directly. Despite the fact that the
caller cannot know if the command is executed with Unix or Windows semantics
it leads to the following problem:
The rebar_file_utils module (namely rm_rf/1, cp_r/2 and mv/2) is not working
as expected on Windows when MSYS is installed. These functions call cmd.exe
with some options (e.g. /c) and native path names. There are two problems with
this: first any backslashes would have to be escaped (easy to fix) and options
like '/c' are expanded to 'C:\' by the MSYS automatic path name translation.
You can observe this automatic path name translation by trying the following:
open a MSYS bash and type:
$ cmd /c /q @echo foo
Instead of just seeing 'foo' being printed you end up on the cmd.exe prompt.
> echo %CMDCMDLINE%
to see what actually got executed (e.g. "c:\WINDOWS\system32\cmd.exe C:/
C:/Programme/Git/q echo foo" in my case).
Probably, though I haven't checked, the following problems are also affected
by using bash on Windows:
== Conclusion ==
Don't use bash on Windows to get a consistent behavior and to avoid the
peculiarities of MSYS's automatic path conversion.
== Impact ==
Basically all rebar_utils:sh/2 calls are affected on Windows.
I did test the following rebar commands and they are working as expected
* compile (*.erl, *.app.src, *.c)
and additionally the rebar_file_utils eunit test suite.
What _may_ not work anymore are the following modules, even if MSYS is
installed, because they use e.g. 'grep' and output redirection:
If anybody uses these features on Windows then I'd love to get some testing
More information about the rebar