Hi there,
I’m having a few issues with FileUtils writing stuff to stderr when no
error has occurred. For example I might have the following simple
Rakefile:
require ‘rake’
task :clean do
rm_rf ‘test’
end
When I run
rake clean 2> err
In the err file I see:
‘rm -rf test’
I would expect this to be sent to stdout rather than err.
The problem that I have is that I am trying to detect a rake failure
from within ant. Rake doesn’t seem to return the correct error code so I
was testing for failure by detecting if anything was written to stderr.
My ant task would thus look something like this:
This works fine except when I try to use the FileUtils methods. rm_rf
causes it to fail as does mkdir_p.
Any suggestions?
Cheers,
Mark.
On Jan 24, 2011, at 5:25, “Mark L.” [email protected] wrote:
Hi there,
I’m having a few issues with FileUtils writing stuff to stderr when no error has
occurred. For example I might have the following simple
Rakefile:
require ‘rake’
task :clean do
rm_rf ‘test’
end
Note that rake’s rm_rf is not exactly FileUtils’ rm_rf
When I run
rake clean 2> err
In the err file I see:
‘rm -rf test’
I would expect this to be sent to stdout rather than err.
Why? I expect informational messages on stderr. This way rake’s messages
don’t interfere with a rake user’s output. By having rake’s messages on
stderr a rake task author can write tasks that can be piped to other
commands.
rake email | sendmail # for example
(Yes, rake currently outputs a message on stdout. I have fixed that in
trunk.)
The problem that I have is that I am trying to detect a rake failure from within
ant. Rake doesn’t seem to return the correct error code so I was testing for
failure by detecting if anything was written to stderr.
You should query $?, not stderr. Rake should be behaving like a standard
unix command.
Any suggestions?
AFAIK rm -rf and mkdir -p always exit 0.
What is your rake task that exits 0 improperly?
On Jan 24, 2011, at 09:32, Eric H. wrote:
I would expect this to be sent to stdout rather than err.
Any suggestions?
AFAIK rm -rf and mkdir -p always exit 0.
My mistake, these can exit 1.
I suppose the question then is “what does rm -f mean for rake’s exit
status?”
If I’m writing a clean task that uses rm -f I suppose I’m saying it’s OK
for clean to not delete some things.
Hi Eric,
I see your point. I should be able to check the return code for errors.
This would make the ant task even simpler as I would just have to set
the ‘failonerror’ flag.
I guess my question above was trying to find another way of doing this
because initially the return code was returning 0 when I was not
expecting it.
After reading your comments I’ve gone back to look at the code to see if
I could pinpoint where it was going wrong (you’ll have to forgive me -
I’m new to ruby and am modifying a script written by someone else)
I traced the problem to a ‘system’ command. We are using a javascript
closure compiler to minify some javascript. It would fail if there was a
syntax error in the javascript - but the rake script would exit
normally. The original piece of code looked like:
system #{JAVA_CMD} -jar #{JS_ROOT}/lib/compiler.jar --js=#{src} --js_output_file=#{dst}
and then the rake script carried on as normal. I then tried to capture
the $? of the command and raise an exception if it was non-zero.
Unfortunately, as it stands the above command always returns a non-zero
response. I eventually figured out that it was the back-ticks that was
causing the issue and so my final solution was to do this:
system("#{JAVA_CMD} -jar #{JS_ROOT}/lib/compiler.jar --js=#{src}
–js_output_file=#{dst}")
Raise an exception if the compiler fails
if( !$?.success? )
raise “Closure Compiler failed to compile javascript”
end
and this finally seemed to resolve my problem.
Thanks for the response,
Mark.