[前][次][番号順一覧][スレッド一覧]

ruby-changes:59396

From: NAKAMURA <ko1@a...>
Date: Mon, 23 Dec 2019 11:56:30 +0900 (JST)
Subject: [ruby-changes:59396] 204dc3f39f (master): Revert "Should return "." for File.extname("file.") also on Windows"

https://git.ruby-lang.org/ruby.git/commit/?id=204dc3f39f

From 204dc3f39f12b4e2640555306bd1dd4530344277 Mon Sep 17 00:00:00 2001
From: NAKAMURA Usaku <usa@r...>
Date: Mon, 23 Dec 2019 11:54:25 +0900
Subject: Revert "Should return "." for File.extname("file.") also on Windows"

We want to introduce consistency and better compatibility with unixen,
but the Windows APIs doues not have consistency fundamentally and
we can not found any logical way...

This reverts commit 61aff0cd189e67fa6f2565639ad0128fa33b88fc.

diff --git a/file.c b/file.c
index 170455a..c46377b 100644
--- a/file.c
+++ b/file.c
@@ -4711,26 +4711,13 @@ ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc) https://github.com/ruby/ruby/blob/trunk/file.c#L4711
     while (*p) {
 	if (*p == '.' || istrailinggarbage(*p)) {
 #if USE_NTFS
-	    const char *first = 0, *last, *dot;
-	    if (*p == '.') first = p;
-	    last = p++;
-	    dot = last;
+	    const char *last = p++, *dot = last;
 	    while (istrailinggarbage(*p)) {
-		if (*p == '.') {
-		    dot = p;
-		    if (!first) {
-			first = p;
-		    }
-		}
+		if (*p == '.') dot = p;
 		p++;
 	    }
 	    if (!*p || isADS(*p)) {
-		if (first == dot && e == 0) {
-		    e = first;
-		}
-		else {
-		    p = last;
-		}
+		p = last;
 		break;
 	    }
 	    if (*last == '.' || dot > last) e = dot;
@@ -4779,7 +4766,8 @@ ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc) https://github.com/ruby/ruby/blob/trunk/file.c#L4766
  *     File.extname("test.rb")         #=> ".rb"
  *     File.extname("a/b/d/test.rb")   #=> ".rb"
  *     File.extname(".a/b/d/test.rb")  #=> ".rb"
- *     File.extname("foo.")            #=> "."
+ *     File.extname("foo.")            #=> "" on Windows
+ *     File.extname("foo.")            #=> "." on non-Windows
  *     File.extname("test")            #=> ""
  *     File.extname(".profile")        #=> ""
  *     File.extname(".profile.sh")     #=> ".sh"
diff --git a/spec/ruby/core/file/extname_spec.rb b/spec/ruby/core/file/extname_spec.rb
index 7929096..e9b53bc 100644
--- a/spec/ruby/core/file/extname_spec.rb
+++ b/spec/ruby/core/file/extname_spec.rb
@@ -23,14 +23,14 @@ describe "File.extname" do https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/file/extname_spec.rb#L23
   end
 
   describe "for a filename ending with a dot" do
-    ruby_version_is ""..."2.7" do
+    guard -> { platform_is :windows or ruby_version_is ""..."2.7" } do
       it "returns ''" do
         File.extname(".foo.").should == ""
         File.extname("foo.").should == ""
       end
     end
 
-    ruby_version_is "2.7" do
+    guard -> { platform_is_not :windows and ruby_version_is "2.7" } do
       it "returns '.'" do
         File.extname(".foo.").should == "."
         File.extname("foo.").should == "."
diff --git a/test/ruby/test_file_exhaustive.rb b/test/ruby/test_file_exhaustive.rb
index de4c21e..975bcb6 100644
--- a/test/ruby/test_file_exhaustive.rb
+++ b/test/ruby/test_file_exhaustive.rb
@@ -1268,19 +1268,19 @@ class TestFileExhaustive < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_file_exhaustive.rb#L1268
     infixes2 = infixes + [".ext "]
     appendixes = [""]
     if NTFS
-      appendixes << " " << [".", ".", ""] << "::$DATA" << "::$DATA.bar"
+      appendixes << " " << "." << "::$DATA" << "::$DATA.bar"
     else
       appendixes << [".", "."]
     end
     prefixes.each do |prefix|
-      appendixes.each do |appendix, ext = "", ext2 = ext|
+      appendixes.each do |appendix, ext = ""|
         infixes.each do |infix|
           path = "#{prefix}foo#{infix}#{appendix}"
           assert_equal(ext, File.extname(path), "File.extname(#{path.inspect})")
         end
         infixes2.each do |infix|
           path = "#{prefix}foo#{infix}.ext#{appendix}"
-          assert_equal(ext2.empty? ? ".ext" : appendix, File.extname(path), "File.extname(#{path.inspect})")
+          assert_equal(ext.empty? ? ".ext" : appendix, File.extname(path), "File.extname(#{path.inspect})")
         end
       end
     end
diff --git a/test/ruby/test_path.rb b/test/ruby/test_path.rb
index 64111ee..b35e942 100644
--- a/test/ruby/test_path.rb
+++ b/test/ruby/test_path.rb
@@ -239,7 +239,11 @@ class TestPath < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_path.rb#L239
       ext = '.'
     end
     assert_equal(ext, File.extname('a.rb.'))
-    assert_equal('.', File.extname('a.'))
+    if /mswin|bccwin|mingw/ =~ RUBY_PLATFORM
+      # trailing spaces and dots are ignored on NTFS.
+      ext = ''
+    end
+    assert_equal(ext, File.extname('a.'))
     assert_equal('', File.extname('.x'))
     assert_equal('', File.extname('..x'))
   end
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]