maven-resolver/add-support-for-blocked-repository.patch
2021-07-16 09:40:58 +08:00

185 lines
7.6 KiB
Diff

From 514cec19743c4f441f0137cd6d035422a046e6a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Boutemy?= <hboutemy@apache.org>
Date: Sun, 7 Mar 2021 08:48:37 +0100
Subject: [PATCH] [MRESOLVER-166] add support for blocked repository/mirror
---
.../aether/repository/RemoteRepository.java | 40 ++++++++++++++++++-
.../repository/DefaultMirrorSelector.java | 21 ++++++++--
2 files changed, 55 insertions(+), 6 deletions(-)
diff --git a/maven-resolver-api/src/main/java/org/eclipse/aether/repository/RemoteRepository.java b/maven-resolver-api/src/main/java/org/eclipse/aether/repository/RemoteRepository.java
index fd5c480..52fc894 100644
--- a/maven-resolver-api/src/main/java/org/eclipse/aether/repository/RemoteRepository.java
+++ b/maven-resolver-api/src/main/java/org/eclipse/aether/repository/RemoteRepository.java
@@ -59,6 +59,8 @@ public final class RemoteRepository
private final boolean repositoryManager;
+ private boolean blocked;
+
RemoteRepository( Builder builder )
{
if ( builder.prototype != null )
@@ -76,6 +78,7 @@ public final class RemoteRepository
repositoryManager =
( builder.delta & Builder.REPOMAN ) != 0 ? builder.repositoryManager
: builder.prototype.repositoryManager;
+ blocked = ( builder.delta & Builder.BLOCKED ) != 0 ? builder.blocked : builder.prototype.blocked;
mirroredRepositories =
( builder.delta & Builder.MIRRORED ) != 0 ? copy( builder.mirroredRepositories )
: builder.prototype.mirroredRepositories;
@@ -90,7 +93,8 @@ public final class RemoteRepository
proxy = builder.proxy;
authentication = builder.authentication;
repositoryManager = builder.repositoryManager;
- mirroredRepositories = copy( builder.mirroredRepositories );
+ blocked = builder.blocked;
+ mirroredRepositories = copy( builder.mirroredRepositories );
}
Matcher m = URL_PATTERN.matcher( url );
@@ -207,6 +211,16 @@ public final class RemoteRepository
return repositoryManager;
}
+ /**
+ * Indicates whether this repository is blocked against any download request.
+ *
+ * @return {@code true} if this repository is blocked against any download request, {@code false} otherwise.
+ */
+ public boolean isBlocked()
+ {
+ return blocked;
+ }
+
@Override
public String toString()
{
@@ -235,6 +249,11 @@ public final class RemoteRepository
{
buffer.append( ", managed" );
}
+ if ( isBlocked() )
+ {
+ buffer.append( ", blocked" );
+
+ }
buffer.append( ")" );
return buffer.toString();
}
@@ -294,7 +313,7 @@ public final class RemoteRepository
private static final RepositoryPolicy DEFAULT_POLICY = new RepositoryPolicy();
static final int ID = 0x0001, TYPE = 0x0002, URL = 0x0004, RELEASES = 0x0008, SNAPSHOTS = 0x0010,
- PROXY = 0x0020, AUTH = 0x0040, MIRRORED = 0x0080, REPOMAN = 0x0100;
+ PROXY = 0x0020, AUTH = 0x0040, MIRRORED = 0x0080, REPOMAN = 0x0100, BLOCKED = 0x0200;
int delta;
@@ -318,6 +337,8 @@ public final class RemoteRepository
boolean repositoryManager;
+ boolean blocked;
+
/**
* Creates a new repository builder.
*
@@ -574,6 +595,21 @@ public final class RemoteRepository
return this;
}
+ /**
+ * Marks the repository as blocked or not.
+ *
+ * @param blocked {@code true} if the repository should not be allowed to get any request.
+ * @return This builder for chaining, never {@code null}.
+ */
+ public Builder setBlocked( boolean blocked )
+ {
+ this.blocked = blocked;
+ if ( prototype != null )
+ {
+ delta( BLOCKED, this.blocked, prototype.isBlocked() );
+ }
+ return this;
+ }
}
}
diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
index c123b47..f493708 100644
--- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
+++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
@@ -39,6 +39,13 @@ public final class DefaultMirrorSelector
private final List<MirrorDef> mirrors = new ArrayList<MirrorDef>();
+ @Deprecated
+ public DefaultMirrorSelector add( String id, String url, String type, boolean repositoryManager,
+ String mirrorOfIds, String mirrorOfTypes )
+ {
+ return add( id, url, type, repositoryManager, false, mirrorOfIds, mirrorOfTypes );
+ }
+
/**
* Adds the specified mirror to this selector.
*
@@ -46,6 +53,7 @@ public final class DefaultMirrorSelector
* @param url The URL of the mirror, must not be {@code null}.
* @param type The content type of the mirror, must not be {@code null}.
* @param repositoryManager A flag whether the mirror is a repository manager or a simple server.
+ * @param blocked A flag whether the mirror blocks any download request.
* @param mirrorOfIds The identifier(s) of remote repositories to mirror, must not be {@code null}. Multiple
* identifiers can be separated by comma and additionally the wildcards "*" and "external:*" can be used
* to match all (external) repositories, prefixing a repo id with an exclamation mark allows to express
@@ -55,10 +63,10 @@ public final class DefaultMirrorSelector
* wildcard "*" and the "!" negation syntax are supported. For example "*,!p2".
* @return This selector for chaining, never {@code null}.
*/
- public DefaultMirrorSelector add( String id, String url, String type, boolean repositoryManager,
+ public DefaultMirrorSelector add( String id, String url, String type, boolean repositoryManager, boolean blocked,
String mirrorOfIds, String mirrorOfTypes )
{
- mirrors.add( new MirrorDef( id, url, type, repositoryManager, mirrorOfIds, mirrorOfTypes ) );
+ mirrors.add( new MirrorDef( id, url, type, repositoryManager, blocked, mirrorOfIds, mirrorOfTypes ) );
return this;
}
@@ -77,6 +85,8 @@ public final class DefaultMirrorSelector
builder.setRepositoryManager( mirror.repositoryManager );
+ builder.setBlocked( mirror.blocked );
+
if ( mirror.type != null && mirror.type.length() > 0 )
{
builder.setContentType( mirror.type );
@@ -253,17 +263,20 @@ public final class DefaultMirrorSelector
final boolean repositoryManager;
+ final boolean blocked;
+
final String mirrorOfIds;
final String mirrorOfTypes;
- MirrorDef( String id, String url, String type, boolean repositoryManager, String mirrorOfIds,
- String mirrorOfTypes )
+ MirrorDef( String id, String url, String type, boolean repositoryManager, boolean blocked, String mirrorOfIds,
+ String mirrorOfTypes )
{
this.id = id;
this.url = url;
this.type = type;
this.repositoryManager = repositoryManager;
+ this.blocked = blocked;
this.mirrorOfIds = mirrorOfIds;
this.mirrorOfTypes = mirrorOfTypes;
}
--
2.23.0