[#36071] サマータイムでのsleepの動作について — Yoshikawa <yoshixool@...>

吉川と申します。

16 messages 2008/09/01
[#36074] Re: サマータイムでのsleepの動作について — "U.Nakamura" <usa@...> 2008/09/01

こんにちは、なかむら(う)です。

[#36084] Re: サマータイムでのsleepの動作について — Yoshikawa <yoshixool@...> 2008/09/01

吉川です。

[#36090] Re: サマータイムでのsleepの動作について — "U.Nakamura" <usa@...> 2008/09/02

こんにちは、なかむら(う)です。

[#36132] [Feature #542] cgi.rb : CGI::unescape return encoding — Takeyuki Fujioka <redmine@...>

Feature #542: cgi.rb : CGI::unescape return encoding

48 messages 2008/09/03
[#36145] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — "NARUSE, Yui" <naruse@...> 2008/09/03

成瀬です。

[#36146] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/04

藤岡です。

[#36161] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/05

藤岡です。

[#36239] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Tanaka Akira <akr@...> 2008/09/10

In article <48C0C20E.4000307@rabbix.jp>,

[#36242] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Tietew <tietew@...> 2008/09/10

[#36244] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/10

藤岡です。

[#36261] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Tanaka Akira <akr@...> 2008/09/10

In article <48C76705.5000202@rabbix.jp>,

[#36263] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/11

藤岡です。

[#36282] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Tanaka Akira <akr@...> 2008/09/12

In article <48C8A83E.8000200@rabbix.jp>,

[#36289] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/13

藤岡です。

[#36332] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — "NARUSE, Yui" <naruse@...> 2008/09/16

成瀬です。

[#36341] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Tietew <tietew@...> 2008/09/17

[#36342] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/17

藤岡です。

[#36345] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Tietew <tietew@...> 2008/09/17

[#36384] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/19

藤岡です。

[#36422] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/21

藤岡です。

[#36425] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Kazuhiro NISHIYAMA <zn@...> 2008/09/21

西山和広です。

[#36427] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/21

藤岡です。

[#36428] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — "NARUSE, Yui" <naruse@...> 2008/09/21

成瀬です。

[#36430] Re: [Feature #542] cgi.rb : CGI::unescape return encoding — Fujioka <fuj@...> 2008/09/21

藤岡です。

[#36147] GNU iconv dependency — Takahiro Kambe <taca@...>

こんにちは。

28 messages 2008/09/04
[#36222] Re: GNU iconv dependency — "NARUSE, Yui" <naruse@...> 2008/09/08

成瀬です。

[#36248] Re: GNU iconv dependency — Takahiro Kambe <taca@...> 2008/09/10

In message <48C544C3.6090607@airemix.jp>

[#36249] Re: GNU iconv dependency — "NARUSE, Yui" <naruse@...> 2008/09/10

成瀬です。

[#36250] Re: GNU iconv dependency — Takahiro Kambe <taca@...> 2008/09/10

In message <48C7D1E1.5040403@airemix.jp>

[#36256] Re: GNU iconv dependency — "NARUSE, Yui" <naruse@...> 2008/09/10

Takahiro Kambe wrote:

[#36257] Re: GNU iconv dependency — Takahiro Kambe <taca@...> 2008/09/10

In message <48C7EC6B.5060306@airemix.jp>

[#36258] Re: GNU iconv dependency — "NARUSE, Yui" <naruse@...> 2008/09/10

Takahiro Kambe wrote:

[#36259] Re: GNU iconv dependency — Takahiro Kambe <taca@...> 2008/09/10

In message <48C7F8DD.7060001@airemix.jp>

[#36281] 合成文字の2コードポイント目 — "NARUSE, Yui" <naruse@...>

成瀬です。

24 messages 2008/09/12
[#36283] Re: 合成文字の2コードポイント目 — Yukihiro Matsumoto <matz@...> 2008/09/13

まつもと ゆきひろです

[#36286] Re: 合成文字の2コードポイント目 — Tanaka Akira <akr@...> 2008/09/13

In article <E1KeKG9-0004NC-Jb@x61.netlab.jp>,

[#36287] Re: 合成文字の2コードポイント目 — Yukihiro Matsumoto <matz@...> 2008/09/13

まつもと ゆきひろです

[#36292] Re: 合成文字の2コードポイント目 — Tanaka Akira <akr@...> 2008/09/14

In article <E1KeRWe-00037N-Vb@x61.netlab.jp>,

[#36293] Re: 合成文字の2コードポイント目 — "NARUSE, Yui" <naruse@...> 2008/09/14

成瀬です。

[#36304] Re: 合成文字の2コードポイント目 — Tanaka Akira <akr@...> 2008/09/15

In article <48CC86FD.3000409@airemix.jp>,

[#36306] Re: 合成文字の2コードポイント目 — "NARUSE, Yui" <naruse@...> 2008/09/15

Tanaka Akira wrote:

[#36310] Re: 合成文字の2コードポイント目 — Tanaka Akira <akr@...> 2008/09/15

In article <48CE068E.3080701@airemix.jp>,

[#36314] Re: 合成文字の2コードポイント目 — "NARUSE, Yui" <naruse@...> 2008/09/15

成瀬です。

[#36315] Re: 合成文字の2コードポイント目 — Yukihiro Matsumoto <matz@...> 2008/09/15

まつもと ゆきひろです

[#36316] Re: 合成文字の2コードポイント目 — Tanaka Akira <akr@...> 2008/09/16

In article <E1KfNyE-0005XO-0P@x61.netlab.jp>,

[#36317] Re: 合成文字の2コードポイント目 — Yukihiro Matsumoto <matz@...> 2008/09/16

まつもと ゆきひろです

[#36290] adding Pathname#abspath() — "Akinori MUSHA" <knu@...>

 SUSv3のrealpath(3)の項には、存在しないコンポーネントがあったら

18 messages 2008/09/13
[#36291] adding Pathname#resolve (was: adding Pathname#abspath()) — "Akinori MUSHA" <knu@...> 2008/09/13

 名前が良くなかったですね。Pathname#resolve()でどうでしょうか。

[#36297] Re: adding Pathname#resolve (was: adding Pathname#abspath()) — Tanaka Akira <akr@...> 2008/09/14

In article <86wshfn0zl.knu@iDaemons.org>,

[#36308] Re: adding Pathname#resolve (was: adding Pathname#abspath()) — "Akinori MUSHA" <knu@...> 2008/09/15

At Sun, 14 Sep 2008 23:20:56 +0900,

[#36437] Re: adding Pathname#resolve (was: adding Pathname#abspath()) — Tanaka Akira <akr@...> 2008/09/22

In article <86vdwxn9rh.knu@iDaemons.org>,

[#36456] Re: adding Pathname#resolve (was: adding Pathname#abspath()) — "Akinori MUSHA" <knu@...> 2008/09/22

At Mon, 22 Sep 2008 12:43:18 +0900,

[#36489] Re: adding Pathname#resolve (was: adding Pathname#abspath()) — Tanaka Akira <akr@...> 2008/09/23

In article <86od2gcvvj.knu@iDaemons.org>,

[#36560] Re: adding Pathname#resolve (was: adding Pathname#abspath()) — "Akinori MUSHA" <knu@...> 2008/09/25

At Wed, 24 Sep 2008 02:02:59 +0900,

[#36582] Re: adding Pathname#resolve (was: adding Pathname#abspath()) — Tanaka Akira <akr@...> 2008/09/25

In article <86ljxgd0jt.knu@iDaemons.org>,

[#36325] mathn (#**) — Tadayoshi Funaba <tadf@...>

mahtn した場合、

16 messages 2008/09/16

[#36346] add "Error" suffix for Encoding Exceptions — Tadashi Saito <shiba@...2.accsnet.ne.jp>

斎藤と申します。

18 messages 2008/09/17
[#36356] Re: add "Error" suffix for Encoding Exceptions — "NARUSE, Yui" <naruse@...> 2008/09/17

成瀬です。

[#36366] Re: add "Error" suffix for Encoding Exceptions — Tadashi Saito <shiba@...2.accsnet.ne.jp> 2008/09/18

斎藤と申します。

[#36371] Re: add "Error" suffix for Encoding Exceptions — "Yusuke ENDOH" <mame@...> 2008/09/18

遠藤です。

[#36349] Complex/image — Tadayoshi Funaba <tadf@...>

[ruby-math:00543] を読んで、image はやめて imag に変更したらどうか、つ

16 messages 2008/09/17
[#36363] Re: Complex/image — keiju@... (石塚圭樹) 2008/09/18

けいじゅ@いしつかです.

[#36372] Re: Complex/image — Tadayoshi Funaba <tadf@...> 2008/09/18

> imageとimagの件ですが, 現行では両方定義されているけど, imageは削除って

[#36448] [Feature #583] TmpdirとTempfile — Yuki Sonoda <redmine@...>

Feature #583: TmpdirとTempfile

11 messages 2008/09/22

[#36461] {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...>

Complex と Rational では、Unify が定義された場合、可能なら整数等に正規

36 messages 2008/09/22
[#36468] Re: {Complex,Rational}::Unify — Yukihiro Matsumoto <matz@...> 2008/09/22

まつもと ゆきひろです

[#36472] Re: {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...> 2008/09/22

> mathn.rbはcomplex.rbなどと同一の作者が同時に(一体として)作成

[#36483] Re: {Complex,Rational}::Unify — keiju@... (石塚圭樹) 2008/09/23

けいじゅ@いしつかです.

[#36487] Re: {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...> 2008/09/23

> まず, Unifyなしで動作するように, mathn側で対応させてください. それから,

[#36520] Re: {Complex,Rational}::Unify — keiju@... (石塚圭樹) 2008/09/24

けいじゅ@いしつかです.

[#36561] Re: {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...> 2008/09/25

> mathn動かなくなっていると思うので, あまり大丈夫ではありません.

[#36566] Re: {Complex,Rational}::Unify — keiju@... (石塚圭樹) 2008/09/25

けいじゅ@いしつかです.

[#36605] Re: {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...> 2008/09/26

> これらのメソッドを呼び出すのではなく, 再定義することによって振る舞いを

[#36608] Re: {Complex,Rational}::Unify — keiju@... (石塚圭樹) 2008/09/26

けいじゅ@いしつかです.

[#36609] Re: {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...> 2008/09/26

> 当然, mathnで対応することはできます.

[#36651] Re: {Complex,Rational}::Unify — keiju@... (石塚圭樹) 2008/10/01

けいじゅ@いしつかです.

[#36654] Re: {Complex,Rational}::Unify — Tadayoshi Funaba <tadf@...> 2008/10/02

> >それで、僕が改めて言うまでもないことですが、mathn は石塚さんの担当なの

[#36657] Re: {Complex,Rational}::Unify — keiju@... (石塚圭樹) 2008/10/03

けいじゅ@いしつかです.

[#36658] Re: {Complex,Rational}::Unify — Yukihiro Matsumoto <matz@...> 2008/10/03

まつもと ゆきひろです

[#36883] Re: {Complex,Rational}::Unify — keiju@... (石塚圭樹) 2008/10/23

けいじゅ@いしつかです.

[#36903] Re: {Complex,Rational}::Unify — Yukihiro Matsumoto <matz@...> 2008/10/24

まつもと ゆきひろです

[#36512] Encoding.default_internal のためのパッチ — Martin Duerst <duerst@...>

[ruby-core:18774] に Michael Selig から Encoding::default_internal

57 messages 2008/09/24
[#36517] Re: Encoding.default_internal のためのパッチ — "NARUSE, Yui" <naruse@...> 2008/09/24

成瀬です。

[#36523] Re: Encoding.default_internal のためのパッチ — Yukihiro Matsumoto <matz@...> 2008/09/24

まつもと ゆきひろです

[#36550] Re: Encoding.default_internal のためのパッチ — Nobuyoshi Nakada <nobu@...> 2008/09/25

なかだです。

[#36551] Re: Encoding.default_internal のためのパッチ — Yukihiro Matsumoto <matz@...> 2008/09/25

まつもと ゆきひろです

[#36554] Re: Encoding.default_internal のためのパッチ — Martin Duerst <duerst@...> 2008/09/25

At 14:58 08/09/25, Yukihiro Matsumoto wrote:

[#36556] Re: Encoding.default_internal のためのパッチ — Yukihiro Matsumoto <matz@...> 2008/09/25

まつもと ゆきひろです

[#36547] [Feature #600] cgi.rbのマルチパートフォームの受信は1.8との互換性が低い — Takeyuki Fujioka <redmine@...>

Feature #600: cgi.rbのマルチパートフォームの受信は1.8との互換性が低い

7 messages 2008/09/25

[#36628] [IA-64]BigDecimal#sqrt の仕様 — TAKANO Mitsuhiro <takano32@...>

こんにちは

15 messages 2008/09/30
[#36630] Re: [IA-64]BigDecimal#sqrt の仕様 — TAKANO Mitsuhiro <takano32@...> 2008/09/30

高野です。

[ruby-dev:36290] adding Pathname#abspath()

From: "Akinori MUSHA" <knu@...>
Date: 2008-09-13 21:11:55 UTC
List: ruby-dev #36290
 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/

In This Thread

Prev Next