Bug 448409 - Output being spammed with "Using mirror ..." messages when running Maven with -X option
Reduced debug logging for mirror selection to log a given repository pair only once per session Project: http://git-wip-us.apache.org/repos/asf/maven-resolver/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-resolver/commit/e6be118d Tree: http://git-wip-us.apache.org/repos/asf/maven-resolver/tree/e6be118d Diff: http://git-wip-us.apache.org/repos/asf/maven-resolver/diff/e6be118d Branch: refs/heads/master Commit: e6be118d62c465f4622bd59a6d7750c971ac9da6 Parents: 535df40 Author: Benjamin Bentmann <bentm...@sonatype.com> Authored: Tue Nov 11 15:04:58 2014 +0100 Committer: Benjamin Bentmann <bentm...@sonatype.com> Committed: Tue Nov 11 15:04:58 2014 +0100 ---------------------------------------------------------------------- .../impl/DefaultRemoteRepositoryManager.java | 58 +++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/e6be118d/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java ---------------------------------------------------------------------- diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java index ccb618a..8a54d62 100644 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java +++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java @@ -11,12 +11,14 @@ package org.eclipse.aether.internal.impl; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.ListIterator; import javax.inject.Inject; import javax.inject.Named; +import org.eclipse.aether.RepositoryCache; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.impl.RemoteRepositoryManager; import org.eclipse.aether.impl.UpdatePolicyAnalyzer; @@ -42,6 +44,39 @@ public class DefaultRemoteRepositoryManager implements RemoteRepositoryManager, Service { + private static final class LoggedMirror + { + + private final Object[] keys; + + public LoggedMirror( RemoteRepository original, RemoteRepository mirror ) + { + keys = new Object[] { mirror.getId(), mirror.getUrl(), original.getId(), original.getUrl() }; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + else if ( !( obj instanceof LoggedMirror ) ) + { + return false; + } + LoggedMirror that = (LoggedMirror) obj; + return Arrays.equals( keys, that.keys ); + } + + @Override + public int hashCode() + { + return Arrays.hashCode( keys ); + } + + } + private Logger logger = NullLoggerFactory.LOGGER; private UpdatePolicyAnalyzer updatePolicyAnalyzer; @@ -121,8 +156,7 @@ public class DefaultRemoteRepositoryManager if ( mirrorRepository != null ) { - logger.debug( "Using mirror " + mirrorRepository.getId() + " (" + mirrorRepository.getUrl() - + ") for " + recessiveRepository.getId() + " (" + recessiveRepository.getUrl() + ")." ); + logMirror( session, recessiveRepository, mirrorRepository ); repository = mirrorRepository; } } @@ -179,6 +213,26 @@ public class DefaultRemoteRepositoryManager return result; } + private void logMirror( RepositorySystemSession session, RemoteRepository original, RemoteRepository mirror ) + { + if ( !logger.isDebugEnabled() ) + { + return; + } + RepositoryCache cache = session.getCache(); + if ( cache != null ) + { + Object key = new LoggedMirror( original, mirror ); + if ( cache.get( session, key ) != null ) + { + return; + } + cache.put( session, key, Boolean.TRUE ); + } + logger.debug( "Using mirror " + mirror.getId() + " (" + mirror.getUrl() + ") for " + original.getId() + " (" + + original.getUrl() + ")." ); + } + private String getKey( RemoteRepository repository ) { return repository.getId();