You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/12/23 21:10:18 UTC
svn commit: r729085 - in /maven/mercury/trunk/mercury-repo/mercury-repo-map:
./ src/ src/main/ src/main/java/ src/main/java/org/
src/main/java/org/apache/ src/main/java/org/apache/maven/
src/main/java/org/apache/maven/mercury/ src/main/java/org/apache/...
Author: ogusakov
Date: Tue Dec 23 12:10:17 2008
New Revision: 729085
URL: http://svn.apache.org/viewvc?rev=729085&view=rev
Log:
[MERCURY-65] adding mapped repo implementation
Added:
maven/mercury/trunk/mercury-repo/mercury-repo-map/ (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/pom.xml (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/ArtifactLocation.java (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlat.java (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlat.java (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlatFactory.java (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/Messages.properties (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/site/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/site/site.xml (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/map/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlatTest.java (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/ant-1.6.5.jar (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/antlr-2.7.7.jar (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/pubring.gpg (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/secring.gpg (with props)
maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/repo/
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Dec 23 12:10:17 2008
@@ -0,0 +1,4 @@
+.settings
+target
+.classpath
+.project
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/pom.xml?rev=729085&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-map/pom.xml (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-map/pom.xml Tue Dec 23 12:10:17 2008
@@ -0,0 +1,44 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo</artifactId>
+ <version>1.0.0-alpha-3-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>mercury-repo-local-map</artifactId>
+ <name>Mercury Local Map-based Repository</name>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-digester</groupId>
+ <artifactId>commons-digester</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-md-shared</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-util</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-crypto-basic</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+</project>
\ No newline at end of file
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/ArtifactLocation.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/ArtifactLocation.java?rev=729085&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/ArtifactLocation.java (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/ArtifactLocation.java Tue Dec 23 12:10:17 2008
@@ -0,0 +1,179 @@
+/**
+ * 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.
+ */
+package org.apache.maven.mercury.repository.local.map;
+
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
+import org.apache.maven.mercury.util.FileUtil;
+
+/**
+ * artifact relative location data object - used by repositories to hold on to intermediate path calculations
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class ArtifactLocation
+{
+ public static final String POM_EXT = ".pom";
+
+ private String prefix;
+
+ private String gaPath;
+ private String versionDir;
+ private String baseName;
+ private String version;
+ private String classifier;
+ private String type;
+
+ private ArtifactBasicMetadata bmd;
+
+ public ArtifactLocation( String prefix, ArtifactBasicMetadata bmd )
+ {
+ if( prefix == null || bmd == null || bmd.getGroupId() == null || bmd.getArtifactId() == null || bmd.getVersion() == null )
+ return;
+
+ this.bmd = bmd;
+
+ this.prefix = prefix;
+ this.gaPath = bmd.getGroupId().replace( '.', FileUtil.SEP_CHAR ) + FileUtil.SEP + bmd.getArtifactId();
+ this.version = bmd.getVersion();
+ this.baseName = bmd.getArtifactId();
+ this.versionDir = this.version;
+ this.classifier = bmd.getClassifier();
+ this.type = bmd.getType();
+ }
+
+ public String getRelPath()
+ {
+ return gaPath+FileUtil.SEP+versionDir+FileUtil.SEP+baseName+FileUtil.DASH+version+getDashedClassifier()+'.'+type;
+ }
+
+ public String getRelPomPath()
+ {
+ return gaPath+FileUtil.SEP+versionDir+FileUtil.SEP+baseName+FileUtil.DASH+version+POM_EXT;
+ }
+
+ public String getAbsPath()
+ {
+ if( prefix == null )
+ return null;
+
+ return getSeparatedPrefix() + getRelPath();
+ }
+
+ public String getAbsPomPath()
+ {
+ if( prefix == null )
+ return null;
+
+ return getSeparatedPrefix() + getRelPomPath();
+ }
+
+ public String getGavPath()
+ {
+ return getGaPath()+FileUtil.SEP+versionDir;
+ }
+
+ public String getBaseVersion()
+ {
+ if( version == null )
+ return null;
+
+ DefaultArtifactVersion dav = new DefaultArtifactVersion( version );
+ return dav.getBase();
+ }
+
+ //---------------------------------------------------------
+ public String getGaPath()
+ {
+ return gaPath;
+ }
+ public void setGaPath( String gaPath )
+ {
+ this.gaPath = gaPath;
+ }
+ public String getVersionDir()
+ {
+ return versionDir;
+ }
+ public void setVersionDir( String versionDir )
+ {
+ this.versionDir = versionDir;
+ }
+ public String getBaseName()
+ {
+ return baseName;
+ }
+ public void setBaseName( String baseName )
+ {
+ this.baseName = baseName;
+ }
+ public String getVersion()
+ {
+ return version;
+ }
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+ public String getClassifier()
+ {
+ return classifier;
+ }
+ public String getDashedClassifier()
+ {
+ return (classifier == null||classifier.length()<1) ? "" : FileUtil.DASH+classifier;
+ }
+ public void setClassifier( String classifier )
+ {
+ this.classifier = classifier;
+ }
+ public String getType()
+ {
+ return type;
+ }
+ public void setType( String type )
+ {
+ this.type = type;
+ }
+ public String getPrefix()
+ {
+ return prefix;
+ }
+ public String getSeparatedPrefix()
+ {
+ if( prefix == null )
+ return null;
+
+ return prefix+(prefix.endsWith( FileUtil.SEP ) ? "" : FileUtil.SEP);
+ }
+ public void setPrefix( String prefix )
+ {
+ this.prefix = prefix;
+ }
+
+ @Override
+ public String toString()
+ {
+ return bmd == null ? "no ArtifactBasicMetadata" : bmd.toString();
+ }
+
+}
\ No newline at end of file
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/ArtifactLocation.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/ArtifactLocation.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlat.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlat.java?rev=729085&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlat.java (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlat.java Tue Dec 23 12:10:17 2008
@@ -0,0 +1,119 @@
+/**
+ * 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.
+ */
+package org.apache.maven.mercury.repository.local.map;
+
+import java.io.File;
+
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.NonExistentProtocolException;
+import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
+
+public class LocalRepositoryFlat
+extends AbstractRepository
+implements LocalRepository
+{
+ public static final String FLAT_REPOSITORY_TYPE = "flat";
+
+ public static final String METADATA_FILE_NAME = "maven-metadata-local.xml";
+
+ private File directory;
+
+ private boolean createPoms = false;
+ private boolean createGroupFolders = false;
+
+ //----------------------------------------------------------------------------------
+ public LocalRepositoryFlat( String id, File directory, boolean createGroupFolders, boolean createPoms )
+ {
+ super( id, FLAT_REPOSITORY_TYPE );
+ this.directory = directory;
+ this.createGroupFolders = createGroupFolders;
+ this.createPoms = createPoms;
+ }
+ //----------------------------------------------------------------------------------
+ public File getDirectory()
+ {
+ return directory;
+ }
+ //----------------------------------------------------------------------------------
+ public RepositoryReader getReader()
+ {
+ return RepositoryReader.NULL_READER;
+ }
+ //----------------------------------------------------------------------------------
+ public RepositoryReader getReader( String protocol )
+ {
+ return RepositoryReader.NULL_READER;
+ }
+ //----------------------------------------------------------------------------------
+ public RepositoryWriter getWriter()
+ {
+ return new LocalRepositoryWriterFlat(this);
+ }
+ //----------------------------------------------------------------------------------
+ public RepositoryWriter getWriter( String protocol )
+ throws NonExistentProtocolException
+ {
+ return getWriter();
+ }
+ //----------------------------------------------------------------------------------
+ public boolean isLocal()
+ {
+ return true;
+ }
+ //----------------------------------------------------------------------------------
+ public boolean isReadable()
+ {
+ return false;
+ }
+ //----------------------------------------------------------------------------------
+ public boolean isWriteable()
+ {
+ return true;
+ }
+ //----------------------------------------------------------------------------------
+ public String getType()
+ {
+ return DEFAULT_REPOSITORY_TYPE;
+ }
+ //----------------------------------------------------------------------------------
+ public boolean isCreatePoms()
+ {
+ return createPoms;
+ }
+ public void setCreatePoms( boolean createPoms )
+ {
+ this.createPoms = createPoms;
+ }
+ public boolean isCreateGroupFolders()
+ {
+ return createGroupFolders;
+ }
+ public void setCreateGroupFolders( boolean createGroupFolders )
+ {
+ this.createGroupFolders = createGroupFolders;
+ }
+ public String getMetadataName()
+ {
+ return METADATA_FILE_NAME;
+ }
+ //----------------------------------------------------------------------------------
+ //----------------------------------------------------------------------------------
+}
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlat.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlat.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlat.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlat.java?rev=729085&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlat.java (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlat.java Tue Dec 23 12:10:17 2008
@@ -0,0 +1,328 @@
+/**
+ * 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.
+ */
+package org.apache.maven.mercury.repository.local.map;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.Set;
+
+import org.apache.maven.mercury.artifact.Artifact;
+import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
+import org.apache.maven.mercury.logging.IMercuryLogger;
+import org.apache.maven.mercury.logging.MercuryLoggerManager;
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.AbstractRepositoryWriter;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
+import org.apache.maven.mercury.transport.api.Server;
+import org.apache.maven.mercury.util.FileLockBundle;
+import org.apache.maven.mercury.util.FileUtil;
+import org.apache.maven.mercury.util.Util;
+import org.codehaus.plexus.lang.DefaultLanguage;
+import org.codehaus.plexus.lang.Language;
+
+public class LocalRepositoryWriterFlat
+extends AbstractRepositoryWriter
+implements RepositoryWriter
+{
+ public static final String SYSTEM_PROPERTY_PARALLEL_WORKERS = "mercury.local.repo.workers";
+ public static final int PARALLEL_WORKERS = Integer.parseInt( System.getProperty( SYSTEM_PROPERTY_PARALLEL_WORKERS, "4" ) );
+
+ public static final long SLEEP_FOR_WORKERS_TICK = 20l;
+
+ public static final String SYSTEM_PROPERTY_SLEEP_FOR_LOCK = "mercury.local.lock.wait.millis";
+ public static final long SLEEP_FOR_LOCK = Long.parseLong( System.getProperty( SYSTEM_PROPERTY_SLEEP_FOR_LOCK, "5000" ) );
+
+ public static final long SLEEP_FOR_LOCK_TICK = 5l;
+
+ private static final IMercuryLogger LOG = MercuryLoggerManager.getLogger( LocalRepositoryWriterFlat.class );
+ private static final Language LANG = new DefaultLanguage( LocalRepositoryWriterFlat.class );
+ //---------------------------------------------------------------------------------------------------------------
+ private static final String [] _protocols = new String [] { "file" };
+
+ private final LocalRepository _repo;
+ private final File _repoDir;
+ private final ArtifactQueue _aq;
+
+ private static final ArifactWriteData LAST_ARTIFACT = new ArifactWriteData( null, null );
+
+ //---------------------------------------------------------------------------------------------------------------
+ public LocalRepositoryWriterFlat( LocalRepository repo )
+ {
+ if( repo == null )
+ throw new IllegalArgumentException("localRepo cannot be null");
+
+ _repoDir = repo.getDirectory();
+ if( _repoDir == null )
+ throw new IllegalArgumentException("localRepo directory cannot be null");
+
+ if( !_repoDir.exists() )
+ throw new IllegalArgumentException("localRepo directory \""+_repoDir.getAbsolutePath()+"\" should exist");
+
+ _repo = repo;
+ _aq = null;
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ private LocalRepositoryWriterFlat( LocalRepository repo, File repoDir, ArtifactQueue aq )
+ {
+ _repo = repo;
+ _repoDir = repoDir;
+ _aq = aq;
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public Repository getRepository()
+ {
+ return _repo;
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public boolean canHandle( String protocol )
+ {
+ return AbstractRepository.DEFAULT_LOCAL_READ_PROTOCOL.equals( protocol );
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public String[] getProtocols()
+ {
+ return _protocols;
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public void close()
+ {
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public void writeArtifacts( Collection<Artifact> artifacts )
+ throws RepositoryException
+ {
+ if( artifacts == null || artifacts.size() < 1 )
+ return;
+
+ int nWorkers = PARALLEL_WORKERS;
+ if( artifacts.size() < nWorkers )
+ nWorkers = artifacts.size();
+
+ ArtifactQueue aq = new ArtifactQueue();
+ LocalRepositoryWriterFlat [] workers = new LocalRepositoryWriterFlat[ nWorkers ];
+
+ for( int i=0; i<nWorkers; i++ )
+ workers[ i ] = new LocalRepositoryWriterFlat( _repo, _repoDir, aq );
+
+ for( Artifact artifact : artifacts )
+ {
+ Set<StreamVerifierFactory> vFacs = null;
+ Server server = _repo.getServer();
+ if( server != null && server.hasWriterStreamVerifierFactories() )
+ vFacs = server.getWriterStreamVerifierFactories();
+
+ if( vFacs == null ) // let it be empty, but not null
+ vFacs = new HashSet<StreamVerifierFactory>(1);
+
+ aq.addArtifact( new ArifactWriteData( artifact, vFacs ) );
+ }
+ aq.addArtifact( LAST_ARTIFACT );
+
+ for( int i=0; i<nWorkers; i++ )
+ workers[ i ].start();
+
+ boolean alive = true;
+ while( alive )
+ {
+ alive = false;
+ for( int i=0; i<nWorkers; i++ )
+ if( workers[ i ].isAlive() )
+ {
+ alive = true;
+ try { sleep( SLEEP_FOR_WORKERS_TICK ); } catch( InterruptedException ie ) {}
+ }
+ }
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ /* (non-Javadoc)
+ * @see java.lang.Thread#run()
+ */
+ @Override
+ public void run()
+ {
+ try
+ {
+ for(;;)
+ {
+ ArifactWriteData awd = _aq.getArtifact();
+
+ if( awd == null || awd.artifact == null )
+ break;
+
+ writeArtifact( awd.artifact, awd.vFacs );
+ }
+ }
+ catch (InterruptedException e)
+ {
+ }
+ catch( RepositoryException e )
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ public void writeArtifact( final Artifact artifact, final Set<StreamVerifierFactory> vFacs )
+ throws RepositoryException
+ {
+ if( artifact == null )
+ return;
+
+ boolean isPom = "pom".equals( artifact.getType() );
+
+ byte [] pomBlob = artifact.getPomBlob();
+ boolean hasPomBlob = pomBlob != null && pomBlob.length > 0;
+
+ InputStream in = artifact.getStream();
+ if( in == null )
+ {
+ File aFile = artifact.getFile();
+ if( aFile == null && !isPom )
+ {
+ throw new RepositoryException( LANG.getMessage( "artifact.no.stream", artifact.toString() ) );
+ }
+
+ try
+ {
+ in = new FileInputStream( aFile );
+ }
+ catch( FileNotFoundException e )
+ {
+ if( !isPom )
+ throw new RepositoryException( e );
+ }
+ }
+
+ String relGroupPath = ((LocalRepositoryFlat)_repo).isCreateGroupFolders() ? artifact.getGroupId() : "";
+ String versionPath = _repoDir.getAbsolutePath() + (Util.isEmpty( relGroupPath ) ? "" : "/"+relGroupPath);
+
+ String lockDir = null;
+ FileLockBundle fLock = null;
+
+ try
+ {
+
+ if( isPom )
+ {
+ if( in == null && !hasPomBlob )
+ throw new RepositoryException( LANG.getMessage( "pom.artifact.no.stream", artifact.toString() ) );
+
+ if( in != null )
+ {
+ byte [] pomBlobBytes = FileUtil.readRawData( in );
+ hasPomBlob = pomBlobBytes != null && pomBlobBytes.length > 0;
+ if( hasPomBlob )
+ pomBlob = pomBlobBytes;
+ }
+ }
+
+ // create folders
+ lockDir = versionPath;
+
+ File gav = new File( lockDir );
+ gav.mkdirs();
+
+ fLock = FileUtil.lockDir( lockDir, SLEEP_FOR_LOCK, SLEEP_FOR_LOCK_TICK );
+ if( fLock == null )
+ throw new RepositoryException( LANG.getMessage( "cannot.lock.gav", lockDir, ""+SLEEP_FOR_LOCK ) );
+
+ String fName = versionPath+'/'+artifact.getBaseName()+'.'+artifact.getType();
+
+ if( !isPom ) // first - take care of the binary
+ FileUtil.writeAndSign( fName, in, vFacs );
+
+ // if classier - nothing else to do :)
+ if( artifact.hasClassifier() )
+ return;
+
+ if( ((LocalRepositoryFlat)_repo).isCreatePoms() && hasPomBlob )
+ {
+ FileUtil.writeAndSign( versionPath
+ +'/'+artifact.getArtifactId()+'-'+artifact.getVersion()+".pom", pomBlob, vFacs
+ );
+ }
+
+ }
+ catch( Exception e )
+ {
+ throw new RepositoryException( e );
+ }
+ finally
+ {
+ if( fLock != null )
+ fLock.release();
+ }
+
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ //---------------------------------------------------------------------------------------------------------------
+}
+//=================================================================================================================
+class ArifactWriteData
+{
+ Artifact artifact;
+ Set<StreamVerifierFactory> vFacs;
+
+ public ArifactWriteData(Artifact artifact, Set<StreamVerifierFactory> vFacs)
+ {
+ this.artifact = artifact;
+ this.vFacs = vFacs;
+ }
+}
+//=================================================================================================================
+class ArtifactQueue
+{
+ LinkedList<ArifactWriteData> queue = new LinkedList<ArifactWriteData>();
+ boolean empty = false;
+
+ public synchronized void addArtifact( ArifactWriteData awd )
+ {
+ queue.addLast( awd );
+ empty = false;
+ notify();
+ }
+
+ public synchronized ArifactWriteData getArtifact()
+ throws InterruptedException
+ {
+ if( empty )
+ return null;
+
+ while( queue.isEmpty() )
+ wait();
+
+ ArifactWriteData res = queue.removeFirst();
+
+ if( res.artifact == null )
+ {
+ empty = true;
+ return null;
+ }
+
+ return res;
+ }
+}
+//=================================================================================================================
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlat.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlat.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlatFactory.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlatFactory.java?rev=729085&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlatFactory.java (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlatFactory.java Tue Dec 23 12:10:17 2008
@@ -0,0 +1,50 @@
+/**
+ * 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.
+ */
+package org.apache.maven.mercury.repository.local.map;
+
+import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
+import org.apache.maven.mercury.repository.api.RepositoryWriterFactory;
+import org.codehaus.plexus.lang.DefaultLanguage;
+import org.codehaus.plexus.lang.Language;
+
+public class LocalRepositoryWriterFlatFactory
+implements RepositoryWriterFactory
+{
+ private static final Language LANG = new DefaultLanguage( LocalRepositoryWriterFlatFactory.class );
+ private static final LocalRepositoryWriterFlatFactory FACTORY = new LocalRepositoryWriterFlatFactory();
+
+ static
+ {
+ AbstractRepository.register( LocalRepositoryFlat.FLAT_REPOSITORY_TYPE, FACTORY );
+ }
+
+ public RepositoryWriter getWriter( Repository repo )
+ throws RepositoryException
+ {
+ if( repo == null || !(repo instanceof LocalRepository) )
+ throw new RepositoryException( LANG.getMessage( "bad.repository.type", repo == null ? "null" : repo.getClass().getName() ) );
+
+ return new LocalRepositoryWriterFlat( (LocalRepository)repo );
+ }
+
+}
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlatFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryWriterFlatFactory.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/Messages.properties
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/Messages.properties?rev=729085&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/Messages.properties (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/Messages.properties Tue Dec 23 12:10:17 2008
@@ -0,0 +1,33 @@
+#
+# 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.
+#
+bad.repository.type=repository should implement LocalRepository, instead got {0}
+empty.query=received empty query - {0}
+binary.not.found=Artifact {0} binary at not found {1}
+ga.not.found=Artifact {0} version group not found at {1}
+gav.not.found=No artifact version for {0} found in {1}
+snapshot.not.found=No snapshot version for {0} found in {1}
+gavdir.not.found=No directory {1} for artifact {0}
+pom.not.found=Artifact {0} - binary exists, but POM not found in the repository
+artifact.no.stream=Cannot find either input stream or file, associated with artifact {0}
+pom.artifact.no.stream=Cannot find either pom blob, input stream or file, associated with artifact {0}
+no.signature.file=Verifier for {0} is mandatory, but file {1} does not exist
+signature.failed=Signature "{0}": verification failed for file {1}
+cannot.read.signature.file=Cannot read signature file {0}, error: {1}
+cannot.lock.gav=Cannot lock GAV folder {0} in {1} millis
+file.is.empty=File {0} exists, but is empty. Data corruption somewhere - please repair metadata.
\ No newline at end of file
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/Messages.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/main/java/org/apache/maven/mercury/repository/local/map/Messages.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/site/site.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/site/site.xml?rev=729085&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-map/src/site/site.xml (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-map/src/site/site.xml Tue Dec 23 12:10:17 2008
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<project>
+
+ <body>
+
+ <menu ref="parent"/>
+
+ <menu ref="reports"/>
+
+ </body>
+
+</project>
\ No newline at end of file
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/site/site.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/site/site.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlatTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlatTest.java?rev=729085&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlatTest.java (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlatTest.java Tue Dec 23 12:10:17 2008
@@ -0,0 +1,207 @@
+/**
+ * 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.
+ */
+package org.apache.maven.mercury.repository.local.map;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.mercury.artifact.Artifact;
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.DefaultArtifact;
+import org.apache.maven.mercury.logging.IMercuryLogger;
+import org.apache.maven.mercury.logging.MercuryLoggerManager;
+import org.apache.maven.mercury.repository.api.RepositoryWriter;
+import org.apache.maven.mercury.util.FileUtil;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class LocalRepositoryFlatTest
+ extends TestCase
+{
+ private static final IMercuryLogger LOG = MercuryLoggerManager.getLogger( LocalRepositoryFlatTest.class );
+
+ File _dir;
+ LocalRepositoryFlat _repo;
+
+ String repoUrl = "http://repo1.sonatype.org";
+// String repoUrl = "http://repository.sonatype.org/content/groups/public";
+
+ Artifact a;
+ Artifact b;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ _dir = File.createTempFile( "test-flat-", "-repo" );
+ _dir.delete();
+ _dir.mkdirs();
+
+ _repo = new LocalRepositoryFlat("testFlatRepo", _dir, false, false );
+
+ byte [] pomBlob = "pomblob".getBytes();
+
+ a = new DefaultArtifact( new ArtifactBasicMetadata("a:a:1.0.0") );
+
+ File ant = File.createTempFile( "test-flat", "-repo" );
+ InputStream in = LocalRepositoryFlatTest.class.getResourceAsStream( "/ant-1.6.5.jar" );
+ FileUtil.writeRawData( ant, in );
+ a.setFile( ant );
+ a.setPomBlob( pomBlob );
+
+ b = new DefaultArtifact( new ArtifactBasicMetadata("b:b:1.0.0") );
+
+ File antlr = File.createTempFile( "test-flat", "-repo" );
+ in = LocalRepositoryFlatTest.class.getResourceAsStream( "/antlr-2.7.7.jar" );
+ FileUtil.writeRawData( antlr, in );
+ b.setFile( antlr );
+ b.setPomBlob( pomBlob );
+ }
+
+ public void testWriteFlat()
+ throws Exception
+ {
+ String test = "testWriteFlat()";
+
+ System.out.println(test+": test repo is in "+_repo.getDirectory());
+
+ List<Artifact> artifacts = new ArrayList<Artifact>();
+ artifacts.add( a );
+ artifacts.add( b );
+
+ RepositoryWriter rw = _repo.getWriter();
+ rw.writeArtifacts( artifacts );
+
+ File af = new File ( _dir, "a-1.0.0.jar" );
+
+ assertTrue( af.exists() );
+ assertEquals( 1034049L, af.length() );
+
+ File bf = new File ( _dir, "b-1.0.0.jar" );
+
+ assertTrue( bf.exists() );
+ assertEquals( 445288L, bf.length() );
+ }
+
+
+ public void testWriteFlatWithPom()
+ throws Exception
+ {
+ String test = "testWriteFlatWithPom()";
+
+ _repo.setCreatePoms( true );
+
+ System.out.println(test+": test repo is in "+_repo.getDirectory());
+
+ List<Artifact> artifacts = new ArrayList<Artifact>();
+ artifacts.add( a );
+ artifacts.add( b );
+
+ RepositoryWriter rw = _repo.getWriter();
+ rw.writeArtifacts( artifacts );
+
+ File af = new File ( _dir, "a-1.0.0.jar" );
+
+ assertTrue( af.exists() );
+ assertEquals( 1034049L, af.length() );
+
+ File ap = new File ( _dir, "a-1.0.0.pom" );
+ assertTrue( ap.exists() );
+
+ File bf = new File ( _dir, "b-1.0.0.jar" );
+
+ assertTrue( bf.exists() );
+ assertEquals( 445288L, bf.length() );
+
+ File bp = new File ( _dir, "b-1.0.0.pom" );
+ assertTrue( bp.exists() );
+ }
+
+ public void testWriteFlatWithGroup()
+ throws Exception
+ {
+ String test = "testWriteFlatWithGroup()";
+
+ _repo.setCreateGroupFolders( true );
+
+ System.out.println(test+": test repo is in "+_repo.getDirectory());
+
+ List<Artifact> artifacts = new ArrayList<Artifact>();
+ artifacts.add( a );
+ artifacts.add( b );
+
+ RepositoryWriter rw = _repo.getWriter();
+ rw.writeArtifacts( artifacts );
+
+ File af = new File ( _dir, "a/a-1.0.0.jar" );
+
+ assertTrue( af.exists() );
+ assertEquals( 1034049L, af.length() );
+
+ File bf = new File ( _dir, "b/b-1.0.0.jar" );
+
+ assertTrue( bf.exists() );
+ assertEquals( 445288L, bf.length() );
+ }
+
+ public void testWriteFlatWithGroupAndPom()
+ throws Exception
+ {
+ String test = "testWriteFlatWithGroupAndPom()";
+
+ _repo.setCreateGroupFolders( true );
+ _repo.setCreatePoms( true );
+
+ System.out.println(test+": test repo is in "+_repo.getDirectory());
+
+ List<Artifact> artifacts = new ArrayList<Artifact>();
+ artifacts.add( a );
+ artifacts.add( b );
+
+ RepositoryWriter rw = _repo.getWriter();
+ rw.writeArtifacts( artifacts );
+
+ File af = new File ( _dir, "a/a-1.0.0.jar" );
+
+ assertTrue( af.exists() );
+ assertEquals( 1034049L, af.length() );
+
+ File ap = new File ( _dir, "a/a-1.0.0.pom" );
+ assertTrue( ap.exists() );
+
+ File bf = new File ( _dir, "b/b-1.0.0.jar" );
+
+ assertTrue( bf.exists() );
+ assertEquals( 445288L, bf.length() );
+
+ File bp = new File ( _dir, "b/b-1.0.0.pom" );
+ assertTrue( bp.exists() );
+ }
+
+
+}
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlatTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryFlatTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/ant-1.6.5.jar
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/ant-1.6.5.jar?rev=729085&view=auto
==============================================================================
Binary file - no diff available.
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/ant-1.6.5.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/antlr-2.7.7.jar
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/antlr-2.7.7.jar?rev=729085&view=auto
==============================================================================
Binary file - no diff available.
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/antlr-2.7.7.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/pubring.gpg
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/pubring.gpg?rev=729085&view=auto
==============================================================================
Binary file - no diff available.
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/pubring.gpg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/secring.gpg
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/secring.gpg?rev=729085&view=auto
==============================================================================
Binary file - no diff available.
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-map/src/test/resources/pgp/secring.gpg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream