mirror of
https://github.com/apache/archiva.git
synced 2025-02-08 11:06:03 +00:00
[MRM-980] ability to merge repositories
submitted by Patti Arachchige Eshan Sudharaka (for GSoC) o added new plugin module for repository merge git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/archiva-MRM-980@959880 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4580974158
commit
626279bf89
@ -35,6 +35,7 @@
|
|||||||
<!-- TODO: eventually not a core plugin, needs to be moved to a separate tree, with it's own Selenium tests -->
|
<!-- TODO: eventually not a core plugin, needs to be moved to a separate tree, with it's own Selenium tests -->
|
||||||
<module>npanday-support</module>
|
<module>npanday-support</module>
|
||||||
<module>maven1-repository</module>
|
<module>maven1-repository</module>
|
||||||
|
<module>stage-repository-merge</module>
|
||||||
<module>generic-metadata-support</module>
|
<module>generic-metadata-support</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
||||||
|
32
archiva-modules/plugins/stage-repository-merge/.project
Normal file
32
archiva-modules/plugins/stage-repository-merge/.project
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>stage-repository-merge</name>
|
||||||
|
<comment>Archiva is an application for managing one or more remote
|
||||||
|
repositories, including administration, artifact handling,
|
||||||
|
browsing and searching. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
|
||||||
|
<projects>
|
||||||
|
<project>archiva-checksum</project>
|
||||||
|
<project>archiva-common</project>
|
||||||
|
<project>archiva-configuration</project>
|
||||||
|
<project>archiva-consumer-api</project>
|
||||||
|
<project>archiva-model</project>
|
||||||
|
<project>archiva-policies</project>
|
||||||
|
<project>archiva-repository-layer</project>
|
||||||
|
<project>archiva-xml-tools</project>
|
||||||
|
<project>maven2-repository</project>
|
||||||
|
<project>metadata-model</project>
|
||||||
|
<project>metadata-repository-api</project>
|
||||||
|
<project>problem-reports</project>
|
||||||
|
<project>test-repository</project>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
112
archiva-modules/plugins/stage-repository-merge/pom.xml
Normal file
112
archiva-modules/plugins/stage-repository-merge/pom.xml
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<artifactId>plugins</artifactId>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<version>1.4-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>stage-repository-merge</artifactId>
|
||||||
|
<name>stage-repository-merge</name>
|
||||||
|
<url>http://maven.apache.org</url>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.5</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
|
<artifactId>plexus-spring</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>metadata-repository-api</artifactId>
|
||||||
|
<version>1.4-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>archiva-repository-layer</artifactId>
|
||||||
|
<version>1.4-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>maven2-repository</artifactId>
|
||||||
|
<version>1.4-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>archiva-model</artifactId>
|
||||||
|
<version>1.4-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-all</artifactId>
|
||||||
|
<version>1.8.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>test-repository</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-jdk14</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>test-repository</id>
|
||||||
|
<phase>generate-test-resources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>unpack-dependencies</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<includeArtifactIds>test-repository</includeArtifactIds>
|
||||||
|
<outputDirectory>target/test-repository</outputDirectory>
|
||||||
|
<excludes>META-INF/**</excludes>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
|
<artifactId>plexus-component-metadata</artifactId>
|
||||||
|
<version>1.0-beta-3.0.5</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>process-classes</id>
|
||||||
|
<goals>
|
||||||
|
<goal>generate-metadata</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>process-test-classes</id>
|
||||||
|
<goals>
|
||||||
|
<goal>generate-test-metadata</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
</build>
|
||||||
|
</project>
|
@ -0,0 +1,161 @@
|
|||||||
|
package org.apache.archiva.stagerepository.merge.repodetails;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.metadata.repository.MetadataResolver;
|
||||||
|
import org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet;
|
||||||
|
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||||
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.component role="org.apache.archiva.stagerepository.merge.repodetails.SourceAritfacts"
|
||||||
|
*/
|
||||||
|
public class SourceAritfacts
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private MetadataResolver metadataResolver;
|
||||||
|
|
||||||
|
private ArrayList<String> rootNameSpacesList;
|
||||||
|
|
||||||
|
private ArrayList<String> gruopIdList;
|
||||||
|
|
||||||
|
private ArrayList<String> artifactsList;
|
||||||
|
|
||||||
|
private ArrayList<String> artifactsVersionsList;
|
||||||
|
|
||||||
|
private List<ArchivaArtifact> artifactsListWithDetails;
|
||||||
|
|
||||||
|
private String repoId;
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger( SourceAritfacts.class );
|
||||||
|
|
||||||
|
public String getRepoId()
|
||||||
|
{
|
||||||
|
return repoId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepoId( String repoId )
|
||||||
|
{
|
||||||
|
this.repoId = repoId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this methos returns a ArtifactMetaData List.(i guess no harm due to hardcoding the Artifact type and version)
|
||||||
|
public Collection<ArtifactMetadata> getSourceArtifactsMetaData( ArchivaArtifact artifact )
|
||||||
|
{
|
||||||
|
|
||||||
|
return metadataResolver.getArtifacts( artifact.getRepositoryId(), artifact.getGroupId(),
|
||||||
|
artifact.getArtifactId(), artifact.getVersion() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<ArchivaArtifact> getSourceArtifactList()
|
||||||
|
{
|
||||||
|
artifactsListWithDetails = new ArrayList<ArchivaArtifact>();
|
||||||
|
|
||||||
|
process();
|
||||||
|
|
||||||
|
return artifactsListWithDetails;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMetadataResolver( MetadataResolver metadataResolver )
|
||||||
|
{
|
||||||
|
this.metadataResolver = metadataResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void process()
|
||||||
|
{
|
||||||
|
// this will get the root name spaces eg : org, com
|
||||||
|
rootNameSpacesList = (ArrayList<String>) metadataResolver.getRootNamespaces( repoId );
|
||||||
|
|
||||||
|
gruopIdList = new ArrayList<String>();
|
||||||
|
|
||||||
|
artifactsList = new ArrayList<String>();
|
||||||
|
|
||||||
|
// following iterates through the root name spaces list and get the gruo id of relavet root name spaces.
|
||||||
|
for ( String namespace : rootNameSpacesList )
|
||||||
|
{
|
||||||
|
// this will get the gruop id list of relavant name space . eg : org > archiva(gruop id)
|
||||||
|
gruopIdList = (ArrayList<String>) metadataResolver.getNamespaces( repoId, namespace );
|
||||||
|
|
||||||
|
// following will iterates through the particular gruop id 's
|
||||||
|
for ( String gruopId : gruopIdList )
|
||||||
|
{
|
||||||
|
// parse the parameters "repoId" and "namespace + gruop id "to artifacts list. eg : params = ("internal"
|
||||||
|
// , "org.archiva")
|
||||||
|
artifactsList = (ArrayList<String>) metadataResolver.getNamespaces( repoId, namespace + "." + gruopId );
|
||||||
|
|
||||||
|
for ( String artifact : artifactsList )
|
||||||
|
{
|
||||||
|
// iterates through the artifacts and get the available versions of a particular artifact
|
||||||
|
artifactsVersionsList =
|
||||||
|
(ArrayList<String>) metadataResolver.getProjectVersions( repoId, namespace + "." + gruopId,
|
||||||
|
artifact );
|
||||||
|
|
||||||
|
for ( String version : artifactsVersionsList )
|
||||||
|
{
|
||||||
|
// assign gathered attributes Artifact object and add it in to the list
|
||||||
|
artifactsListWithDetails.addAll( getArtifactMetadata( repoId, gruopId, artifact, version ) );
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<ArchivaArtifact> getArtifactMetadata( String repoId, String gruopId, String artifactId,
|
||||||
|
String version )
|
||||||
|
{
|
||||||
|
MavenArtifactFacet facet = null;
|
||||||
|
|
||||||
|
List<ArchivaArtifact> artifactList = new ArrayList<ArchivaArtifact>();
|
||||||
|
|
||||||
|
ArrayList<ArtifactMetadata> artifactMetaDataList =
|
||||||
|
(ArrayList<ArtifactMetadata>) metadataResolver.getArtifacts( repoId, gruopId, artifactId, version );
|
||||||
|
|
||||||
|
for ( ArtifactMetadata artifactMetadata : artifactMetaDataList )
|
||||||
|
{
|
||||||
|
|
||||||
|
facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
|
||||||
|
|
||||||
|
if ( facet != null )
|
||||||
|
{
|
||||||
|
artifactList.add( new ArchivaArtifact( gruopId, artifactId, version, facet.getClassifier(),
|
||||||
|
facet.getType(), repoId ) );
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
artifactList.add( new ArchivaArtifact( gruopId, artifactId, version, "", "jar", repoId ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return artifactList;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,407 @@
|
|||||||
|
package org.apache.archiva.stagerepository.merge.repomerge;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.stagerepository.merge.repodetails.SourceAritfacts;
|
||||||
|
import org.apache.archiva.metadata.repository.MetadataResolver;
|
||||||
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
|
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||||
|
import org.apache.maven.archiva.model.ArchivaRepositoryMetadata;
|
||||||
|
import org.apache.maven.archiva.configuration.Configuration;
|
||||||
|
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||||
|
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||||
|
import org.apache.maven.archiva.repository.RepositoryContentFactory;
|
||||||
|
import org.apache.maven.archiva.repository.RepositoryNotFoundException;
|
||||||
|
import org.apache.maven.archiva.repository.RepositoryException;
|
||||||
|
import org.apache.maven.archiva.repository.metadata.MetadataTools;
|
||||||
|
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
|
||||||
|
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataReader;
|
||||||
|
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataWriter;
|
||||||
|
import org.apache.maven.archiva.common.utils.VersionComparator;
|
||||||
|
import org.apache.maven.archiva.common.utils.VersionUtil;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.component role="org.apache.archiva.stagerepository.merge.repomerge.ArtifactsMerger"
|
||||||
|
*/
|
||||||
|
public class ArtifactsMerger
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private MetadataResolver metadataResolver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private RepositoryContentFactory repositoryFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role-hint="default"
|
||||||
|
*/
|
||||||
|
private ArchivaConfiguration configuration;
|
||||||
|
|
||||||
|
private SourceAritfacts sourceArtifacts;
|
||||||
|
|
||||||
|
private String targetRepo;
|
||||||
|
|
||||||
|
private String sourceRepo;
|
||||||
|
|
||||||
|
private ArrayList<ArchivaArtifact> sourceArtifactsList;
|
||||||
|
|
||||||
|
private Configuration config;
|
||||||
|
|
||||||
|
private ManagedRepositoryConfiguration targetRepoConfig;
|
||||||
|
|
||||||
|
private ManagedRepositoryConfiguration sourceRepoConfig;
|
||||||
|
|
||||||
|
private ManagedRepositoryContent targetRepository;
|
||||||
|
|
||||||
|
private ManagedRepositoryContent sourceRepository;
|
||||||
|
|
||||||
|
private final static String PATH_SEPERATOR = "/";
|
||||||
|
|
||||||
|
public void setMetadataResolver( MetadataResolver metadataResolver )
|
||||||
|
{
|
||||||
|
this.metadataResolver = metadataResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSourceArtifacts( SourceAritfacts sourceArtifacts )
|
||||||
|
{
|
||||||
|
this.sourceArtifacts = sourceArtifacts;
|
||||||
|
setSourceArtifactsList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConfiguration( ArchivaConfiguration configuration )
|
||||||
|
{
|
||||||
|
this.configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepositoryFactory( RepositoryContentFactory repositoryFactory )
|
||||||
|
{
|
||||||
|
this.repositoryFactory = repositoryFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArtifactsMerger( String targetRepo, String sourceRepo )
|
||||||
|
{
|
||||||
|
this.targetRepo = targetRepo;
|
||||||
|
this.sourceRepo = sourceRepo;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSourceArtifactsList()
|
||||||
|
{
|
||||||
|
sourceArtifacts.setRepoId( sourceRepo );
|
||||||
|
sourceArtifactsList = (ArrayList) sourceArtifacts.getSourceArtifactList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isArtifactAvailableIntagerRepo( ArchivaArtifact artifact )
|
||||||
|
{
|
||||||
|
|
||||||
|
boolean isAvailable = false;
|
||||||
|
|
||||||
|
Collection<ArtifactMetadata> list =
|
||||||
|
metadataResolver.getArtifacts( targetRepo, artifact.getGroupId(), artifact.getArtifactId(),
|
||||||
|
artifact.getVersion() );
|
||||||
|
|
||||||
|
if ( list.isEmpty() )
|
||||||
|
{
|
||||||
|
isAvailable = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isAvailable = true;
|
||||||
|
}
|
||||||
|
return isAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void doMerge()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
config = configuration.getConfiguration();
|
||||||
|
|
||||||
|
targetRepoConfig = config.findManagedRepositoryById( targetRepo );
|
||||||
|
|
||||||
|
targetRepository = repositoryFactory.getManagedRepositoryContent( targetRepo );
|
||||||
|
|
||||||
|
sourceRepoConfig = config.findManagedRepositoryById( sourceRepo );
|
||||||
|
|
||||||
|
sourceRepository = repositoryFactory.getManagedRepositoryContent( sourceRepo );
|
||||||
|
|
||||||
|
// iterates through available arfifacts list
|
||||||
|
for ( ArchivaArtifact sourceArtifact : sourceArtifactsList )
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( isArtifactAvailableIntagerRepo( sourceArtifact ) )
|
||||||
|
{
|
||||||
|
// TODO here we need to implement replacing the exixting one
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// when the artifact does not exist in the repo folder structure creation is done
|
||||||
|
createFolderStructure( sourceArtifact );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch ( RepositoryNotFoundException re )
|
||||||
|
{
|
||||||
|
throw re;
|
||||||
|
}
|
||||||
|
catch ( RepositoryException rep )
|
||||||
|
{
|
||||||
|
throw rep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createFolderStructure( ArchivaArtifact artifact )
|
||||||
|
throws IOException, RepositoryMetadataException
|
||||||
|
{
|
||||||
|
|
||||||
|
Date lastUpdatedTimestamp = Calendar.getInstance().getTime();
|
||||||
|
|
||||||
|
TimeZone timezone = TimeZone.getTimeZone( "UTC" );
|
||||||
|
|
||||||
|
DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
|
||||||
|
|
||||||
|
fmt.setTimeZone( timezone );
|
||||||
|
|
||||||
|
String timestamp = fmt.format( lastUpdatedTimestamp );
|
||||||
|
|
||||||
|
String targetRepoPath = targetRepoConfig.getLocation();
|
||||||
|
|
||||||
|
String sourceRepoPath = sourceRepoConfig.getLocation();
|
||||||
|
|
||||||
|
String artifactPath = sourceRepository.toPath( artifact );
|
||||||
|
|
||||||
|
File sourceArtifactFile = new File( sourceRepoPath, artifactPath );
|
||||||
|
|
||||||
|
File targetArtifactFile = new File( targetRepoPath, artifactPath );
|
||||||
|
|
||||||
|
int lastIndex = artifactPath.lastIndexOf( '/' );
|
||||||
|
|
||||||
|
// create a file object to the artifact version directory eg
|
||||||
|
// :/boot/gsoc/apps/apache-archiva-1.4-SNAPSHOT/data/repositories/internal/ant/ant/1.5.1
|
||||||
|
File targetFile = new File( targetRepoPath, artifactPath.substring( 0, lastIndex ) );
|
||||||
|
|
||||||
|
if ( !targetFile.exists() )
|
||||||
|
{
|
||||||
|
// create the folder structure when it does not exist
|
||||||
|
targetFile.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
// artifact copying
|
||||||
|
copyFile( sourceArtifactFile, targetArtifactFile );
|
||||||
|
// pom file copying
|
||||||
|
String index = artifactPath.substring( lastIndex + 1 );
|
||||||
|
int last = index.lastIndexOf( '.' );
|
||||||
|
File sourcePomFile =
|
||||||
|
new File( sourceRepoPath, artifactPath.substring( 0, lastIndex ) + "/"
|
||||||
|
+ artifactPath.substring( lastIndex + 1 ).substring( 0, last ) + ".pom" );
|
||||||
|
File targetPomFile =
|
||||||
|
new File( targetRepoPath, artifactPath.substring( 0, lastIndex ) + "/"
|
||||||
|
+ artifactPath.substring( lastIndex + 1 ).substring( 0, last ) + ".pom" );
|
||||||
|
|
||||||
|
if ( !targetPomFile.exists() )
|
||||||
|
{
|
||||||
|
copyFile( sourcePomFile, targetPomFile );
|
||||||
|
}
|
||||||
|
|
||||||
|
// explicitly update only if metadata-updater consumer is not enabled!
|
||||||
|
if ( !config.getRepositoryScanning().getKnownContentConsumers().contains( "metadata-updater" ) )
|
||||||
|
{
|
||||||
|
|
||||||
|
// maven version meta data file copying
|
||||||
|
|
||||||
|
File versionMetadataFileInSourceArtifact =
|
||||||
|
new File( sourceRepoPath, artifactPath.substring( 0, lastIndex ) + "/" + MetadataTools.MAVEN_METADATA );
|
||||||
|
|
||||||
|
File versionMetadataFileInTargetArtifact = null;
|
||||||
|
|
||||||
|
// check metadata xml is available in source repo. if there is a metadata xml we are going to merge is as
|
||||||
|
// well
|
||||||
|
if ( versionMetadataFileInSourceArtifact.exists() )
|
||||||
|
{
|
||||||
|
versionMetadataFileInTargetArtifact =
|
||||||
|
new File( targetRepoPath, artifactPath.substring( 0, lastIndex ) + "/"
|
||||||
|
+ MetadataTools.MAVEN_METADATA );
|
||||||
|
|
||||||
|
// check metadata xml is available in target repo. if it is not available copy it from the source
|
||||||
|
// artifact
|
||||||
|
if ( !versionMetadataFileInTargetArtifact.exists() )
|
||||||
|
{
|
||||||
|
copyFile( versionMetadataFileInSourceArtifact, versionMetadataFileInTargetArtifact );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if version metadata file exists then update it.
|
||||||
|
updateVersionMetadata( versionMetadataFileInTargetArtifact, artifact, lastUpdatedTimestamp,
|
||||||
|
timestamp );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// project level maven meta data xml copying
|
||||||
|
String projectDirectoryInSourceRepo =
|
||||||
|
new File( versionMetadataFileInSourceArtifact.getParent() ).getParent();
|
||||||
|
File projectMetadataFileInSourceArtifact =
|
||||||
|
new File( projectDirectoryInSourceRepo, MetadataTools.MAVEN_METADATA );
|
||||||
|
|
||||||
|
// check metadata xml is available in source repo. if there is a metadata xml we are going to merge is as
|
||||||
|
// well
|
||||||
|
if ( projectMetadataFileInSourceArtifact.exists() )
|
||||||
|
{
|
||||||
|
|
||||||
|
String projectDirectoryInTargetRepo =
|
||||||
|
new File( versionMetadataFileInTargetArtifact.getParent() ).getParent();
|
||||||
|
File projectMetadataFileInTargetArtifact =
|
||||||
|
new File( projectDirectoryInTargetRepo, MetadataTools.MAVEN_METADATA );
|
||||||
|
// check metadata xml is available in target repo.if it is not available copy it from the source
|
||||||
|
// artifact
|
||||||
|
if ( !projectMetadataFileInTargetArtifact.exists() )
|
||||||
|
{
|
||||||
|
copyFile( projectMetadataFileInSourceArtifact, projectMetadataFileInTargetArtifact );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// // if project metadata file exists then update it.
|
||||||
|
updateProjectMetadata( projectMetadataFileInTargetArtifact, artifact, lastUpdatedTimestamp,
|
||||||
|
timestamp );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void copyFile( File sourceFile, File targetFile )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
|
||||||
|
FileOutputStream out = new FileOutputStream( targetFile );
|
||||||
|
FileInputStream input = new FileInputStream( sourceFile );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
while ( ( i = input.read() ) != -1 )
|
||||||
|
{
|
||||||
|
out.write( i );
|
||||||
|
}
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
out.close();
|
||||||
|
input.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update artifact level metadata.
|
||||||
|
*/
|
||||||
|
private void updateProjectMetadata( File projectMetaDataFileIntargetRepo, ArchivaArtifact artifact,
|
||||||
|
Date lastUpdatedTimestamp, String timestamp )
|
||||||
|
throws RepositoryMetadataException
|
||||||
|
{
|
||||||
|
ArrayList<String> availableVersions = new ArrayList<String>();
|
||||||
|
String latestVersion = "";
|
||||||
|
|
||||||
|
ArchivaRepositoryMetadata projectMetadata = getMetadata( projectMetaDataFileIntargetRepo );
|
||||||
|
|
||||||
|
if ( projectMetaDataFileIntargetRepo.exists() )
|
||||||
|
{
|
||||||
|
availableVersions = (ArrayList<String>) projectMetadata.getAvailableVersions();
|
||||||
|
|
||||||
|
Collections.sort( availableVersions, VersionComparator.getInstance() );
|
||||||
|
|
||||||
|
if ( !availableVersions.contains( artifact.getVersion() ) )
|
||||||
|
{
|
||||||
|
availableVersions.add( artifact.getVersion() );
|
||||||
|
}
|
||||||
|
|
||||||
|
latestVersion = availableVersions.get( availableVersions.size() - 1 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
availableVersions.add( artifact.getVersion() );
|
||||||
|
projectMetadata.setGroupId( artifact.getGroupId() );
|
||||||
|
projectMetadata.setArtifactId( artifact.getArtifactId() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( projectMetadata.getGroupId() == null )
|
||||||
|
{
|
||||||
|
projectMetadata.setGroupId( artifact.getGroupId() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( projectMetadata.getArtifactId() == null )
|
||||||
|
{
|
||||||
|
projectMetadata.setArtifactId( artifact.getArtifactId() );
|
||||||
|
}
|
||||||
|
|
||||||
|
projectMetadata.setLatestVersion( latestVersion );
|
||||||
|
projectMetadata.setAvailableVersions( availableVersions );
|
||||||
|
projectMetadata.setLastUpdated( timestamp );
|
||||||
|
projectMetadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );
|
||||||
|
|
||||||
|
if ( !VersionUtil.isSnapshot( artifact.getVersion() ) )
|
||||||
|
{
|
||||||
|
projectMetadata.setReleasedVersion( latestVersion );
|
||||||
|
}
|
||||||
|
|
||||||
|
RepositoryMetadataWriter.write( projectMetadata, projectMetaDataFileIntargetRepo );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateVersionMetadata( File versionMetaDataFileInTargetRepo, ArchivaArtifact artifact,
|
||||||
|
Date lastUpdatedTimestamp, String timestamp )
|
||||||
|
throws RepositoryMetadataException
|
||||||
|
{
|
||||||
|
ArchivaRepositoryMetadata versionMetadata = getMetadata( versionMetaDataFileInTargetRepo );
|
||||||
|
if ( !versionMetaDataFileInTargetRepo.exists() )
|
||||||
|
{
|
||||||
|
versionMetadata.setGroupId( artifact.getGroupId() );
|
||||||
|
versionMetadata.setArtifactId( artifact.getArtifactId() );
|
||||||
|
versionMetadata.setVersion( artifact.getVersion() );
|
||||||
|
}
|
||||||
|
|
||||||
|
// versionMetadata.getSnapshotVersion().setTimestamp(timestamp);
|
||||||
|
versionMetadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );
|
||||||
|
RepositoryMetadataWriter.write( versionMetadata, versionMetaDataFileInTargetRepo );
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArchivaRepositoryMetadata getMetadata( File metadataFile )
|
||||||
|
throws RepositoryMetadataException
|
||||||
|
{
|
||||||
|
ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();
|
||||||
|
if ( metadataFile.exists() )
|
||||||
|
{
|
||||||
|
metadata = RepositoryMetadataReader.read( metadataFile );
|
||||||
|
}
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,134 @@
|
|||||||
|
package org.apache.archiva.stagerepository.merge.repodetails;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.apache.archiva.metadata.repository.MetadataResolver;
|
||||||
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
|
|
||||||
|
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||||
|
import org.easymock.MockControl;
|
||||||
|
import org.codehaus.plexus.spring.PlexusInSpringTestCase;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SourceArtifactsTest
|
||||||
|
extends PlexusInSpringTestCase
|
||||||
|
{
|
||||||
|
|
||||||
|
private Logger log = LoggerFactory.getLogger( SourceArtifactsTest.class );
|
||||||
|
|
||||||
|
private MockControl metadataResolverControl;
|
||||||
|
|
||||||
|
private MetadataResolver metadataResolver;
|
||||||
|
|
||||||
|
private static final String TEST_REPO_ID = "internal";
|
||||||
|
|
||||||
|
private SourceAritfacts sourceArtifacts;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setUp()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
super.setUp();
|
||||||
|
|
||||||
|
sourceArtifacts = new SourceAritfacts();
|
||||||
|
sourceArtifacts.setRepoId( TEST_REPO_ID );
|
||||||
|
metadataResolverControl = MockControl.createControl( MetadataResolver.class );
|
||||||
|
metadataResolver = (MetadataResolver) metadataResolverControl.getMock();
|
||||||
|
sourceArtifacts.setMetadataResolver( metadataResolver );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSourceArtifacts()
|
||||||
|
{
|
||||||
|
|
||||||
|
metadataResolverControl.expectAndReturn( metadataResolver.getRootNamespaces( TEST_REPO_ID ), getRootNameSpace() );
|
||||||
|
|
||||||
|
metadataResolverControl.expectAndReturn( metadataResolver.getNamespaces( TEST_REPO_ID, "org" ), getNameSpace() );
|
||||||
|
|
||||||
|
metadataResolverControl.expectAndReturn( metadataResolver.getNamespaces( TEST_REPO_ID, "org" + "." + "apache" ),
|
||||||
|
getProject() );
|
||||||
|
|
||||||
|
metadataResolverControl.expectAndReturn( metadataResolver.getProjectVersions( TEST_REPO_ID, "org" + "."
|
||||||
|
+ "apache", "archiva" ), getProjectVersions() );
|
||||||
|
|
||||||
|
metadataResolverControl.expectAndReturn( metadataResolver.getArtifacts( TEST_REPO_ID, "apache", "archiva",
|
||||||
|
"1.6" ), getArtiFactMetaData() );
|
||||||
|
|
||||||
|
metadataResolverControl.expectAndReturn( metadataResolver.getArtifacts( TEST_REPO_ID, "apache", "archiva",
|
||||||
|
"1.6" ), getArtiFactMetaData() );
|
||||||
|
|
||||||
|
metadataResolverControl.replay();
|
||||||
|
|
||||||
|
Collection<ArchivaArtifact> list = sourceArtifacts.getSourceArtifactList();
|
||||||
|
assertEquals( false, list.isEmpty() );
|
||||||
|
|
||||||
|
ArrayList<ArtifactMetadata> metadataList =
|
||||||
|
(ArrayList) sourceArtifacts.getSourceArtifactsMetaData( list.iterator().next() );
|
||||||
|
assertEquals( 2, metadataList.size() );
|
||||||
|
|
||||||
|
metadataResolverControl.verify();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<String> getRootNameSpace()
|
||||||
|
{
|
||||||
|
List<String> artifactList = new ArrayList<String>();
|
||||||
|
artifactList.add( "org" );
|
||||||
|
return artifactList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<String> getNameSpace()
|
||||||
|
{
|
||||||
|
List<String> namespace = new ArrayList<String>();
|
||||||
|
namespace.add( "apache" );
|
||||||
|
return namespace;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<String> getProject()
|
||||||
|
{
|
||||||
|
List<String> namespace = new ArrayList<String>();
|
||||||
|
namespace.add( "archiva" );
|
||||||
|
return namespace;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<String> getProjectVersions()
|
||||||
|
{
|
||||||
|
List<String> versionList = new ArrayList<String>();
|
||||||
|
versionList.add( "1.6" );
|
||||||
|
return versionList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<ArtifactMetadata> getArtiFactMetaData()
|
||||||
|
{
|
||||||
|
List<ArtifactMetadata> metaDataList = new ArrayList<ArtifactMetadata>();
|
||||||
|
ArtifactMetadata metaDataOne = new ArtifactMetadata();
|
||||||
|
ArtifactMetadata metaDataTwo = new ArtifactMetadata();
|
||||||
|
metaDataList.add( metaDataOne );
|
||||||
|
metaDataList.add( metaDataTwo );
|
||||||
|
return metaDataList;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,181 @@
|
|||||||
|
package org.apache.archiva.stagerepository.merge.repomerge;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import static org.mockito.Mockito.stub;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
import org.codehaus.plexus.spring.PlexusInSpringTestCase;
|
||||||
|
import org.apache.maven.archiva.repository.RepositoryContentFactory;
|
||||||
|
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
|
||||||
|
import org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryContent;
|
||||||
|
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.Configuration;
|
||||||
|
import org.apache.maven.archiva.configuration.RepositoryScanningConfiguration;
|
||||||
|
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||||
|
import org.apache.archiva.stagerepository.merge.repodetails.SourceAritfacts;
|
||||||
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
|
import org.apache.archiva.metadata.repository.MetadataResolver;
|
||||||
|
//import com.sun.xml.internal.ws.api.wsdl.parser.MetaDataResolver;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class ArtifactsMergerTest
|
||||||
|
extends PlexusInSpringTestCase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static final String SOURCE_REPOSITORY_ID = "test-repository";
|
||||||
|
|
||||||
|
private static final String TARGET_REPOSITORY_ID = "target-repo";
|
||||||
|
|
||||||
|
// private static final String TARGET_REPOSITORY_ID = "target-repo";
|
||||||
|
|
||||||
|
private Configuration config;
|
||||||
|
|
||||||
|
@MockitoAnnotations.Mock
|
||||||
|
private MetadataResolver metadataResolver;
|
||||||
|
|
||||||
|
private RepositoryContentFactory repositoryFactory;
|
||||||
|
|
||||||
|
private ArchivaConfiguration configuration;
|
||||||
|
|
||||||
|
private SourceAritfacts sourceArtifacts;
|
||||||
|
|
||||||
|
private ArtifactsMerger merger;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp()
|
||||||
|
{
|
||||||
|
MockitoAnnotations.initMocks( this );
|
||||||
|
metadataResolver = mock( MetadataResolver.class );
|
||||||
|
repositoryFactory = mock( RepositoryContentFactory.class );
|
||||||
|
configuration = mock( ArchivaConfiguration.class );
|
||||||
|
sourceArtifacts = mock( SourceAritfacts.class );
|
||||||
|
sourceArtifacts.setRepoId( SOURCE_REPOSITORY_ID );
|
||||||
|
sourceArtifacts.setMetadataResolver( metadataResolver );
|
||||||
|
setRepositoryConfigurations();
|
||||||
|
merger = new ArtifactsMerger( TARGET_REPOSITORY_ID, SOURCE_REPOSITORY_ID );
|
||||||
|
merger.setConfiguration( configuration );
|
||||||
|
merger.setRepositoryFactory( repositoryFactory );
|
||||||
|
merger.setMetadataResolver( metadataResolver );
|
||||||
|
setSourceArtifacts();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void setSourceArtifacts()
|
||||||
|
{
|
||||||
|
when( sourceArtifacts.getSourceArtifactList() ).thenReturn( getArtifacts() );
|
||||||
|
merger.setSourceArtifacts( sourceArtifacts );
|
||||||
|
verify( sourceArtifacts ).getSourceArtifactList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDomerge()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
ManagedRepositoryContent sourceRepoContent = new ManagedDefaultRepositoryContent();
|
||||||
|
sourceRepoContent.setRepository( config.findManagedRepositoryById( SOURCE_REPOSITORY_ID ) );
|
||||||
|
|
||||||
|
ManagedRepositoryContent targetRepoContent = new ManagedDefaultRepositoryContent();
|
||||||
|
sourceRepoContent.setRepository( config.findManagedRepositoryById( TARGET_REPOSITORY_ID ) );
|
||||||
|
|
||||||
|
when( configuration.getConfiguration() ).thenReturn( config );
|
||||||
|
when( repositoryFactory.getManagedRepositoryContent( SOURCE_REPOSITORY_ID ) ).thenReturn( sourceRepoContent );
|
||||||
|
when( repositoryFactory.getManagedRepositoryContent( TARGET_REPOSITORY_ID ) ).thenReturn( targetRepoContent );
|
||||||
|
when( sourceArtifacts.getSourceArtifactList() ).thenReturn( getArtifacts() );
|
||||||
|
when( metadataResolver.getArtifacts( TARGET_REPOSITORY_ID, "archiva", "archiva", "1.2.1" ) ).thenReturn( getMetaDataList() );
|
||||||
|
merger.doMerge();
|
||||||
|
|
||||||
|
// verify(configuration);
|
||||||
|
// verify(repositoryFactory);
|
||||||
|
// verify(repositoryFactory);
|
||||||
|
// verify(sourceArtifacts);
|
||||||
|
verify( configuration ).getConfiguration();
|
||||||
|
verify( repositoryFactory ).getManagedRepositoryContent( SOURCE_REPOSITORY_ID );
|
||||||
|
verify( repositoryFactory ).getManagedRepositoryContent( TARGET_REPOSITORY_ID );
|
||||||
|
verify( sourceArtifacts ).getSourceArtifactList();
|
||||||
|
verify( metadataResolver ).getArtifacts( TARGET_REPOSITORY_ID, "org.apache.archiva", "archiva", "1.2.1" );
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<ArchivaArtifact> getArtifacts()
|
||||||
|
{
|
||||||
|
ArchivaArtifact a1 =
|
||||||
|
new ArchivaArtifact( "org.apache.archiva", "archiva", "1.2.1", "", "jar", SOURCE_REPOSITORY_ID );
|
||||||
|
ArchivaArtifact a2 =
|
||||||
|
new ArchivaArtifact( "org.apache.archiva", "archiva", "1.5", "", "jar", SOURCE_REPOSITORY_ID );
|
||||||
|
ArrayList<ArchivaArtifact> list = new ArrayList<ArchivaArtifact>();
|
||||||
|
list.add( a1 );
|
||||||
|
// list.add(a2) ;
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<ArtifactMetadata> getMetaDataList()
|
||||||
|
{
|
||||||
|
ArtifactMetadata m1 = new ArtifactMetadata();
|
||||||
|
m1.setNamespace( "org.apache.archiva" );
|
||||||
|
m1.setProject( "archiva" );
|
||||||
|
m1.setVersion( "1.2.1" );
|
||||||
|
ArrayList<ArtifactMetadata> list = new ArrayList<ArtifactMetadata>();
|
||||||
|
list.add( m1 );
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRepositoryConfigurations()
|
||||||
|
{
|
||||||
|
File sourceRepoFile = new File( getBasedir(), "src/test/resources/test-repository" );
|
||||||
|
File targetRepoFile = new File( getBasedir(), "src/test/resources/target-repo" );
|
||||||
|
// sourceRepoFile.mkdirs();
|
||||||
|
// targetRepoFile.mkdirs();
|
||||||
|
|
||||||
|
assertTrue( sourceRepoFile.exists() );
|
||||||
|
this.config = new Configuration();
|
||||||
|
RepositoryScanningConfiguration repoScanConfig = new RepositoryScanningConfiguration();
|
||||||
|
List<String> knownContentConsumers = new ArrayList<String>();
|
||||||
|
knownContentConsumers.add( "metadata-updater12" );
|
||||||
|
repoScanConfig.setKnownContentConsumers( knownContentConsumers );
|
||||||
|
config.setRepositoryScanning( repoScanConfig );
|
||||||
|
// config.setManagedRepositories();
|
||||||
|
ManagedRepositoryConfiguration sourceRepoConfig = new ManagedRepositoryConfiguration();
|
||||||
|
sourceRepoConfig.setId( SOURCE_REPOSITORY_ID );
|
||||||
|
sourceRepoConfig.setLayout( "default" );
|
||||||
|
sourceRepoConfig.setLocation( sourceRepoFile.getPath() );
|
||||||
|
sourceRepoConfig.setName( SOURCE_REPOSITORY_ID );
|
||||||
|
sourceRepoConfig.setBlockRedeployments( true );
|
||||||
|
|
||||||
|
ManagedRepositoryConfiguration targetRepoConfig = new ManagedRepositoryConfiguration();
|
||||||
|
targetRepoConfig.setId( TARGET_REPOSITORY_ID );
|
||||||
|
targetRepoConfig.setLayout( "default" );
|
||||||
|
targetRepoConfig.setLocation( targetRepoFile.getPath() );
|
||||||
|
targetRepoConfig.setName( TARGET_REPOSITORY_ID );
|
||||||
|
targetRepoConfig.setBlockRedeployments( true );
|
||||||
|
|
||||||
|
this.config.addManagedRepository( sourceRepoConfig );
|
||||||
|
this.config.addManagedRepository( targetRepoConfig );
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<metadata>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>archiva</artifactId>
|
||||||
|
<version>1.2.1</version>
|
||||||
|
<versioning>
|
||||||
|
<lastUpdated>20100702064543</lastUpdated>
|
||||||
|
</versioning>
|
||||||
|
</metadata>
|
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<metadata>
|
||||||
|
<groupId>org.apache.archiva</groupId>
|
||||||
|
<artifactId>archiva</artifactId>
|
||||||
|
<versioning>
|
||||||
|
<latest>1.2.1</latest>
|
||||||
|
<release>1.2.1</release>
|
||||||
|
<versions>
|
||||||
|
<version>1.2.1</version>
|
||||||
|
</versions>
|
||||||
|
<lastUpdated>20100702064543</lastUpdated>
|
||||||
|
</versioning>
|
||||||
|
</metadata>
|
Loading…
x
Reference in New Issue
Block a user