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