You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2013/12/09 03:46:56 UTC
svn commit: r1549368 - in /archiva/trunk/archiva-modules:
archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/
metadata/metadata-repository-api/
metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storag...
Author: olamy
Date: Mon Dec 9 02:46:56 2013
New Revision: 1549368
URL: http://svn.apache.org/r1549368
Log:
[MRM-1761] Returned URL in search result does not work for SNAPSHOTS
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java?rev=1549368&r1=1549367&r2=1549368&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java Mon Dec 9 02:46:56 2013
@@ -527,6 +527,28 @@ public class ArchivaDavResourceFactory
return path;
}
+ private String evaluatePathWithVersion( ArchivaDavResourceLocator archivaLocator, ManagedRepositoryContent managedRepositoryContent )
+ throws DavException
+ {
+ String layout = managedRepositoryContent.getRepository() == null ? new ManagedRepository( ).getLayout() : managedRepositoryContent.getRepository().getLayout();
+ RepositoryStorage repositoryStorage =
+ this.applicationContext.getBean( "repositoryStorage#" + layout, RepositoryStorage.class );
+ try
+ {
+ return repositoryStorage.getFilePathWithVersion( archivaLocator.getResourcePath(), managedRepositoryContent );
+ }
+ catch ( LayoutException e )
+ {
+ log.error( e.getMessage(), e );
+ throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
+ }
+ catch ( XMLException e )
+ {
+ log.error( e.getMessage(), e );
+ throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
+ }
+ }
+
private DavResource processRepository( final DavServletRequest request, ArchivaDavResourceLocator archivaLocator,
String activePrincipal, ManagedRepositoryContent managedRepositoryContent,
ManagedRepository managedRepository )
@@ -535,7 +557,8 @@ public class ArchivaDavResourceFactory
DavResource resource = null;
if ( isAuthorized( request, managedRepositoryContent.getId() ) )
{
- String path = getLogicalResource( archivaLocator, managedRepository, false );
+ // Maven Centric part ask evaluation if -SNAPSHOT
+ String path = evaluatePathWithVersion(archivaLocator, managedRepositoryContent);
if ( path.startsWith( "/" ) )
{
path = path.substring( 1 );
Modified: archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml?rev=1549368&r1=1549367&r2=1549368&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml (original)
+++ archiva/trunk/archiva-modules/metadata/metadata-repository-api/pom.xml Mon Dec 9 02:46:56 2013
@@ -91,7 +91,9 @@
org.apache.archiva.model,
org.apache.archiva.policies,
org.apache.archiva.repository,
- org.apache.archiva.admin.model.beans
+ org.apache.archiva.admin.model.beans,
+ org.apache.archiva.repository.layout,
+ org.apache.archiva.xml
</Import-Package>
</instructions>
</configuration>
Modified: archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java?rev=1549368&r1=1549367&r2=1549368&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java (original)
+++ archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java Mon Dec 9 02:46:56 2013
@@ -27,6 +27,8 @@ import org.apache.archiva.metadata.repos
import org.apache.archiva.model.ArtifactReference;
import org.apache.archiva.policies.ProxyDownloadException;
import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.layout.LayoutException;
+import org.apache.archiva.xml.XMLException;
import java.util.Collection;
@@ -70,4 +72,9 @@ public interface RepositoryStorage
* @since 2.0.0
*/
String getFilePath( String requestPath, ManagedRepository managedRepository );
+
+ String getFilePathWithVersion( final String requestPath, ManagedRepositoryContent managedRepositoryContent )
+ throws LayoutException, XMLException;
+
+
}
Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java?rev=1549368&r1=1549367&r2=1549368&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java Mon Dec 9 02:46:56 2013
@@ -35,6 +35,7 @@ import org.apache.archiva.maven2.metadat
import org.apache.archiva.metadata.model.ArtifactMetadata;
import org.apache.archiva.metadata.model.ProjectMetadata;
import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
import org.apache.archiva.metadata.repository.filter.Filter;
import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
@@ -50,6 +51,8 @@ import org.apache.archiva.proxy.common.W
import org.apache.archiva.proxy.model.RepositoryProxyConnectors;
import org.apache.archiva.reports.RepositoryProblemFacet;
import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.content.PathParser;
+import org.apache.archiva.repository.layout.LayoutException;
import org.apache.archiva.xml.XMLException;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
@@ -131,6 +134,10 @@ public class Maven2RepositoryStorage
@Inject
private ApplicationContext applicationContext;
+ @Inject
+ @Named ( value = "pathParser#default")
+ private PathParser pathParser;
+
private static final Logger log = LoggerFactory.getLogger( Maven2RepositoryStorage.class );
private static final String METADATA_FILENAME_START = "maven-metadata";
@@ -757,6 +764,34 @@ public class Maven2RepositoryStorage
}
+ public String getFilePathWithVersion( final String requestPath, ManagedRepositoryContent managedRepositoryContent )
+ throws LayoutException, XMLException
+ {
+ String requestPathNoRepository = removePrefix( requestPath );
+ ArtifactReference artifactReference = pathParser.toArtifactReference( requestPathNoRepository );
+
+ String filePath = getFilePath( requestPath, managedRepositoryContent.getRepository() );
+
+ if (StringUtils.endsWith( artifactReference.getVersion(), "SNAPSHOT" ))
+ {
+ // read maven metadata to get last timestamp
+ File metadataDir = new File( managedRepositoryContent.getRepoRoot(), filePath).getParentFile();
+ ArchivaRepositoryMetadata archivaRepositoryMetadata = MavenMetadataReader.read( new File(metadataDir, METADATA_FILENAME ) );
+ int buildNumber = archivaRepositoryMetadata.getSnapshotVersion().getBuildNumber();
+ String timestamp = archivaRepositoryMetadata.getSnapshotVersion().getTimestamp();
+
+ // org/apache/archiva/archiva-checksum/1.4-M4-SNAPSHOT/archiva-checksum-1.4-M4-SNAPSHOT.jar
+ // -> archiva-checksum-1.4-M4-20130425.081822-1.jar
+
+ filePath = StringUtils.replace( filePath, artifactReference.getArtifactId() + "-" + artifactReference.getVersion(),
+ artifactReference.getArtifactId() + "-" + StringUtils.remove( artifactReference.getVersion(), "-SNAPSHOT")
+ + "-" + timestamp + "-" + buildNumber );
+
+ }
+
+ return filePath;
+ }
+
//-----------------------------
@@ -1002,4 +1037,13 @@ public class Maven2RepositoryStorage
}
+ public PathParser getPathParser()
+ {
+ return pathParser;
+ }
+
+ public void setPathParser( PathParser pathParser )
+ {
+ this.pathParser = pathParser;
+ }
}