mirror of
https://github.com/apache/archiva.git
synced 2025-02-21 09:24:54 +00:00
Fixing Index context creation
This commit is contained in:
parent
0ce53483a8
commit
a1b92c562f
@ -23,9 +23,11 @@
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.CopyOption;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.Comparator;
|
||||
import java.util.Optional;
|
||||
@ -218,4 +220,22 @@ public static void unzip(Path zipFile, Path destinationPath) throws IOException
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void copyContent(Path srcDir, Path destinationDir, boolean overwrite) throws IOException
|
||||
{
|
||||
CopyOption[] copyOption = overwrite ? new CopyOption[]{StandardCopyOption.REPLACE_EXISTING} : new CopyOption[]{};
|
||||
Files.walk(srcDir).forEach(a -> {
|
||||
Path b = destinationDir.resolve(srcDir.relativize( a ));
|
||||
try {
|
||||
Files.copy(a, b, copyOption);
|
||||
} catch (IOException e) {
|
||||
log.error( "Could not copy file {} to {}: {}", a, b, e.getMessage( ) );
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void copyContent(Path srcDir, Path destinationDir) throws IOException {
|
||||
copyContent( srcDir, destinationDir, true );
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,8 @@
|
||||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration;
|
||||
import org.apache.archiva.event.EventHandler;
|
||||
import org.apache.archiva.event.EventType;
|
||||
import org.apache.archiva.repository.base.BasicManagedRepository;
|
||||
import org.apache.archiva.repository.base.BasicRemoteRepository;
|
||||
import org.apache.archiva.repository.EditableManagedRepository;
|
||||
@ -37,6 +39,7 @@
|
||||
import org.apache.archiva.repository.RepositoryProvider;
|
||||
import org.apache.archiva.repository.RepositoryType;
|
||||
import org.apache.archiva.event.Event;
|
||||
import org.apache.archiva.repository.event.RepositoryEvent;
|
||||
import org.apache.archiva.repository.features.ArtifactCleanupFeature;
|
||||
import org.apache.archiva.repository.features.IndexCreationFeature;
|
||||
import org.apache.archiva.repository.features.RemoteIndexFeature;
|
||||
@ -280,5 +283,8 @@ public void updateRepositoryGroupInstance(EditableRepositoryGroup repositoryGrou
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void addRepositoryEventHandler( EventHandler<? super RepositoryEvent> eventHandler )
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration;
|
||||
import org.apache.archiva.event.EventHandler;
|
||||
import org.apache.archiva.repository.base.BasicManagedRepository;
|
||||
import org.apache.archiva.repository.base.BasicRemoteRepository;
|
||||
import org.apache.archiva.repository.EditableManagedRepository;
|
||||
@ -37,6 +38,7 @@
|
||||
import org.apache.archiva.repository.RepositoryGroup;
|
||||
import org.apache.archiva.repository.RepositoryProvider;
|
||||
import org.apache.archiva.repository.RepositoryType;
|
||||
import org.apache.archiva.repository.event.RepositoryEvent;
|
||||
import org.apache.archiva.repository.features.ArtifactCleanupFeature;
|
||||
import org.apache.archiva.repository.features.IndexCreationFeature;
|
||||
import org.apache.archiva.repository.features.RemoteIndexFeature;
|
||||
@ -253,6 +255,12 @@ public RepositoryGroupConfiguration getRepositoryGroupConfiguration( RepositoryG
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRepositoryEventHandler( EventHandler<? super RepositoryEvent> eventHandler )
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository )
|
||||
|
@ -76,15 +76,9 @@ public class DefaultRepositoryGroupAdmin
|
||||
@Inject
|
||||
private ManagedRepositoryAdmin managedRepositoryAdmin;
|
||||
|
||||
@Inject
|
||||
@Named("mergedRemoteIndexesScheduler#default")
|
||||
private MergedRemoteIndexesScheduler mergedRemoteIndexesScheduler;
|
||||
|
||||
@Inject
|
||||
private RepositoryRegistry repositoryRegistry;
|
||||
|
||||
private Path groupsDirectory;
|
||||
|
||||
@PostConstruct
|
||||
public void baseInit() {
|
||||
this.repositoryRegistry.registerEventHandler( EventType.ROOT, this );
|
||||
@ -92,29 +86,6 @@ public void baseInit() {
|
||||
|
||||
public void initialize()
|
||||
{
|
||||
String appServerBase = getRegistry().getString( "appserver.base" );
|
||||
groupsDirectory = Paths.get( appServerBase, "groups" );
|
||||
if ( !Files.exists(groupsDirectory) )
|
||||
{
|
||||
Files.exists(groupsDirectory);
|
||||
}
|
||||
|
||||
for ( org.apache.archiva.repository.RepositoryGroup repositoryGroup : repositoryRegistry.getRepositoryGroups() )
|
||||
{
|
||||
mergedRemoteIndexesScheduler.schedule( repositoryGroup,
|
||||
getMergedIndexDirectory( repositoryGroup.getId() ));
|
||||
// create the directory for each group if not exists
|
||||
Path groupPath = groupsDirectory.resolve(repositoryGroup.getId() );
|
||||
if ( !Files.exists(groupPath) )
|
||||
{
|
||||
try {
|
||||
Files.createDirectories(groupPath);
|
||||
} catch (IOException e) {
|
||||
log.error("Could not create directory {}", groupPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -167,7 +138,6 @@ public Boolean addRepositoryGroup( RepositoryGroup repositoryGroup, AuditInforma
|
||||
}
|
||||
|
||||
triggerAuditEvent( repositoryGroup.getId(), null, AuditEvent.ADD_REPO_GROUP, auditInformation );
|
||||
mergedRemoteIndexesScheduler.schedule( repositoryRegistry.getRepositoryGroup( repositoryGroup.getId()), getMergedIndexDirectory( repositoryGroup.getId() ) );
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@ -183,10 +153,7 @@ public Boolean deleteRepositoryGroup( String repositoryGroupId, AuditInformation
|
||||
log.error("Removal of repository group {} failed: {}", repositoryGroup.getId(), e.getMessage(), e);
|
||||
throw new RepositoryAdminException("Removal of repository failed: " + e.getMessage(), e);
|
||||
}
|
||||
mergedRemoteIndexesScheduler.unschedule(
|
||||
repositoryGroup );
|
||||
triggerAuditEvent( repositoryGroupId, null, AuditEvent.DELETE_REPO_GROUP, auditInformation );
|
||||
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@ -222,8 +189,6 @@ private Boolean updateRepositoryGroup( RepositoryGroup repositoryGroup, AuditInf
|
||||
}
|
||||
|
||||
org.apache.archiva.repository.RepositoryGroup rg = repositoryRegistry.getRepositoryGroup( repositoryGroup.getId( ) );
|
||||
mergedRemoteIndexesScheduler.unschedule( rg );
|
||||
mergedRemoteIndexesScheduler.schedule( rg, getMergedIndexDirectory( repositoryGroup.getId() ) );
|
||||
triggerAuditEvent( repositoryGroup.getId(), null, AuditEvent.MODIFY_REPO_GROUP, auditInformation );
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration;
|
||||
import org.apache.archiva.event.EventHandler;
|
||||
import org.apache.archiva.repository.event.RepositoryEvent;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
@ -180,4 +181,12 @@ public interface RepositoryProvider extends EventHandler
|
||||
* @throws RepositoryException if the data cannot be converted
|
||||
*/
|
||||
RepositoryGroupConfiguration getRepositoryGroupConfiguration(RepositoryGroup repositoryGroup) throws RepositoryException;
|
||||
|
||||
/**
|
||||
* This event handler is registered to all newly created repositories immediately after creation. This may be needed by
|
||||
* some components to get events right after creation of the instance.
|
||||
*
|
||||
* @param eventHandler the event handler instance
|
||||
*/
|
||||
void addRepositoryEventHandler( EventHandler<? super RepositoryEvent> eventHandler);
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -30,6 +30,8 @@
|
||||
import org.apache.archiva.repository.RepositoryProvider;
|
||||
import org.apache.archiva.repository.RepositoryType;
|
||||
import org.apache.archiva.repository.event.RepositoryEvent;
|
||||
import org.apache.archiva.repository.features.IndexCreationFeature;
|
||||
import org.apache.archiva.repository.storage.StorageAsset;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -38,6 +40,9 @@
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
import javax.inject.Named;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
@ -65,6 +70,8 @@ public class RepositoryGroupHandler
|
||||
|
||||
private Map<String, RepositoryGroup> repositoryGroups = new HashMap<>();
|
||||
|
||||
private Path groupsDirectory;
|
||||
|
||||
/**
|
||||
* Creates a new instance. All dependencies are injected on the constructor.
|
||||
* @param repositoryRegistry the registry. To avoid circular dependencies via DI, this class registers itself on the registry.
|
||||
@ -84,14 +91,67 @@ private void init() {
|
||||
log.debug( "Initializing repository group handler " + repositoryRegistry.toString( ) );
|
||||
// We are registering this class on the registry. This is necessary to avoid circular dependencies via injection.
|
||||
this.repositoryRegistry.registerGroupHandler( this );
|
||||
initializeStorage();
|
||||
}
|
||||
|
||||
public void initializeFromConfig() {
|
||||
this.repositoryGroups.clear();
|
||||
this.repositoryGroups.putAll( getRepositorGroupsFromConfig( ) );
|
||||
this.repositoryGroups.putAll( getRepositoryGroupsFromConfig( ) );
|
||||
for (RepositoryGroup group : this.repositoryGroups.values()) {
|
||||
initializeGroup( group );
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, RepositoryGroup> getRepositorGroupsFromConfig() {
|
||||
private void initializeStorage() {
|
||||
Path baseDir = this.configurationHandler.getArchivaConfiguration( ).getRepositoryGroupBaseDir( );
|
||||
if (!Files.exists( baseDir) ) {
|
||||
try
|
||||
{
|
||||
Files.createDirectories( baseDir );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
log.error( "Could not create group base directory: {}", e.getMessage( ), e );
|
||||
}
|
||||
}
|
||||
this.groupsDirectory = baseDir;
|
||||
}
|
||||
|
||||
private void initializeGroup(RepositoryGroup repositoryGroup) {
|
||||
StorageAsset indexDirectoy = getMergedIndexDirectory( repositoryGroup );
|
||||
if (!indexDirectoy.exists()) {
|
||||
try
|
||||
{
|
||||
indexDirectoy.create( );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
log.error( "Could not create index directory {} for group {}: {}", indexDirectoy, repositoryGroup.getId( ), e.getMessage( ) );
|
||||
}
|
||||
}
|
||||
Path groupPath = groupsDirectory.resolve(repositoryGroup.getId() );
|
||||
if ( !Files.exists(groupPath) )
|
||||
{
|
||||
try {
|
||||
Files.createDirectories(groupPath);
|
||||
} catch (IOException e) {
|
||||
log.error("Could not create repository group directory {}", groupPath);
|
||||
}
|
||||
}
|
||||
mergedRemoteIndexesScheduler.schedule( repositoryGroup,
|
||||
indexDirectoy);
|
||||
}
|
||||
|
||||
public StorageAsset getMergedIndexDirectory( RepositoryGroup group )
|
||||
{
|
||||
if (group!=null) {
|
||||
return group.getFeature( IndexCreationFeature.class).get().getLocalIndexPath();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, RepositoryGroup> getRepositoryGroupsFromConfig() {
|
||||
try {
|
||||
List<RepositoryGroupConfiguration> repositoryGroupConfigurations =
|
||||
this.configurationHandler.getBaseConfiguration().getRepositoryGroups();
|
||||
@ -150,6 +210,7 @@ public RepositoryGroup putRepositoryGroup( RepositoryGroup repositoryGroup ) thr
|
||||
RepositoryGroup originRepoGroup = repositoryGroups.put(id, repositoryGroup);
|
||||
try {
|
||||
if (originRepoGroup != null && originRepoGroup != repositoryGroup) {
|
||||
this.mergedRemoteIndexesScheduler.unschedule( originRepoGroup );
|
||||
originRepoGroup.close();
|
||||
}
|
||||
RepositoryProvider provider = repositoryRegistry.getProvider( repositoryGroup.getType());
|
||||
@ -162,6 +223,7 @@ public RepositoryGroup putRepositoryGroup( RepositoryGroup repositoryGroup ) thr
|
||||
}
|
||||
configuration.addRepositoryGroup(newCfg);
|
||||
repositoryRegistry.saveConfiguration(configuration);
|
||||
initializeGroup( repositoryGroup );
|
||||
return repositoryGroup;
|
||||
} catch (Exception e) {
|
||||
// Rollback
|
||||
@ -187,19 +249,19 @@ public RepositoryGroup putRepositoryGroup( RepositoryGroupConfiguration reposito
|
||||
final String id = repositoryGroupConfiguration.getId();
|
||||
final RepositoryType repositoryType = RepositoryType.valueOf(repositoryGroupConfiguration.getType());
|
||||
Configuration configuration = this.configurationHandler.getBaseConfiguration();
|
||||
RepositoryGroup repo = repositoryGroups.get(id);
|
||||
RepositoryGroupConfiguration oldCfg = repo != null ? repositoryRegistry.getProvider(repositoryType).getRepositoryGroupConfiguration(repo) : null;
|
||||
repo = putRepositoryGroup(repositoryGroupConfiguration, configuration);
|
||||
RepositoryGroup repositoryGroup = repositoryGroups.get(id);
|
||||
RepositoryGroupConfiguration oldCfg = repositoryGroup != null ? repositoryRegistry.getProvider(repositoryType).getRepositoryGroupConfiguration(repositoryGroup) : null;
|
||||
repositoryGroup = putRepositoryGroup(repositoryGroupConfiguration, configuration);
|
||||
try {
|
||||
repositoryRegistry.saveConfiguration(configuration);
|
||||
} catch ( IndeterminateConfigurationException | RegistryException e) {
|
||||
if (oldCfg != null) {
|
||||
repositoryRegistry.getProvider(repositoryType).updateRepositoryGroupInstance((EditableRepositoryGroup) repo, oldCfg);
|
||||
repositoryRegistry.getProvider(repositoryType).updateRepositoryGroupInstance((EditableRepositoryGroup) repositoryGroup, oldCfg);
|
||||
}
|
||||
log.error("Could not save the configuration for repository group {}: {}", id, e.getMessage(), e);
|
||||
throw new RepositoryException("Could not save the configuration for repository group " + id + ": " + e.getMessage());
|
||||
}
|
||||
return repo;
|
||||
return repositoryGroup;
|
||||
}
|
||||
|
||||
public RepositoryGroup putRepositoryGroup( RepositoryGroupConfiguration repositoryGroupConfiguration, Configuration configuration ) throws RepositoryException {
|
||||
@ -209,6 +271,7 @@ public RepositoryGroup putRepositoryGroup( RepositoryGroupConfiguration reposito
|
||||
setRepositoryGroupDefaults(repositoryGroupConfiguration);
|
||||
if (repositoryGroups.containsKey(id)) {
|
||||
repo = repositoryGroups.get(id);
|
||||
this.mergedRemoteIndexesScheduler.unschedule( repo );
|
||||
if (repo instanceof EditableRepositoryGroup) {
|
||||
repositoryRegistry.getProvider(repoType).updateRepositoryGroupInstance((EditableRepositoryGroup) repo, repositoryGroupConfiguration);
|
||||
} else {
|
||||
@ -220,6 +283,7 @@ public RepositoryGroup putRepositoryGroup( RepositoryGroupConfiguration reposito
|
||||
}
|
||||
updateRepositoryReferences(repositoryRegistry.getProvider(repoType), repo, repositoryGroupConfiguration);
|
||||
replaceOrAddRepositoryConfig(repositoryGroupConfiguration, configuration);
|
||||
initializeGroup( repo );
|
||||
return repo;
|
||||
}
|
||||
|
||||
@ -263,6 +327,7 @@ public void removeRepositoryGroup( final String id ) throws RepositoryException
|
||||
try {
|
||||
repo = repositoryGroups.remove(id);
|
||||
if (repo != null) {
|
||||
this.mergedRemoteIndexesScheduler.unschedule( repo );
|
||||
repo.close();
|
||||
Configuration configuration = this.configurationHandler.getBaseConfiguration();
|
||||
RepositoryGroupConfiguration cfg = configuration.findRepositoryGroupById(id);
|
||||
@ -286,6 +351,7 @@ public void removeRepositoryGroup( String id, Configuration configuration ) thro
|
||||
if (repo != null) {
|
||||
repo = repositoryGroups.remove(id);
|
||||
if (repo != null) {
|
||||
this.mergedRemoteIndexesScheduler.unschedule( repo );
|
||||
repo.close();
|
||||
RepositoryGroupConfiguration cfg = configuration.findRepositoryGroupById(id);
|
||||
if (cfg != null) {
|
||||
@ -317,6 +383,7 @@ public void close() {
|
||||
for (RepositoryGroup group : repositoryGroups.values()) {
|
||||
try
|
||||
{
|
||||
mergedRemoteIndexesScheduler.unschedule( group );
|
||||
group.close( );
|
||||
} catch (Throwable e) {
|
||||
log.error( "Could not close repository group {}: {}", group.getId( ), e.getMessage( ) );
|
||||
|
@ -22,8 +22,10 @@
|
||||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration;
|
||||
import org.apache.archiva.event.EventHandler;
|
||||
import org.apache.archiva.repository.*;
|
||||
import org.apache.archiva.event.Event;
|
||||
import org.apache.archiva.repository.event.RepositoryEvent;
|
||||
import org.apache.archiva.repository.features.ArtifactCleanupFeature;
|
||||
import org.apache.archiva.repository.features.IndexCreationFeature;
|
||||
import org.apache.archiva.repository.features.RemoteIndexFeature;
|
||||
@ -232,6 +234,12 @@ public RepositoryGroupConfiguration getRepositoryGroupConfiguration(RepositoryGr
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRepositoryEventHandler( EventHandler<? super RepositoryEvent> eventHandler )
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
|
||||
|
@ -19,6 +19,7 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.archiva.common.utils.FileUtils;
|
||||
import org.apache.archiva.common.utils.PathUtil;
|
||||
import org.apache.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.archiva.indexer.ArchivaIndexManager;
|
||||
@ -38,6 +39,7 @@
|
||||
import org.apache.archiva.repository.Repository;
|
||||
import org.apache.archiva.repository.RepositoryType;
|
||||
import org.apache.archiva.repository.UnsupportedRepositoryTypeException;
|
||||
import org.apache.archiva.repository.storage.AssetType;
|
||||
import org.apache.archiva.repository.storage.fs.FilesystemStorage;
|
||||
import org.apache.archiva.repository.storage.RepositoryStorage;
|
||||
import org.apache.archiva.repository.storage.StorageAsset;
|
||||
@ -499,7 +501,8 @@ public ArchivaIndexingContext move(ArchivaIndexingContext context, Repository re
|
||||
StorageAsset newPath = getIndexPath(repo);
|
||||
IndexingContext ctx = context.getBaseContext(IndexingContext.class);
|
||||
Path oldPath = ctx.getIndexDirectoryFile().toPath();
|
||||
if (oldPath.equals(newPath)) {
|
||||
Path newFilePath = newPath.getFilePath( );
|
||||
if (oldPath.equals(newFilePath)) {
|
||||
// Nothing to do, if path does not change
|
||||
return context;
|
||||
}
|
||||
@ -510,7 +513,13 @@ public ArchivaIndexingContext move(ArchivaIndexingContext context, Repository re
|
||||
return createContext(repo);
|
||||
} else {
|
||||
context.close(false);
|
||||
Files.move(oldPath, newPath.getFilePath());
|
||||
if (Files.exists( newFilePath )) {
|
||||
FileUtils.copyContent( oldPath, newFilePath );
|
||||
FileUtils.deleteDirectory( oldPath );
|
||||
} else
|
||||
{
|
||||
Files.move( oldPath, newFilePath );
|
||||
}
|
||||
return createContext(repo);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@ -629,7 +638,7 @@ private StorageAsset getIndexPath(URI indexDirUri, RepositoryStorage repoStorage
|
||||
|
||||
if ( !indexDir.exists() )
|
||||
{
|
||||
indexDir = storage.addAsset(indexDir.getPath(), true);
|
||||
indexDir.create( AssetType.CONTAINER );
|
||||
}
|
||||
return indexDir;
|
||||
}
|
||||
@ -758,11 +767,23 @@ private String calculateIndexRemoteUrl( URI baseUri, RemoteIndexFeature rif )
|
||||
{
|
||||
if ( rif.getIndexUri( ) == null )
|
||||
{
|
||||
return baseUri.resolve( DEFAULT_INDEX_PATH ).toString( );
|
||||
return baseUri.resolve( "/"+DEFAULT_INDEX_PATH ).toString( );
|
||||
}
|
||||
else
|
||||
{
|
||||
return baseUri.resolve( rif.getIndexUri( ) ).toString( );
|
||||
URI rifUri = rif.getIndexUri( );
|
||||
if (rifUri.isAbsolute()) {
|
||||
return rifUri.toString( );
|
||||
} else
|
||||
{
|
||||
if (baseUri.getScheme().toLowerCase().equals( "file" )) {
|
||||
return Paths.get( baseUri ).resolve( rifUri.getPath() ).toUri( ).toString( );
|
||||
} else
|
||||
{
|
||||
String pathString = rifUri.getPath( ).startsWith( "/" ) ? rifUri.getPath( ) : "/" + rifUri.getPath( );
|
||||
return baseUri.resolve( pathString ).toString( );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration;
|
||||
import org.apache.archiva.event.EventHandler;
|
||||
import org.apache.archiva.repository.base.BasicManagedRepository;
|
||||
import org.apache.archiva.repository.base.BasicRemoteRepository;
|
||||
import org.apache.archiva.repository.EditableManagedRepository;
|
||||
@ -37,6 +38,7 @@
|
||||
import org.apache.archiva.repository.RepositoryGroup;
|
||||
import org.apache.archiva.repository.RepositoryProvider;
|
||||
import org.apache.archiva.repository.RepositoryType;
|
||||
import org.apache.archiva.repository.event.RepositoryEvent;
|
||||
import org.apache.archiva.repository.features.ArtifactCleanupFeature;
|
||||
import org.apache.archiva.repository.features.IndexCreationFeature;
|
||||
import org.apache.archiva.repository.features.RemoteIndexFeature;
|
||||
@ -249,6 +251,12 @@ public RepositoryGroupConfiguration getRepositoryGroupConfiguration( RepositoryG
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRepositoryEventHandler( EventHandler<? super RepositoryEvent> eventHandler )
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
|
||||
|
@ -26,6 +26,9 @@
|
||||
import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
|
||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration;
|
||||
import org.apache.archiva.event.Event;
|
||||
import org.apache.archiva.event.EventHandler;
|
||||
import org.apache.archiva.event.EventManager;
|
||||
import org.apache.archiva.event.EventType;
|
||||
import org.apache.archiva.repository.EditableManagedRepository;
|
||||
import org.apache.archiva.repository.EditableRemoteRepository;
|
||||
import org.apache.archiva.repository.EditableRepository;
|
||||
@ -33,6 +36,7 @@
|
||||
import org.apache.archiva.repository.ManagedRepository;
|
||||
import org.apache.archiva.repository.ReleaseScheme;
|
||||
import org.apache.archiva.repository.RemoteRepository;
|
||||
import org.apache.archiva.repository.Repository;
|
||||
import org.apache.archiva.repository.RepositoryCredentials;
|
||||
import org.apache.archiva.repository.RepositoryException;
|
||||
import org.apache.archiva.repository.RepositoryGroup;
|
||||
@ -41,6 +45,7 @@
|
||||
import org.apache.archiva.repository.UnsupportedURIException;
|
||||
import org.apache.archiva.repository.base.BasicManagedRepository;
|
||||
import org.apache.archiva.repository.base.PasswordCredentials;
|
||||
import org.apache.archiva.repository.event.RepositoryEvent;
|
||||
import org.apache.archiva.repository.features.ArtifactCleanupFeature;
|
||||
import org.apache.archiva.repository.features.IndexCreationFeature;
|
||||
import org.apache.archiva.repository.features.RemoteIndexFeature;
|
||||
@ -61,7 +66,9 @@
|
||||
import java.time.Duration;
|
||||
import java.time.Period;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -81,6 +88,29 @@ public class MavenRepositoryProvider implements RepositoryProvider {
|
||||
@Inject
|
||||
private FileLockManager fileLockManager;
|
||||
|
||||
private class EventHandlerInfo {
|
||||
EventType<?> type;
|
||||
EventHandler<?> handler;
|
||||
|
||||
public EventHandlerInfo( EventType<?> type, EventHandler<?> handler )
|
||||
{
|
||||
this.type = type;
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
public EventType<?> getType( )
|
||||
{
|
||||
return type;
|
||||
}
|
||||
|
||||
public EventHandler<?> getHandler( )
|
||||
{
|
||||
return handler;
|
||||
}
|
||||
}
|
||||
|
||||
private List<EventHandler<? super RepositoryEvent>> repositoryEventHandlers = new ArrayList<>( );
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(MavenRepositoryProvider.class);
|
||||
|
||||
static final Set<RepositoryType> TYPES = new HashSet<>();
|
||||
@ -100,14 +130,16 @@ public MavenManagedRepository createManagedInstance(String id, String name) {
|
||||
}
|
||||
|
||||
public MavenManagedRepository createManagedInstance(String id, String name, Path baseDir) {
|
||||
FilesystemStorage storage = null;
|
||||
FilesystemStorage storage;
|
||||
try {
|
||||
storage = new FilesystemStorage(baseDir.resolve(id), fileLockManager);
|
||||
} catch (IOException e) {
|
||||
log.error("Could not initialize fileystem for repository {}", id);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return new MavenManagedRepository(id, name, storage);
|
||||
MavenManagedRepository repo = new MavenManagedRepository( id, name, storage );
|
||||
registerEventHandler( repo );
|
||||
return repo;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -116,14 +148,16 @@ public MavenRemoteRepository createRemoteInstance(String id, String name) {
|
||||
}
|
||||
|
||||
public MavenRemoteRepository createRemoteInstance(String id, String name, Path baseDir) {
|
||||
FilesystemStorage storage = null;
|
||||
FilesystemStorage storage;
|
||||
try {
|
||||
storage = new FilesystemStorage(baseDir.resolve(id), fileLockManager);
|
||||
} catch (IOException e) {
|
||||
log.error("Could not initialize fileystem for repository {}", id);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return new MavenRemoteRepository(id, name, storage);
|
||||
MavenRemoteRepository repo = new MavenRemoteRepository( id, name, storage );
|
||||
registerEventHandler( repo );
|
||||
return repo;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -132,14 +166,22 @@ public EditableRepositoryGroup createRepositoryGroup(String id, String name) {
|
||||
}
|
||||
|
||||
public MavenRepositoryGroup createRepositoryGroup(String id, String name, Path baseDir) {
|
||||
FilesystemStorage storage = null;
|
||||
FilesystemStorage storage;
|
||||
try {
|
||||
storage = new FilesystemStorage(baseDir.resolve(id), fileLockManager);
|
||||
} catch (IOException e) {
|
||||
log.error("Could not initialize fileystem for repository {}", id);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return new MavenRepositoryGroup(id, name, storage);
|
||||
MavenRepositoryGroup group = new MavenRepositoryGroup( id, name, storage );
|
||||
registerEventHandler( group );
|
||||
return group;
|
||||
}
|
||||
|
||||
private void registerEventHandler( Repository repo ) {
|
||||
for (EventHandler<? super RepositoryEvent> eventHandler : repositoryEventHandlers) {
|
||||
repo.registerEventHandler( RepositoryEvent.ANY, eventHandler );
|
||||
}
|
||||
}
|
||||
|
||||
private URI getURIFromString(String uriStr) throws RepositoryException {
|
||||
@ -166,7 +208,7 @@ private URI getURIFromString(String uriStr) throws RepositoryException {
|
||||
try {
|
||||
uri = new URI(newCfg);
|
||||
} catch (URISyntaxException e1) {
|
||||
log.error("Could not create URI from {} -> ", uriStr, newCfg);
|
||||
log.error("Could not create URI from {} -> {}", uriStr, newCfg);
|
||||
throw new RepositoryException("The config entry " + uriStr + " cannot be converted to URI.");
|
||||
}
|
||||
}
|
||||
@ -421,16 +463,8 @@ public ManagedRepositoryConfiguration getManagedConfiguration(ManagedRepository
|
||||
cfg.setRetentionPeriod(artifactCleanupFeature.getRetentionPeriod().getDays());
|
||||
cfg.setDeleteReleasedSnapshots(artifactCleanupFeature.isDeleteReleasedSnapshots());
|
||||
|
||||
if (managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE)) {
|
||||
cfg.setReleases(true);
|
||||
} else {
|
||||
cfg.setReleases(false);
|
||||
}
|
||||
if (managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT)) {
|
||||
cfg.setSnapshots(true);
|
||||
} else {
|
||||
cfg.setSnapshots(false);
|
||||
}
|
||||
cfg.setReleases( managedRepository.getActiveReleaseSchemes( ).contains( ReleaseScheme.RELEASE ) );
|
||||
cfg.setSnapshots( managedRepository.getActiveReleaseSchemes( ).contains( ReleaseScheme.SNAPSHOT ) );
|
||||
return cfg;
|
||||
|
||||
}
|
||||
@ -450,11 +484,17 @@ public RepositoryGroupConfiguration getRepositoryGroupConfiguration(RepositoryGr
|
||||
cfg.setMergedIndexPath( indexCreationFeature.getIndexPath().toString() );
|
||||
}
|
||||
cfg.setMergedIndexTtl(repositoryGroup.getMergedIndexTTL());
|
||||
cfg.setRepositories(repositoryGroup.getRepositories().stream().map(r -> r.getId()).collect(Collectors.toList()));
|
||||
cfg.setRepositories(repositoryGroup.getRepositories().stream().map( Repository::getId ).collect(Collectors.toList()));
|
||||
cfg.setCronExpression(repositoryGroup.getSchedulingDefinition());
|
||||
return cfg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRepositoryEventHandler( EventHandler<? super RepositoryEvent> eventHandler )
|
||||
{
|
||||
this.repositoryEventHandlers.add( eventHandler );
|
||||
}
|
||||
|
||||
private ManagedRepositoryConfiguration getStageRepoConfig(ManagedRepositoryConfiguration repository) {
|
||||
ManagedRepositoryConfiguration stagingRepository = new ManagedRepositoryConfiguration();
|
||||
stagingRepository.setId(repository.getId() + StagingRepositoryFeature.STAGING_REPO_POSTFIX);
|
||||
@ -470,7 +510,7 @@ private ManagedRepositoryConfiguration getStageRepoConfig(ManagedRepositoryConfi
|
||||
stagingRepository.setLocation(path.substring(0, lastIndex) + "/" + stagingRepository.getId());
|
||||
|
||||
if (StringUtils.isNotBlank(repository.getIndexDir())) {
|
||||
Path indexDir = null;
|
||||
Path indexDir;
|
||||
try {
|
||||
indexDir = Paths.get(new URI(repository.getIndexDir().startsWith("file://") ? repository.getIndexDir() : "file://" + repository.getIndexDir()));
|
||||
if (indexDir.isAbsolute()) {
|
||||
@ -488,7 +528,7 @@ private ManagedRepositoryConfiguration getStageRepoConfig(ManagedRepositoryConfi
|
||||
// in case of absolute dir do not use the same
|
||||
}
|
||||
if (StringUtils.isNotBlank(repository.getPackedIndexDir())) {
|
||||
Path packedIndexDir = null;
|
||||
Path packedIndexDir;
|
||||
packedIndexDir = Paths.get(repository.getPackedIndexDir());
|
||||
if (packedIndexDir.isAbsolute()) {
|
||||
Path newDir = packedIndexDir.getParent().resolve(packedIndexDir.getFileName() + StagingRepositoryFeature.STAGING_REPO_POSTFIX);
|
||||
|
@ -109,7 +109,7 @@ public void initialize()
|
||||
server = new Server( );
|
||||
serverConnector = new ServerConnector( server, new HttpConnectionFactory());
|
||||
server.addConnector( serverConnector );
|
||||
createContext( server, Paths.get( "src/test/" ) );
|
||||
createContext( server, Paths.get( "src/test" ) );
|
||||
this.server.start();
|
||||
this.port = serverConnector.getLocalPort();
|
||||
log.info( "start server on port {}", this.port );
|
||||
@ -185,13 +185,13 @@ protected RemoteRepository getRemoteRepository(Path repoDirectory) throws IOExce
|
||||
Files.createDirectories( indexDirectory );
|
||||
remoteRepository.setLocation( new URI( "http://localhost:" + port ) );
|
||||
repoDirectory.toFile().deleteOnExit();
|
||||
createIndexingContext( remoteRepository );
|
||||
|
||||
RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get();
|
||||
rif.setDownloadRemoteIndex( true );
|
||||
rif.setIndexUri( new URI("http://localhost:" + port + "/index-updates/" ) );
|
||||
IndexCreationFeature icf = remoteRepository.getFeature( IndexCreationFeature.class ).get( );
|
||||
icf.setLocalIndexPath( remoteRepository.getAsset( "index" ) );
|
||||
createIndexingContext( remoteRepository );
|
||||
|
||||
// IndexCreationFeature icf = remoteRepository.getFeature( IndexCreationFeature.class ).get( );
|
||||
// icf.setLocalIndexPath( remoteRepository.getAsset( "index" ) );
|
||||
return remoteRepository;
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ public void testBrowse()
|
||||
|
||||
// dumpResponse( response );
|
||||
|
||||
List<String> expectedLinks = Arrays.asList( ".indexer/", "commons-lang/", "net/", "org/" );
|
||||
List<String> expectedLinks = Arrays.asList( ".index/", ".indexer/", "commons-lang/", "net/", "org/" );
|
||||
|
||||
Document document = Jsoup.parse( response.getContentAsString() );
|
||||
Elements elements = document.getElementsByTag( "a" );
|
||||
|
Loading…
x
Reference in New Issue
Block a user