[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Bug in Dir.glob in 1.8.6 on Windows?

Thomas Leitner

5/17/2007 7:35:00 PM

Hi,

I got a bug report for webgen which appeared when the user change from
ruby 1.8.5 to 1.8.6 using the One-Click-Ruby-Installer. Following is
an extract from an IRB session under Windows with ruby 1.8.6:

irb(main):005:0> Dir['src/**/**']
=> ["src/about.de.page", "src/about.page", "src/default.css", "src/
defau
lt.template", "src/images", "src/images/bodybg.gif", "src/images/
boxbg.g
if", "src/images/greypx.gif", "src/images/header.jpg", "src/images/
inner
bg.gif", "src/images/leaves.jpg", "src/images/tabs.gif", "src/
index.de.p
age", "src/index.page", "src/links.de.page", "src/links.page"]
irb(main):006:0> Dir['src/**/**/']
=> ["src/", "src/about.de.page/", "src/about.page/", "src/
default.css/",
"src/default.template/", "src/images/", "src/images/bodybg.gif/",
"src/
images/boxbg.gif/", "src/images/greypx.gif/", "src/images/
header.jpg/",
"src/images/innerbg.gif/", "src/images/leaves.jpg/", "src/images/
tabs.gi
f/", "src/index.de.page/", "src/index.page/", "src/links.de.page/",
"src
/links.page/"]

Why do all the files get a slash appended and why get files returned
at all? I imagine that the second command should only return
directories... at least this was the behaviour before 1.8.6 - same
session on Windows with Ruby 1.8.5:

irb(main):005:0> Dir['src/**/**']
=> ["src/about.de.page", "src/about.page", "src/default.css", "src/
defau
lt.template", "src/images", "src/index.de.page", "src/index.page",
"src/
links.de.page", "src/links.page", "src/images/bodybg.gif", "src/images/
b
oxbg.gif", "src/images/greypx.gif", "src/images/header.jpg", "src/
images
/innerbg.gif", "src/images/leaves.jpg", "src/images/tabs.gif"]
irb(main):006:0> Dir['src/**/**/']
=> ["src/", "src/images/", "src/images/"]

As you can see, this outputs the correct result, at least in my
understanding.

Has this behaviour already been seen/has anyone an explanation for
this and does anyone know how to only get directories using Dir.[] in
ruby 1.8.6 under Windows?

Thanks for helping!

Best regards,
Thomas

ps. Also tested this with Ruby 1.8.6 unde Mac OSX and there it works
just fine!

4 Answers

WoNáDo

5/17/2007 9:16:00 PM

0

Thomas Leitner schrieb:
> Has this behaviour already been seen/has anyone an explanation for
> this and does anyone know how to only get directories using Dir.[] in
> ruby 1.8.6 under Windows?


C:\Dokumente und Einstellungen\wolfgang\Desktop>ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]

C:\Dokumente und Einstellungen\wolfgang\Desktop>irb
irb(main):001:0> Dir['dirtest/**/**']
=> ["dirtest/dat1.txt", "dirtest/dat2.txt", "dirtest/sub1",
"dirtest/sub1/sub11", "dirtest/sub1/sub1/dat1.txt", "dirtest/sub2",
"dirtest/sub2/sub21", "dirtest/sub2/sub2dat1.txt"]
irb(main):002:0> Dir['dirtest/**/**'].find_all{|f|File.directory?(f)}
=> ["dirtest/sub1", "dirtest/sub1/sub11", "dirtest/sub2", "dirtest/sub2/sub21"]

The Problem does not appear using a Ruby 1.9 snapshot under Windows:

C:\Dokumente und Einstellungen\wolfgang\Desktop>ruby19 -v
ruby 1.9.0 (2007-05-15 patchlevel 0) [i386-mingw32]

C:\Dokumente und Einstellungen\wolfgang\Desktop>irb19
irb(main):001:0> Dir['dirtest/**/**']
=> ["dirtest/dat1.txt", "dirtest/dat2.txt", "dirtest/sub1",
"dirtest/sub1/sub11", "dirtest/sub1/sub1/dat1.txt", "dirtest/sub2",
"dirtest/sub2/sub21", "dirtest/sub2/sub2dat1.txt"]
irb(main):002:0> Dir['dirtest/**/**/']
=> ["dirtest/", "dirtest/sub1/", "dirtest/sub1/sub11/", "dirtest/sub2/",
"dirtest/sub2/sub21/"]

Wolfgang Nádasi-Donner

Thomas Leitner

5/18/2007 5:48:00 AM

0

On May 17, 11:16 pm, Wolfgang Nádasi-Donner <won...@donnerweb.de>
wrote:
> Thomas Leitner schrieb:
>
> > Has this behaviour already been seen/has anyone an explanation for
> > this and does anyone know how to only get directories using Dir.[] in
> > ruby 1.8.6 under Windows?
>
> C:\Dokumente und Einstellungen\wolfgang\Desktop>ruby -v
> ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
>
> C:\Dokumente und Einstellungen\wolfgang\Desktop>irb
> irb(main):001:0> Dir['dirtest/**/**']
> => ["dirtest/dat1.txt", "dirtest/dat2.txt", "dirtest/sub1",
> "dirtest/sub1/sub11", "dirtest/sub1/sub1/dat1.txt", "dirtest/sub2",
> "dirtest/sub2/sub21", "dirtest/sub2/sub2dat1.txt"]
> irb(main):002:0> Dir['dirtest/**/**'].find_all{|f|File.directory?(f)}
> => ["dirtest/sub1", "dirtest/sub1/sub11", "dirtest/sub2", "dirtest/sub2/sub21"]

Thanks for this suggestions! I know that I can filter afterwards but I
need a version which just uses a glob pattern.

Regards,
Thomas

Nobuyoshi Nakada

5/18/2007 8:24:00 AM

0

Hi,

At Fri, 18 May 2007 04:35:04 +0900,
Thomas Leitner wrote in [ruby-talk:251987]:
> I got a bug report for webgen which appeared when the user change from
> ruby 1.8.5 to 1.8.6 using the One-Click-Ruby-Installer. Following is
> an extract from an IRB session under Windows with ruby 1.8.6:

Thank you for the report, fixed now.

> Has this behaviour already been seen/has anyone an explanation for
> this and does anyone know how to only get directories using Dir.[] in
> ruby 1.8.6 under Windows?

Windows API FindFirstFile/FindNextFile return the file mode
together, and Dir#glob about to utilize it to tell if it is a
directory. The bug is that the info for the first entry,
i.e. ".", was always used.

--
Nobu Nakada

Thomas Leitner

5/18/2007 9:47:00 AM

0

On May 18, 10:23 am, Nobuyoshi Nakada <n...@ruby-lang.org> wrote:
> Hi,
>
> At Fri, 18 May 2007 04:35:04 +0900,
> Thomas Leitner wrote in [ruby-talk:251987]:
>
> > I got a bug report for webgen which appeared when the user change from
> > ruby 1.8.5 to 1.8.6 using the One-Click-Ruby-Installer. Following is
> > an extract from an IRB session under Windows with ruby 1.8.6:
>
> Thank you for the report, fixed now.
>
> > Has this behaviour already been seen/has anyone an explanation for
> > this and does anyone know how to only get directories using Dir.[] in
> > ruby 1.8.6 under Windows?
>
> Windows API FindFirstFile/FindNextFile return the file mode
> together, and Dir#glob about to utilize it to tell if it is a
> directory. The bug is that the info for the first entry,
> i.e. ".", was always used.

Thanks for the fast reply, the fix and the explanation! I assume that
this fix will be in the next release of the One-Click-Installer for
Windows?!

Thomas