You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by st...@apache.org on 2017/01/09 09:18:39 UTC
[03/15] maven-resolver git commit: Optimized non-proxy host matching
in DefaultProxySelector
Optimized non-proxy host matching in DefaultProxySelector
Project: http://git-wip-us.apache.org/repos/asf/maven-resolver/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-resolver/commit/336477e6
Tree: http://git-wip-us.apache.org/repos/asf/maven-resolver/tree/336477e6
Diff: http://git-wip-us.apache.org/repos/asf/maven-resolver/diff/336477e6
Branch: refs/heads/master
Commit: 336477e64d8e6b036c57965663ce53687fd6e3b4
Parents: c05288d
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Tue Nov 11 14:51:10 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Tue Nov 11 14:51:10 2014 +0100
----------------------------------------------------------------------
.../util/repository/DefaultProxySelector.java | 48 +++++++++++++++-----
.../repository/DefaultProxySelectorTest.java | 28 ++++++------
2 files changed, 50 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/336477e6/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
index c761aa7..fc30c55 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;
+import java.util.regex.Pattern;
import org.eclipse.aether.repository.Proxy;
import org.eclipse.aether.repository.ProxySelector;
@@ -40,6 +41,10 @@ public final class DefaultProxySelector
*/
public DefaultProxySelector add( Proxy proxy, String nonProxyHosts )
{
+ if ( proxy == null )
+ {
+ throw new IllegalArgumentException( "proxy not specified" );
+ }
proxies.add( new ProxyDef( proxy, nonProxyHosts ) );
return this;
@@ -52,7 +57,7 @@ public final class DefaultProxySelector
String host = repository.getHost();
for ( ProxyDef proxy : proxies )
{
- if ( !isNonProxyHosts( host, proxy.nonProxyHosts ) )
+ if ( !proxy.nonProxyHosts.isNonProxyHost( host ) )
{
String key = proxy.proxy.getType().toLowerCase( Locale.ENGLISH );
if ( !candidates.containsKey( key ) )
@@ -86,22 +91,41 @@ public final class DefaultProxySelector
return ( proxy != null ) ? proxy.proxy : null;
}
- static boolean isNonProxyHosts( String host, String nonProxyHosts )
+ static class NonProxyHosts
{
- if ( host != null && nonProxyHosts != null && nonProxyHosts.length() > 0 )
+
+ private final Pattern[] patterns;
+
+ public NonProxyHosts( String nonProxyHosts )
+ {
+ List<Pattern> patterns = new ArrayList<Pattern>();
+ if ( nonProxyHosts != null )
+ {
+ for ( StringTokenizer tokenizer = new StringTokenizer( nonProxyHosts, "|" ); tokenizer.hasMoreTokens(); )
+ {
+ String pattern = tokenizer.nextToken();
+ pattern = pattern.replace( ".", "\\." ).replace( "*", ".*" );
+ patterns.add( Pattern.compile( pattern ) );
+ }
+ }
+ this.patterns = patterns.toArray( new Pattern[patterns.size()] );
+ }
+
+ boolean isNonProxyHost( String host )
{
- for ( StringTokenizer tokenizer = new StringTokenizer( nonProxyHosts, "|" ); tokenizer.hasMoreTokens(); )
+ if ( host != null )
{
- String pattern = tokenizer.nextToken();
- pattern = pattern.replace( ".", "\\." ).replace( "*", ".*" );
- if ( host.matches( pattern ) )
+ for ( Pattern pattern : patterns )
{
- return true;
+ if ( pattern.matcher( host ).matches() )
+ {
+ return true;
+ }
}
}
+ return false;
}
- return false;
}
static class ProxyDef
@@ -109,12 +133,12 @@ public final class DefaultProxySelector
final Proxy proxy;
- final String nonProxyHosts;
+ final NonProxyHosts nonProxyHosts;
public ProxyDef( Proxy proxy, String nonProxyHosts )
{
this.proxy = proxy;
- this.nonProxyHosts = nonProxyHosts;
+ this.nonProxyHosts = new NonProxyHosts( nonProxyHosts );
}
}
http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/336477e6/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
index ef25a86..1da7ac6 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2011 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -20,27 +20,27 @@ import org.junit.Test;
public class DefaultProxySelectorTest
{
- private boolean isNonProxyHosts( String host, String nonProxyHosts )
+ private boolean isNonProxyHost( String host, String nonProxyHosts )
{
- return DefaultProxySelector.isNonProxyHosts( host, nonProxyHosts );
+ return new DefaultProxySelector.NonProxyHosts( nonProxyHosts ).isNonProxyHost( host );
}
@Test
- public void testIsNonProxyHosts()
+ public void testIsNonProxyHost()
{
- assertFalse( isNonProxyHosts( "www.sonatype.org", null ) );
- assertFalse( isNonProxyHosts( "www.sonatype.org", "" ) );
+ assertFalse( isNonProxyHost( "www.sonatype.org", null ) );
+ assertFalse( isNonProxyHost( "www.sonatype.org", "" ) );
- assertTrue( isNonProxyHosts( "www.sonatype.org", "*" ) );
- assertTrue( isNonProxyHosts( "www.sonatype.org", "*.org" ) );
- assertTrue( isNonProxyHosts( "www.sonatype.org", "www.*" ) );
- assertTrue( isNonProxyHosts( "www.sonatype.org", "www.*.org" ) );
+ assertTrue( isNonProxyHost( "www.sonatype.org", "*" ) );
+ assertTrue( isNonProxyHost( "www.sonatype.org", "*.org" ) );
+ assertTrue( isNonProxyHost( "www.sonatype.org", "www.*" ) );
+ assertTrue( isNonProxyHost( "www.sonatype.org", "www.*.org" ) );
- assertFalse( isNonProxyHosts( "www.sonatype.org", "www.sonatype.com" ) );
- assertFalse( isNonProxyHosts( "www.sonatype.org", "*.com" ) );
- assertFalse( isNonProxyHosts( "www.sonatype.org", "sonatype.org" ) );
+ assertFalse( isNonProxyHost( "www.sonatype.org", "www.sonatype.com" ) );
+ assertFalse( isNonProxyHost( "www.sonatype.org", "*.com" ) );
+ assertFalse( isNonProxyHost( "www.sonatype.org", "sonatype.org" ) );
- assertTrue( isNonProxyHosts( "www.sonatype.org", "*.com|*.org" ) );
+ assertTrue( isNonProxyHost( "www.sonatype.org", "*.com|*.org" ) );
}
}