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: 4f6ac41bde3b
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 0046bed25394
Choose a head ref
  • 3 commits
  • 4 files changed
  • 1 contributor

Commits on Jun 17, 2015

  1. Copy the full SHA
    78502ad View commit details
  2. convert File.dirname("file:/my.jar!/a") to "file:/my.jar!" to avoid !…

    …// in uri
    
    Sponsored by Lookout Inc.
    mkristian committed Jun 17, 2015
    Copy the full SHA
    85d972c View commit details
  3. Copy the full SHA
    0046bed View commit details
Showing with 16 additions and 13 deletions.
  1. +10 −5 core/src/main/java/org/jruby/RubyFile.java
  2. +0 −1 maven/jruby/src/it/j2ee_tomcat_rack/Mavenfile
  3. +0 −1 maven/jruby/src/it/j2ee_tomcat_rack/pom.xml
  4. +6 −6 test/test_file.rb
15 changes: 10 additions & 5 deletions core/src/main/java/org/jruby/RubyFile.java
Original file line number Diff line number Diff line change
@@ -661,6 +661,7 @@ public static IRubyObject dirname(ThreadContext context, IRubyObject recv, IRuby
return runtime.newString(dirname(context, jfilename)).infectBy(filename);
}

private static Pattern PROTOCOL_PATTERN = Pattern.compile("^[a-z:]{2,}:/");
public static String dirname(ThreadContext context, String jfilename) {
String name = jfilename.replace('\\', '/');
int minPathLength = 1;
@@ -673,11 +674,15 @@ public static String dirname(ThreadContext context, String jfilename) {
}

// 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;
if (PROTOCOL_PATTERN.matcher(name).matches() || name.contains("!/")) {
int start = Math.max(name.indexOf(":/"), name.indexOf("!/")) + 2;
String path = dirname(context, name.substring(start));
if (path.equals(".") || path.equals("/")) path = "";
if (name.contains("!/") &&
(path.startsWith("/") || path.equals(""))) {
start = start - 1;
}
return name.substring(0, start) + path;
}

while (name.length() > minPathLength && name.charAt(name.length() - 1) == '/') {
1 change: 0 additions & 1 deletion maven/jruby/src/it/j2ee_tomcat_rack/Mavenfile
Original file line number Diff line number Diff line change
@@ -5,7 +5,6 @@ packaging 'war'

# get jruby dependencies
properties( 'jruby.version' => '@project.version@',
'jruby.home' => '../../../../../',
'jruby.plugins.version' => '1.0.7',
'project.build.sourceEncoding' => 'utf-8',
'public.dir' => '${basedir}/public' )
1 change: 0 additions & 1 deletion maven/jruby/src/it/j2ee_tomcat_rack/pom.xml
Original file line number Diff line number Diff line change
@@ -8,7 +8,6 @@
<packaging>war</packaging>
<name>j2ee_tomcat_rack</name>
<properties>
<jruby.home>../../../../../</jruby.home>
<jruby.version>@project.version@</jruby.version>
<jruby.plugins.version>1.0.7</jruby.plugins.version>
<tesla.dump.pom>pom.xml</tesla.dump.pom>
12 changes: 6 additions & 6 deletions test/test_file.rb
Original file line number Diff line number Diff line change
@@ -325,14 +325,14 @@ def test_dirname_uri_classloader_protocol

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("/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("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!/"))
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