Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: e2f2fd27091d
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 4f6ac41bde3b
Choose a head ref
  • 2 commits
  • 4 files changed
  • 1 contributor

Commits on Jun 17, 2015

  1. treat uri-like paths differently when finding parent directory

    especially treat the "root" of the uri as root, i.e. File.dirname("file:/")
    is "file:/", File.dirname("uri:classloader:/") is "uri:classloader", etc
    
    fixes #2966
    
    Sponsored by Lookout Inc.
    mkristian committed Jun 17, 2015
    Copy the full SHA
    2c90f46 View commit details
  2. Copy the full SHA
    4f6ac41 View commit details
Showing with 37 additions and 2 deletions.
  1. +8 −0 core/src/main/java/org/jruby/RubyFile.java
  2. +1 −1 maven/jruby/src/it/j2ee_tomcat_rack/Mavenfile
  3. +1 −1 maven/jruby/src/it/j2ee_tomcat_rack/pom.xml
  4. +27 −0 test/test_file.rb
8 changes: 8 additions & 0 deletions core/src/main/java/org/jruby/RubyFile.java
Original file line number Diff line number Diff line change
@@ -672,6 +672,14 @@ public static String dirname(ThreadContext context, String jfilename) {
minPathLength = 3;
}

// address all the url like paths first
if (name.contains(":/") || name.contains("!/")) {
int start = Math.max(name.indexOf(":/"), name.indexOf("!/"));
String path = dirname(context, name.substring(start + 2));
if (path.equals(".")) path = "";
return name.substring(0, start + 2) + path;
}

while (name.length() > minPathLength && name.charAt(name.length() - 1) == '/') {
trimmedSlashes = true;
name = name.substring(0, name.length() - 1);
2 changes: 1 addition & 1 deletion maven/jruby/src/it/j2ee_tomcat_rack/Mavenfile
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ packaging 'war'
# get jruby dependencies
properties( 'jruby.version' => '@project.version@',
'jruby.home' => '../../../../../',
'jruby.plugins.version' => '1.0.9',
'jruby.plugins.version' => '1.0.7',
'project.build.sourceEncoding' => 'utf-8',
'public.dir' => '${basedir}/public' )

2 changes: 1 addition & 1 deletion maven/jruby/src/it/j2ee_tomcat_rack/pom.xml
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
<properties>
<jruby.home>../../../../../</jruby.home>
<jruby.version>@project.version@</jruby.version>
<jruby.plugins.version>1.0.9</jruby.plugins.version>
<jruby.plugins.version>1.0.7</jruby.plugins.version>
<tesla.dump.pom>pom.xml</tesla.dump.pom>
<public.dir>${basedir}/public</public.dir>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
27 changes: 27 additions & 0 deletions test/test_file.rb
Original file line number Diff line number Diff line change
@@ -308,6 +308,33 @@ def test_dirname
assert_equal("/", File.dirname("/"))
end

def test_dirname_file_protocol
assert_equal("file:/a", File.dirname("file:/a/b"))
assert_equal("file:/", File.dirname("file:/a"))
assert_equal("file:/", File.dirname("file:/"))
assert_equal("uri:file:/a", File.dirname("uri:file:/a/b"))
assert_equal("uri:file:/", File.dirname("uri:file:/a"))
assert_equal("uri:file:/", File.dirname("uri:file:/"))
end

def test_dirname_uri_classloader_protocol
assert_equal("uri:classloader:/a", File.dirname("uri:classloader:/a/b"))
assert_equal("uri:classloader:/", File.dirname("uri:classloader:/a"))
assert_equal("uri:classloader:/", File.dirname("uri:classloader:/"))
end

def test_dirname_jar_protocol
assert_equal("/my.jar!/a", File.dirname("/my.jar!/a/b"))
assert_equal("/my.jar!/", File.dirname("/my.jar!/a"))
assert_equal("/my.jar!/", File.dirname("/my.jar!/"))
assert_equal("file:/my.jar!/a", File.dirname("file:/my.jar!/a/b"))
assert_equal("file:/my.jar!/", File.dirname("file:/my.jar!/a"))
assert_equal("file:/my.jar!/", File.dirname("file:/my.jar!/"))
assert_equal("jar:file:/my.jar!/a", File.dirname("jar:file:/my.jar!/a/b"))
assert_equal("jar:file:/my.jar!/", File.dirname("jar:file:/my.jar!/a"))
assert_equal("jar:file:/my.jar!/", File.dirname("jar:file:/my.jar!/"))
end

def test_extname
assert_equal("", File.extname(""))
assert_equal("", File.extname("abc"))