[#36071] サマータイムでのsleepの動作について — Yoshikawa <yoshixool@...>
吉川と申します。
こんにちは、なかむら(う)です。
吉川です。
こんにちは、なかむら(う)です。
久保です。
> 2008/9/2 U.Nakamura <usa@garbagecollect.jp>:
久保です。
こんにちは、なかむら(う)です。
[#36082] x86_64環境でMarshal.dumpの不具合 — Kouichi Ushijima <ushijima@...>
NTTレゾナントの牛島と申します。
[#36096] [ANN] Ruby 1.9.1仕様凍結 — "Yugui (Yuki Sonoda)" <yugui@...>
Yuguiです。
成瀬です。
[#36124] [Bug: 1.9] undefined method `readpartial' for TestFileUtils::Stream — SASADA Koichi <ko1@...>
ささだです.
[#36132] [Feature #542] cgi.rb : CGI::unescape return encoding — Takeyuki Fujioka <redmine@...>
Feature #542: cgi.rb : CGI::unescape return encoding
In article <48be847681f43_55585b236f8341@redmine.ruby-lang.org>,
成瀬です。
藤岡です。
藤岡です。
In article <48C0C20E.4000307@rabbix.jp>,
藤岡です。
In article <48C76705.5000202@rabbix.jp>,
藤岡です。
In article <48C8A83E.8000200@rabbix.jp>,
藤岡です。
成瀬です。
藤岡です。
藤岡です。
藤岡です。
西山和広です。
藤岡です。
成瀬です。
藤岡です。
藤岡です。
西山和広です。
[#36147] GNU iconv dependency — Takahiro Kambe <taca@...>
こんにちは。
成瀬です。
In message <48C544C3.6090607@airemix.jp>
成瀬です。
In message <48C7D1E1.5040403@airemix.jp>
Takahiro Kambe wrote:
In message <48C7EC6B.5060306@airemix.jp>
Takahiro Kambe wrote:
In message <48C7F8DD.7060001@airemix.jp>
成瀬です。
In message <48C7FE1B.1050900@airemix.jp>
Takahiro Kambe wrote:
なかだです。
In message <48C95715.5080708@ruby-lang.org>
[#36167] OpenSSL Test Failure — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤です。
[#36174] [Feature #546] String#gsub と Strnig#scan のブロックパラメータの一致 — Motonori IWAMURO <redmine@...>
Feature #546: String#gsub と Strnig#scan のブロックパラメータの一致
[#36201] ソケット関連の定数がいろいろ未定義 (Re: [Bug #547](Closed) IPV6系の定数が未定義) — "IWAMURO Motonori" <deenheart+ruby@...>
岩室です。
岩室です。
[#36233] [Bug #554] Sync_m#sync_try_lockの引数が無視されている — akira yamada <redmine@...>
Bug #554: Sync_m#sync_try_lockの引数が無視されている
[#36245] [Feature #546] String#gsub と Strnig#scan のブロックパラメータの一致 — Yui NARUSE <redmine@...>
チケット #546 が更新されました。 (by Yui NARUSE)
[#36281] 合成文字の2コードポイント目 — "NARUSE, Yui" <naruse@...>
成瀬です。
まつもと ゆきひろです
In article <E1KeKG9-0004NC-Jb@x61.netlab.jp>,
まつもと ゆきひろです
In article <E1KeRWe-00037N-Vb@x61.netlab.jp>,
成瀬です。
In article <48CC86FD.3000409@airemix.jp>,
Tanaka Akira wrote:
In article <48CE068E.3080701@airemix.jp>,
成瀬です。
まつもと ゆきひろです
In article <E1KfNyE-0005XO-0P@x61.netlab.jp>,
まつもと ゆきひろです
In article <E1KfQYp-00032T-F6@x61.netlab.jp>,
まつもと ゆきひろです
In article <E1KfRzT-0004jm-DU@x61.netlab.jp>,
In article <87tzcg3dt2.fsf@fsij.org>,
At 21:44 08/09/18, Tanaka Akira wrote:
[#36290] adding Pathname#abspath() — "Akinori MUSHA" <knu@...>
SUSv3のrealpath(3)の項には、存在しないコンポーネントがあったら
名前が良くなかったですね。Pathname#resolve()でどうでしょうか。
In article <86wshfn0zl.knu@iDaemons.org>,
At Sun, 14 Sep 2008 23:20:56 +0900,
In article <86vdwxn9rh.knu@iDaemons.org>,
At Mon, 22 Sep 2008 12:43:18 +0900,
In article <86od2gcvvj.knu@iDaemons.org>,
At Wed, 24 Sep 2008 02:02:59 +0900,
In article <86ljxgd0jt.knu@iDaemons.org>,
At Fri, 26 Sep 2008 02:29:43 +0900,
田中さん、この件はどうでしょう。
In article <86tz7s28my.knu@iDaemons.org>,
At Wed, 21 Jan 2009 21:54:34 +0900,
In article <86sknc0y2o.knu@iDaemons.org>,
[#36300] [patch] performance improvement patch for benchmark/bm_so_count_words.rb — "masayoshi takahashi" <maki@...>
高橋征義です。
まつもと ゆきひろです
高橋征義です。
[#36325] mathn (#**) — Tadayoshi Funaba <tadf@...>
mahtn した場合、
けいじゅ@いしつかです.
> 消したのは [ruby-dev: 20780] からのスレッドなのですが, その中で消して
mathn の課題はそれはそれとして、1.9 ではこの場合、やはり mathn しなくて
[#36329] [Bug:1.9] emacs21で色が付かない — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#36336] [Bug #571] IPv6系の定数が未定義 (for 1.8) — Motonori IWAMURO <redmine@...>
Bug #571: IPv6系の定数が未定義 (for 1.8)
[#36346] add "Error" suffix for Encoding Exceptions — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤と申します。
成瀬です。
斎藤と申します。
遠藤です。
こんにちは、なかむら(う)です。
At 22:25 08/09/18, U.Nakamura wrote:
まつもと ゆきひろです
In article <E1KgbIm-00010I-Qi@x61.netlab.jp>,
成瀬です。
[#36349] Complex/image — Tadayoshi Funaba <tadf@...>
[ruby-math:00543] を読んで、image はやめて imag に変更したらどうか、つ
けいじゅ@いしつかです.
> imageとimagの件ですが, 現行では両方定義されているけど, imageは削除って
けいじゅ@いしつかです.
> Pythonは複素数リテラルあるみたいですね. そしたら, Rubyも分数リテラルと
[#36352] Temporarily removing Precision module — Yugui <yugui@...>
Yuguiです。
[#36448] [Feature #583] TmpdirとTempfile — Yuki Sonoda <redmine@...>
Feature #583: TmpdirとTempfile
[#36461] {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...>
Complex と Rational では、Unify が定義された場合、可能なら整数等に正規
まつもと ゆきひろです
> mathn.rbはcomplex.rbなどと同一の作者が同時に(一体として)作成
けいじゅ@いしつかです.
> まず, Unifyなしで動作するように, mathn側で対応させてください. それから,
けいじゅ@いしつかです.
> mathn動かなくなっていると思うので, あまり大丈夫ではありません.
けいじゅ@いしつかです.
> これらのメソッドを呼び出すのではなく, 再定義することによって振る舞いを
けいじゅ@いしつかです.
> 当然, mathnで対応することはできます.
けいじゅ@いしつかです.
> >それで、僕が改めて言うまでもないことですが、mathn は石塚さんの担当なの
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
Yuguiです。
けいじゅ@いしつかです.
Yuguiです。
こんにちは、なかむら(う)です。
[#36493] [Bug: 1.9] tmpdir on mswin32 — SASADA Koichi <ko1@...>
ささだです.
[#36505] 文字コード変換の追加 (悲鳴) — Martin Duerst <duerst@...>
http://redmine.ruby-lang.org/wiki/ruby/DevelopersMeeting20080922
[#36511] [Bug #595] Fiber ignores ensure clause — Koichi Sasada <redmine@...>
Bug #595: Fiber ignores ensure clause
[#36512] Encoding.default_internal のためのパッチ — Martin Duerst <duerst@...>
[ruby-core:18774] に Michael Selig から Encoding::default_internal
成瀬です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
Yukihiro Matsumoto さんは書きました:
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
At 14:58 08/09/25, Yukihiro Matsumoto wrote:
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
In article <E1Kj3Iz-0003yT-HU@x61.netlab.jp>,
[#36528] driver and target of test-knownbug/btest-miniruby — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#36628] [IA-64]BigDecimal#sqrt の仕様 — TAKANO Mitsuhiro <takano32@...>
こんにちは
高野です。
まつもと ゆきひろです
高野です。
まつもと ゆきひろです
[#36631] net/pop.rb: APOPの脆弱性対応 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[ruby-dev:36290] adding Pathname#abspath()
SUSv3のrealpath(3)の項には、存在しないコンポーネントがあったら
errno=ENOENT を返すべし(shall fail)とあるのですが、*BSDでは最後の
コンポーネントに限り存在しなくてもいい(All but the last component
must exist)実装になっていて、実用上その方が便利な場合が少なからず
あります。
Pathname#realpath()はSUSv3の仕様を踏襲した実装になっていますが、
Pathname自体は生成時点で存在しないパスも許しますし、これから生成
しようとするファイルまたはディレクトリのパス名を正規化するような
操作ができると便利です。
といってPathname#realpath()の仕様を変えるのは好ましくないので、
#abspath()という別メソッドの追加を提案します。どうでしょうか。
Index: ChangeLog
===================================================================
--- ChangeLog (revision 19332)
+++ ChangeLog (working copy)
@@ -1,3 +1,9 @@
+Sun Sep 14 05:51:02 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/pathname.rb (Pathname#realpath_rec, Pathname#abspath): Add
+ Pathname#abspath, a variant of #realpath that allows the last
+ component of pathname to be nonexistent.
+
Sun Sep 14 03:20:03 2008 Tanaka Akira <akr@fsij.org>
* include/ruby/oniguruma.h (onigenc_get_prev_char_head): add end
Index: lib/pathname.rb
===================================================================
--- lib/pathname.rb (revision 19332)
+++ lib/pathname.rb (working copy)
@@ -76,9 +76,9 @@
#
# === Core methods
#
-# These methods are effectively manipulating a String, because that's all a path
-# is. Except for #mountpoint?, #children, and #realpath, they don't access the
-# filesystem.
+# These methods are effectively manipulating a String, because that's
+# all a path is. Except for #mountpoint?, #children, #abspath and
+# #realpath, they don't access the filesystem.
#
# - +
# - #join
@@ -89,6 +89,7 @@
# - #relative_path_from
# - #each_filename
# - #cleanpath
+# - #abspath
# - #realpath
# - #children
# - #mountpoint?
@@ -411,7 +412,7 @@ class Pathname
end
private :cleanpath_conservative
- def realpath_rec(prefix, unresolved, h)
+ def realpath_rec(prefix, unresolved, h, strict, last = true)
resolved = []
until unresolved.empty?
n = unresolved.shift
@@ -428,14 +429,20 @@ class Pathname
prefix, *resolved = h[path]
end
else
- s = File.lstat(path)
+ begin
+ s = File.lstat(path)
+ rescue Errno::ENOENT => e
+ raise e if strict || !last || !unresolved.empty?
+ resolved << n
+ break
+ end
if s.symlink?
h[path] = :resolving
link_prefix, link_names = split_names(File.readlink(path))
if link_prefix == ''
- prefix, *resolved = h[path] = realpath_rec(prefix, resolved + link_names, h)
+ prefix, *resolved = h[path] = realpath_rec(prefix, resolved + link_names, h, strict, unresolved.empty?)
else
- prefix, *resolved = h[path] = realpath_rec(link_prefix, link_names, h)
+ prefix, *resolved = h[path] = realpath_rec(link_prefix, link_names, h, strict, unresolved.empty?)
end
else
resolved << n
@@ -449,19 +456,33 @@ class Pathname
private :realpath_rec
#
- # Returns a real (absolute) pathname of +self+ in the actual filesystem.
- # The real pathname doesn't contain symlinks or useless dots.
+ # Returns the real (absolute) pathname of +self+ in the actual
+ # filesystem not containing symlinks or useless dots.
+ #
+ # All components of the pathname must exist when this method is
+ # called.
#
# No arguments should be given; the old behaviour is *obsoleted*.
#
def realpath
+ abspath(true)
+ end
+
+ #
+ # Returns the real (absolute) pathname of +self+ in the actual filesystem.
+ # The real pathname doesn't contain symlinks or useless dots.
+ #
+ # The last component of the pathname can be nonexistent unless
+ # +strict+ is set to true.
+ #
+ def abspath(strict = false)
path = @path
prefix, names = split_names(path)
if prefix == ''
prefix, names2 = split_names(Dir.pwd)
names = names2 + names
end
- prefix, *names = realpath_rec(prefix, names, {})
+ prefix, *names = realpath_rec(prefix, names, {}, strict)
self.class.new(prepend_prefix(prefix, File.join(*names)))
end
Index: test/pathname/test_pathname.rb
===================================================================
--- test/pathname/test_pathname.rb (revision 19332)
+++ test/pathname/test_pathname.rb (working copy)
@@ -281,13 +281,45 @@ class TestPathname < Test::Unit::TestCas
rescue TypeError
end
Dir.mktmpdir('rubytest-pathname') {|dir|
+ assert_raise(Errno::ENOENT) { realpath("#{dir}/not-exist") }
File.symlink("not-exist-target", "#{dir}/not-exist")
assert_raise(Errno::ENOENT) { realpath("#{dir}/not-exist") }
+ File.symlink("../#{File.basename(dir)}/./not-exist-target", "#{dir}/not-exist2")
+ assert_raise(Errno::ENOENT) { realpath("#{dir}/not-exist2") }
+ File.open("#{dir}/exist-target", "w") {}
+ File.symlink("../#{File.basename(dir)}/./exist-target", "#{dir}/exist")
+ assert_nothing_raised { realpath("#{dir}/exist") }
File.symlink("loop", "#{dir}/loop")
assert_raise(Errno::ELOOP) { realpath("#{dir}/loop") }
}
end
+ def abspath(path)
+ Pathname.new(path).abspath.to_s
+ end
+
+ def test_abspath
+ begin
+ File.symlink(nil, nil)
+ rescue NotImplementedError
+ return
+ rescue TypeError
+ end
+ Dir.mktmpdir('rubytest-pathname') {|dir|
+ assert_nothing_raised { abspath("#{dir}/not-exist") }
+ assert_raise(Errno::ENOENT) { realpath("#{dir}/not-exist/not-exist-child") }
+ File.symlink("not-exist-target", "#{dir}/not-exist")
+ assert_nothing_raised { abspath("#{dir}/not-exist") }
+ File.symlink("../#{File.basename(dir)}/./not-exist-target", "#{dir}/not-exist2")
+ assert_nothing_raised { abspath("#{dir}/not-exist2") }
+ File.open("#{dir}/exist-target", "w") {}
+ File.symlink("../#{File.basename(dir)}/./exist-target", "#{dir}/exist")
+ assert_nothing_raised { abspath("#{dir}/exist") }
+ File.symlink("loop", "#{dir}/loop")
+ assert_raise(Errno::ELOOP) { abspath("#{dir}/loop") }
+ }
+ end
+
def descend(path)
Pathname.new(path).enum_for(:descend).map {|v| v.to_s }
end
--
Akinori MUSHA / http://akinori.org/