Hartin, Brian | 26 May 2010 22:42
Favicon

Rake 0.8.7 broken on Windows

Hi all,

In Rake::AltSystem#repair_command, you're now appending "call " to the
beginning of the command.  This has the effect of losing the working
directory.  For example, running 'rake test' from the root directory of
a project will fail to find its unit tests.  It also causes a lot of gem
installation failures, as 'gem install' often seems to run rake from the
installed gem directory to complete the installation, and fails to find
necessary files.

This is not backward compatible, obviously.

1 - Is there a workaround?

2 - Why is the 'call' necessary?  Is this part of preserving the linux
'sh' semantics you mentioned?  If so, how would one avoid this problem
in linux?

Thanks,

Brian Hartin
Luis Lavena | 26 May 2010 23:15
Picon
Gravatar

Re: Rake 0.8.7 broken on Windows

On Wed, May 26, 2010 at 5:42 PM, Hartin, Brian <Brian.Hartin <at> pearson.com> wrote:
> Hi all,
>
> In Rake::AltSystem#repair_command, you're now appending "call " to the
> beginning of the command.  This has the effect of losing the working
> directory.  For example, running 'rake test' from the root directory of
> a project will fail to find its unit tests.  It also causes a lot of gem
> installation failures, as 'gem install' often seems to run rake from the
> installed gem directory to complete the installation, and fails to find
> necessary files.
>

Can you give a concrete example? GitHub repo that can be cloned and see this?

I've been using Rake 0.8.7 with 1.8.6, 1.8.7 without issues. 1.9.1 has
fixed the system invocations and works to for gem installation and
everything.

Please provide us more information so we can help determine the real
root of the issue.

Call preserves the parent process path:

C:\Users\Luis>cd && cd Desktop && cd && call cmd.exe /c cd && cd .. && cd
C:\Users\Luis
C:\Users\Luis\Desktop
C:\Users\Luis\Desktop
C:\Users\Luis

That is true for Ruby too.
(Continue reading)

Hartin, Brian | 27 May 2010 00:17
Favicon

Re: Rake 0.8.7 broken on Windows

Luis,

I have created three one-line ruby scripts to demonstrate the issue with 'call'.  Please note the directory locations:

c:\temp\print_working_directory.rb:

	puts "Working directory is #{Dir.pwd}"

c:\temp\invoke_ruby.rb

	Kernel.system('c:\ruby\bin\ruby.exe c:\temp\print_working_directory.rb')

c:\temp\invoke_ruby_using_call.rb

	Kernel.system('call c:\ruby\bin\ruby.exe c:\temp\print_working_directory.rb')

Next, I opened a command window and executed the following commands:

	c:\>cd c:\temp
	c:\temp>ruby invoke_ruby.rb (prints "Working directory is C:/temp")
	c:\temp>ruby invoke_ruby_using_call.rb (prints "Working directory is C:/Documents and Settings/hartbr")

When I run 'rake test' from my project directory (C:\workspaces\project), I see the same thing.  To
demonstrate, here's what you need to do:

1) gem install rake 0.7.3
2) Modify rake_test_loader.rb to print the working directory.
3) Run 'rake:test' from the root directory of any Rails project.  You should see that the forked ruby process
runs the tests from that directory.
4) Uninstall rake 0.7.3 (Just for clarity's sake)
(Continue reading)

Luis Lavena | 27 May 2010 00:42
Picon
Gravatar

Re: Rake 0.8.7 broken on Windows

On Wed, May 26, 2010 at 7:17 PM, Hartin, Brian <Brian.Hartin <at> pearson.com> wrote:
> Luis,
>
> I have created three one-line ruby scripts to demonstrate the issue with 'call'.  Please note the
directory locations:
>
> c:\temp\print_working_directory.rb:
>
>        puts "Working directory is #{Dir.pwd}"
>
> c:\temp\invoke_ruby.rb
>
>        Kernel.system('c:\ruby\bin\ruby.exe c:\temp\print_working_directory.rb')
>
> c:\temp\invoke_ruby_using_call.rb
>
>        Kernel.system('call c:\ruby\bin\ruby.exe c:\temp\print_working_directory.rb')
>
> Next, I opened a command window and executed the following commands:
>
>        c:\>cd c:\temp
>        c:\temp>ruby invoke_ruby.rb (prints "Working directory is C:/temp")
>        c:\temp>ruby invoke_ruby_using_call.rb (prints "Working directory is C:/Documents and Settings/hartbr")
>
>
> When I run 'rake test' from my project directory (C:\workspaces\project), I see the same thing.  To
demonstrate, here's what you need to do:
>
> 1) gem install rake 0.7.3
> 2) Modify rake_test_loader.rb to print the working directory.
(Continue reading)

Hartin, Brian | 27 May 2010 19:39
Favicon

Re: Rake 0.8.7 broken on Windows

Luis,

Thanks for your help.  There does indeed seem to be something wrong on my end.  Kernel.system('call ...')
executes in a different directory than Kernel.system('...'), but for my co-worker, it does not.  We have
the exact same version of ruby, too.

Brian 

> -----Original Message-----
> From: rake-devel-bounces <at> rubyforge.org 
> [mailto:rake-devel-bounces <at> rubyforge.org] On Behalf Of Luis Lavena
> Sent: Wednesday, May 26, 2010 5:43 PM
> To: Rake Development and Discussion
> Subject: Re: [Rake-devel] Rake 0.8.7 broken on Windows
> 
> On Wed, May 26, 2010 at 7:17 PM, Hartin, Brian 
> <Brian.Hartin <at> pearson.com> wrote:
> > Luis,
> >
> > I have created three one-line ruby scripts to demonstrate 
> the issue with 'call'.  Please note the directory locations:
> >
> > c:\temp\print_working_directory.rb:
> >
> >        puts "Working directory is #{Dir.pwd}"
> >
> > c:\temp\invoke_ruby.rb
> >
> >        Kernel.system('c:\ruby\bin\ruby.exe 
> c:\temp\print_working_directory.rb')
(Continue reading)


Gmane