Cygwin + TempFile + Dir.chdir = failure

V

vulpes

I'm running ruby 1.8.5-3 for Cygwin under Win XP Pro SP 2. Here's some
code:

require 'tempfile'

Dir.chdir("./aDir") do
Tempfile.open("johndoe", ".") do |f|
# Can be even empty
end
end

With this code, the temporary file in ./aDir will not be removed. Is
this a bug, a Cygwin/Windows "feature", or what? How to get around
this thing?
 
R

Robert Klemme

I'm running ruby 1.8.5-3 for Cygwin under Win XP Pro SP 2. Here's some
code:

require 'tempfile'

Dir.chdir("./aDir") do
Tempfile.open("johndoe", ".") do |f|
# Can be even empty
end
end

With this code, the temporary file in ./aDir will not be removed. Is
this a bug, a Cygwin/Windows "feature", or what? How to get around
this thing?

If you do this it will be removed (regardless whether you use chdir or
not) - at least that's the behavior I observe on my system:

Tempfile.open("johndoe", "/tmp") do |f|
# Can be even empty
end

Basically the chdir isn't needed anyway. It appears you hit a bug in
the stdlib: it seems to try to delete "./<tmpfilename>" but fails
because the file does not exist (remember that "." points to a different
directory then).

I just had a quick check of the Tempfile code and it appears that no
attempts are made to get an absolute path. There is not a single
occurrence of expand_path in tempfile.rb.

The obvious workaround is to use an absolute path (see above).

Kind regards

robert
 
D

Daniel Berger

If you do this it will be removed (regardless whether you use chdir or
not) - at least that's the behavior I observe on my system:

Tempfile.open("johndoe", "/tmp") do |f|
# Can be even empty
end

Basically the chdir isn't needed anyway. It appears you hit a bug in
the stdlib: it seems to try to delete "./<tmpfilename>" but fails
because the file does not exist (remember that "." points to a different
directory then).

I just had a quick check of the Tempfile code and it appears that no
attempts are made to get an absolute path. There is not a single
occurrence of expand_path in tempfile.rb.

The obvious workaround is to use an absolute path (see above).

Looks like a bug to me. Please file it on the RubyForge tracker (and
the patch, too, if you've got one).

Thanks,

Dan
 
V

vulpes

Basically the chdir isn't needed anyway. It appears you hit a bug in
the stdlib: it seems to try to delete "./<tmpfilename>" but fails
because the file does not exist (remember that "." points to a different
directory then).

Point is that I encountered this while using RubyZip. If I'm trying to
edit a zip file in another directory with RubyZip, it is unable to
delete the temp file it creates. And there I have tried using absolute
paths, it doesn't work.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top