[#45910] [ruby-trunk - Bug #6694][Open] Thread.new without block. — "ko1 (Koichi Sasada)" <redmine@...>

24 messages 2012/07/04

[#45913] [ruby-trunk - Bug #6698][Open] MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている — "imkira (Mario Freitas)" <imkira@...>

10 messages 2012/07/04

[#45933] [ruby-trunk - Bug #6716][Open] FileUtils.mv でリンク先がないシンボリックリンクファイルを指定すると ENOENT エラーになる — "tommy (Masahiro Tomita)" <tommy@...>

8 messages 2012/07/10

[#45976] [ruby-trunk - Bug #6756][Open] FileUtils.rm_rf がアクセス権のない空ディレクトリを削除しない — "fumiyas (Fumiyasu SATOH)" <fumiyas@...>

9 messages 2012/07/20

[#46012] [ruby-trunk - Feature #6812][Open] Refactor gc.c — "authorNari (Narihiro Nakamura)" <authorNari@...>

13 messages 2012/07/30

[ruby-dev:45968] [ruby-trunk - Feature #6587][Rejected] proposal: adding new methods File.rootname and Pathname#rootname

From: "matz (Yukihiro Matsumoto)" <matz@...>
Date: 2012-07-17 02:10:19 UTC
List: ruby-dev #45968
Issue #6587 has been updated by matz (Yukihiro Matsumoto).

Status changed from Assigned to Rejected


----------------------------------------
Feature #6587: proposal: adding new methods File.rootname and Pathname#rootname
https://bugs.ruby-lang.org/issues/6587#change-28166

Author: usa (Usaku NAKAMURA)
Status: Rejected
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0


=begin
みんな大好き Unixen ではパスの先頭は '/' で始まるものという暗黙の前提がありますが、Windows ではドライブレターおよび UNC というものがあるのでその前提が成り立たないことは広く知られていると思います。
Ruby はドライブレターや UNC はそれなりに適切に取り扱うようになっていますが、残念ながらパス名を処理する際には依然としてロジックを自前で用意する必要があります。
例えば ruby 配布物の test/ 以下を見ると、独自にドライブレター周りを扱おうとしているコードが散見されますが、それぞれ異なる処理を書いており、UNC や拡張パス名(という名前でいいかどうかわかりませんが、"//?/" あるいは "//./" で始まるもの)まで含めて適切に取り扱えているコードはほぼありません。

そこで、(({dirname}))、(({basename}))、(({extname})) などから類推して、(({rootname})) というメソッドを (({File})) の特異メソッドおよび (({Pathname})) のメソッドとして追加することを提案します。

--- File.rootname(filename) -> String
    filename のうち、ルートディレクトリあるいはそれに相当する部分を文字列として返します。
    filename が相対パスなどの場合は ""(空文字列)を返します。
     # on Unixen
     p File.rootname("/foo/bar.txt") #=> "/" (absolute path)
     p File.rootname("bar.txt")      #=> ""  (relative path)

     # on Windows
     p File.rootname("/foo/bar.txt")         #=> "" (relative path)
     p File.rootname("bar.txt")              #=> "" (relative path)
     p File.rootname("C:/foo/bar.txt")       #=> "C:/" (normal absolute path)
     p File.rootname("C:bar.txt")            #=> "" (relative path)
     p File.rootname("//host/share/baz.txt") #=> "//host/share" (UNC absolute path)
     p File.rootname("//?/C:/foo/bar.txt")   #=> "//?/C:/" (extended form absolute path)

--- Pathname#rootname
    Pathname.new(File.rootname(self.to_s)) と同じです。
=end



-- 
http://bugs.ruby-lang.org/

In This Thread