You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2006/07/24 00:41:25 UTC

svn commit: r424845 - in /geronimo/sandbox/svkmerge/geronimo-repository: geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/ geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/ geronimo-repository-providers/ geron...

Author: jdillon
Date: Sun Jul 23 15:41:23 2006
New Revision: 424845

URL: http://svn.apache.org/viewvc?rev=424845&view=rev
Log:
Copied over the kernel repository apis (same package, pending renaming)
Added modules for the maven1 and maven2 impls
Created basic JDBM repository impl
Added RepositoryCopier util to copy from a listable repo to a writable repo

Added:
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/
      - copied from r424798, geronimo/sandbox/svkmerge/m2migration/modules/kernel/src/java/org/apache/geronimo/kernel/repository/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/RepositoryCopier.java   (with props)
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/data/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/data/m1/
      - copied from r424798, geronimo/sandbox/svkmerge/m2migration/modules/system/src/test-repo/m1/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/data/m2/
      - copied from r424798, geronimo/sandbox/svkmerge/m2migration/modules/system/src/test-repo/m2/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/java/org/apache/geronimo/repository/jdbm/RepositoryCopierTest.java   (with props)
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/pom.xml   (with props)
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/main/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/main/java/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/main/java/org/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/main/java/org/apache/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/main/java/org/apache/geronimo/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/main/java/org/apache/geronimo/repository/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/main/java/org/apache/geronimo/repository/maven1/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/test/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/test/java/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/test/java/org/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/test/java/org/apache/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/test/java/org/apache/geronimo/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/test/java/org/apache/geronimo/repository/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/src/test/java/org/apache/geronimo/repository/maven1/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/pom.xml   (with props)
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/main/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/main/java/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/main/java/org/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/main/java/org/apache/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/main/java/org/apache/geronimo/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/main/java/org/apache/geronimo/repository/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/main/java/org/apache/geronimo/repository/maven2/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/test/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/test/java/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/test/java/org/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/test/java/org/apache/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/test/java/org/apache/geronimo/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/test/java/org/apache/geronimo/repository/
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/src/test/java/org/apache/geronimo/repository/maven2/
Modified:
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Artifact.java
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Environment.java
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/pom.xml
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/ArtifactDatabase.java
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/JdbmRepository.java
    geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/pom.xml

Modified: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Artifact.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Artifact.java?rev=424845&r1=424798&r2=424845&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Artifact.java (original)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Artifact.java Sun Jul 23 15:41:23 2006
@@ -20,7 +20,7 @@
 import java.io.Serializable;
 
 /**
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
  */
 public class Artifact implements Comparable, Serializable {
     private static final long serialVersionUID = -3459638899709893444L;

Modified: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Environment.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Environment.java?rev=424845&r1=424798&r2=424845&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Environment.java (original)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-api/src/main/java/org/apache/geronimo/kernel/repository/Environment.java Sun Jul 23 15:41:23 2006
@@ -30,7 +30,7 @@
 /**
  * holds the data from the EnvironmentType xml while it is being resolved, transitively closed, etc.
  *
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
  */
 public class Environment implements Serializable {
     private static final long serialVersionUID = 7075760873629376317L;

Modified: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/pom.xml?rev=424845&r1=424844&r2=424845&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/pom.xml (original)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/pom.xml Sun Jul 23 15:41:23 2006
@@ -40,5 +40,37 @@
             <type>jar</type>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <!--
+                Copy the m1 and m2 repos for testing w/o the .svn dirs
+                -->
+                <executions>
+                    <execution>
+                        <phase>generate-test-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <tasks>
+                                <mkdir dir="${pom.basedir}/target"/>
+                                <copy todir="${pom.basedir}/target">
+                                    <fileset dir="${pom.basedir}/src/test/data">
+                                        <include name="m1/**"/>
+                                        <include name="m2/**"/>
+                                        <exclude name="**/.svn/**"/>
+                                    </fileset>
+                                </copy>
+                            </tasks>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
     
 </project>

Modified: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/ArtifactDatabase.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/ArtifactDatabase.java?rev=424845&r1=424844&r2=424845&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/ArtifactDatabase.java (original)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/ArtifactDatabase.java Sun Jul 23 15:41:23 2006
@@ -21,8 +21,14 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Properties;
 
 import org.apache.geronimo.kernel.repository.Artifact;
+import jdbm.RecordManagerFactory;
+import jdbm.RecordManager;
+import jdbm.helper.StringComparator;
+import jdbm.helper.TupleBrowser;
+import jdbm.btree.BTree;
 
 /**
  * Provides a database of {@link Artifact} objects.
@@ -33,8 +39,14 @@
 {
     private static final Log log = LogFactory.getLog(ArtifactDatabase.class);
 
+    private static final String ARTIFACTS_BTREE_NAME = "artifacts_btree";
+
     private File baseDir;
 
+    private RecordManager recman;
+
+    private BTree artifacts;
+
     public ArtifactDatabase(final File baseDir) throws IOException {
         if (baseDir == null) {
             throw new IllegalArgumentException("Basedir is null");
@@ -45,15 +57,59 @@
         //
 
         this.baseDir = baseDir;
+        this.baseDir.mkdirs();
+
+        // Setup the record manager
+        Properties props = new Properties();
+        File file = new File(baseDir, "metadata");
+        this.recman = RecordManagerFactory.createRecordManager(file.getPath(), props);
+
+        // Loade the artifacts btree
+        long recid = recman.getNamedObject(ARTIFACTS_BTREE_NAME);
+        if ( recid != 0 ) {
+            this.artifacts = BTree.load(recman, recid);
+        }
+        else {
+            this.artifacts = BTree.createInstance(recman, new StringComparator());
+            recman.setNamedObject(ARTIFACTS_BTREE_NAME, artifacts.getRecid());
+        }
     }
 
     public File getBaseDir() {
         return baseDir;
     }
 
-    public void close() {
-        //
-        // TODO:
-        //
+    public void commit() throws IOException {
+        recman.commit();
+    }
+
+    public void rollback() throws IOException {
+        recman.rollback();
+    }
+
+    public void close() throws IOException {
+        recman.close();
+    }
+
+    public boolean contains(final Artifact artifact) throws IOException {
+        assert artifact != null;
+        assert artifact.isResolved();
+
+        String key = artifact.toString();
+        Object obj = artifacts.find(key);
+
+        return obj != null;
+    }
+
+    public void insert(final Artifact artifact) throws IOException {
+        assert artifact != null;
+        assert artifact.isResolved();
+
+        String key = artifact.toString();
+        artifacts.insert(key, artifact, false); // do not replace
+    }
+
+    public TupleBrowser browse() throws IOException {
+        return artifacts.browse();
     }
 }

Modified: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/JdbmRepository.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/JdbmRepository.java?rev=424845&r1=424844&r2=424845&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/JdbmRepository.java (original)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/JdbmRepository.java Sun Jul 23 15:41:23 2006
@@ -22,6 +22,7 @@
 
 import java.net.URI;
 import java.util.SortedSet;
+import java.util.TreeSet;
 
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
@@ -32,6 +33,8 @@
 
 import org.apache.geronimo.system.repository.AbstractRepository;
 import org.apache.geronimo.system.serverinfo.ServerInfo;
+import jdbm.helper.TupleBrowser;
+import jdbm.helper.Tuple;
 
 /**
  * Geronimo repository implemenation backed by <a href="http://jdbm.sourceforge.net">JDBM</a>.
@@ -55,6 +58,12 @@
 
         this.db = new ArtifactDatabase(root);
         this.dataDir = new File(root, "data");
+
+        //
+        // TODO: Validate data dir
+        //
+
+        this.dataDir.mkdirs();
     }
 
     private void ensureFullyResolved(final Artifact artifact) {
@@ -66,14 +75,20 @@
     }
 
     //
+    // TODO: Add GBean lifecycle hooks
+    //
+
+    //
     // Repository
     //
-    
+
     public File getLocation(final Artifact artifact) {
         assert artifact != null;
-        
+
         ensureFullyResolved(artifact);
 
+        log.info("Getting location for artifact: " + artifact);
+
         Artifact base = new Artifact(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), null);
 
         // Use a shorten but unique path that includes the filename for clarity
@@ -88,71 +103,105 @@
 
         ensureFullyResolved(artifact);
 
-        //
-        // TODO: Query the DB to get the status of the artifact
-        //
-
-        return false;
+        try {
+            return db.contains(artifact);
+        }
+        catch (IOException e) {
+            throw new RuntimeException("Unexpected database failure", e);
+        }
     }
 
     //
     // WritableRepository
     //
-    
+
     public void copyToRepository(final InputStream source, final int size, final Artifact destination, final FileWriteMonitor monitor) throws IOException {
         assert source != null;
-        assert size > 0;
         assert destination != null;
         assert monitor != null;
-
-        ensureFullyResolved(destination);
+        // size may be == 0
         
-        //
-        // TODO: Copy... maybe able to re-use super-class impl... check
-        //
+        ensureFullyResolved(destination);
 
         //
         // TODO: Insert into DB
         //
+        db.insert(destination);
+
+        try {
+            // For now just delegate to our parent to perform the copy
+            super.copyToRepository(source, size, destination, monitor);
+
+            db.commit();
+        }
+        catch (Exception e) {
+            log.error("Failed to copy artifact; rolling back", e);
+            db.rollback();
+
+            //
+            // TODO: Clean up file?
+            //
+        }
     }
-    
+
     //
     // ListableRepository
     //
-    
+
     public SortedSet list(final Artifact query) {
         assert query != null;
 
-        //
-        // TODO: Query the DB
-        //
+        SortedSet artifacts = new TreeSet();
+
+        try {
+            TupleBrowser browser = db.browse();
+            Tuple tuple = new Tuple();
+
+            while (browser.getNext(tuple)) {
+                //
+                // TODO: ...
+                //
+            }
+        }
+        catch (IOException e) {
+            throw new RuntimeException("Failed to browse database", e);
+        }
 
-        return null;
+        return artifacts;
     }
-    
+
     public SortedSet list() {
+        SortedSet artifacts = new TreeSet();
 
-        //
-        // TODO: List all artifacts from the DB
-        //
+        try {
+            TupleBrowser browser = db.browse();
+            Tuple tuple = new Tuple();
+
+            while (browser.getNext(tuple)) {
+                artifacts.add(tuple.getValue());
+            }
+        }
+        catch (IOException e) {
+            throw new RuntimeException("Failed to browse database", e);
+        }
 
-        return null;
+        return artifacts;
     }
-    
+
     //
     // GBean
     //
-    
+
     public static final GBeanInfo GBEAN_INFO;
 
     static {
         GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic(JdbmRepository.class, "Repository");
-        
+
         builder.addAttribute("root", URI.class, true);
         builder.addReference("ServerInfo", ServerInfo.class, "GBean");
         builder.addInterface(JdbmRepository.class);
         builder.setConstructor(new String[]{ "root", "ServerInfo" });
-        
+
         GBEAN_INFO = builder.getBeanInfo();
     }
 

Added: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/RepositoryCopier.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/RepositoryCopier.java?rev=424845&view=auto
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/RepositoryCopier.java (added)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/RepositoryCopier.java Sun Jul 23 15:41:23 2006
@@ -0,0 +1,96 @@
+/**
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.geronimo.repository.jdbm;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.geronimo.kernel.repository.ListableRepository;
+import org.apache.geronimo.kernel.repository.WriteableRepository;
+import org.apache.geronimo.kernel.repository.Artifact;
+import org.apache.geronimo.kernel.repository.FileWriteMonitor;
+
+import java.util.Set;
+import java.util.Iterator;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Utility to copy one listable repository to another writable repository.
+ *
+ * @version $Rev$ $Date$
+ */
+public class RepositoryCopier
+{
+    private static final Log log = LogFactory.getLog(RepositoryCopier.class);
+
+    private ListableRepository source;
+
+    private WriteableRepository target;
+
+    public RepositoryCopier(final ListableRepository source, final WriteableRepository target) {
+        if (source == null) {
+            throw new IllegalArgumentException("Source is null");
+        }
+        if (target == null) {
+            throw new IllegalArgumentException("Target is null");
+        }
+
+        this.source = source;
+        this.target = target;
+    }
+
+    public void copy(final FileWriteMonitor monitor) throws IOException {
+        assert monitor != null;
+        
+        log.debug("Copying artifacts from " + source + " to " + target);
+
+        Set artifacts = source.list();
+        Iterator iter = artifacts.iterator();
+
+        while (iter.hasNext()) {
+            Artifact artifact = (Artifact)iter.next();
+            log.debug("Copying artifact: " + artifact);
+
+            File sourceFile = source.getLocation(artifact);
+            target.copyToRepository(sourceFile, artifact, monitor);
+        }
+    }
+
+    public static void copy(final ListableRepository source, final WriteableRepository target, final FileWriteMonitor monitor) throws IOException {
+        RepositoryCopier copier = new RepositoryCopier(source, target);
+        copier.copy(monitor);
+    }
+
+    public static void copy(final ListableRepository source, final WriteableRepository target) throws IOException {
+        FileWriteMonitor monitor = new FileWriteMonitor() {
+            public void writeStarted(final String fileDescription, final int fileSize) {
+                log.info("Copying " + fileDescription);
+            }
+
+            public void writeProgress(int bytes) {
+                log.debug("Copy progress: " + bytes + " bytes");
+            }
+
+            public void writeComplete(int bytes) {
+                log.info("Copy completed (" + bytes + " bytes)");
+            }
+        };
+
+        copy(source, target, monitor);
+    }
+}

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/RepositoryCopier.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/RepositoryCopier.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/main/java/org/apache/geronimo/repository/jdbm/RepositoryCopier.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/java/org/apache/geronimo/repository/jdbm/RepositoryCopierTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/java/org/apache/geronimo/repository/jdbm/RepositoryCopierTest.java?rev=424845&view=auto
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/java/org/apache/geronimo/repository/jdbm/RepositoryCopierTest.java (added)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/java/org/apache/geronimo/repository/jdbm/RepositoryCopierTest.java Sun Jul 23 15:41:23 2006
@@ -0,0 +1,107 @@
+/**
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.geronimo.repository.jdbm;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.apache.geronimo.repository.jdbm.JdbmRepository;
+import org.apache.geronimo.kernel.repository.Artifact;
+import org.apache.geronimo.system.repository.Maven1Repository;
+import org.apache.geronimo.system.repository.Maven2Repository;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Unit tests for the {@link RepositoryCopier} class.
+ *
+ * @version $Rev$ $Date$
+ */
+public class RepositoryCopierTest
+    extends TestCase
+{
+    private static final Log log = LogFactory.getLog(RepositoryCopier.class);
+
+    private File basedir = new File(System.getProperty("basedir"));
+
+    public void testCopyM1toM1() throws Exception {
+        File dir;
+
+        dir = new File(basedir, "target/m1");
+        Maven1Repository source = new Maven1Repository(dir);
+
+        dir = new File(basedir, "target/m1-to-m1");
+        dir.mkdirs();
+        Maven1Repository target = new Maven1Repository(dir);
+
+        RepositoryCopier.copy(source, target);
+    }
+
+    public void testCopyM1toM2() throws Exception {
+        File dir;
+
+        dir = new File(basedir, "target/m1");
+        Maven1Repository source = new Maven1Repository(dir);
+
+        dir = new File(basedir, "target/m1-to-m2");
+        dir.mkdirs();
+        Maven2Repository target = new Maven2Repository(dir);
+
+        RepositoryCopier.copy(source, target);
+    }
+
+    public void testCopyM2toM1() throws Exception {
+        File dir;
+
+        dir = new File(basedir, "target/m2");
+        Maven2Repository source = new Maven2Repository(dir);
+
+        dir = new File(basedir, "target/m2-to-m1");
+        dir.mkdirs();
+        Maven1Repository target = new Maven1Repository(dir);
+
+        RepositoryCopier.copy(source, target);
+    }
+
+    public void testCopyM2toM2() throws Exception {
+        File dir;
+
+        dir = new File(basedir, "target/m2");
+        Maven2Repository source = new Maven2Repository(dir);
+
+        dir = new File(basedir, "target/m2-to-m2");
+        dir.mkdirs();
+        Maven2Repository target = new Maven2Repository(dir);
+
+        RepositoryCopier.copy(source, target);
+    }
+
+    public void testCopyM1toJDBM() throws Exception {
+        File dir;
+
+        dir = new File(basedir, "target/m1");
+        Maven1Repository source = new Maven1Repository(dir);
+
+        dir = new File(basedir, "target/m1-to-jdbm");
+        dir.mkdirs();
+        JdbmRepository target = new JdbmRepository(dir);
+
+        RepositoryCopier.copy(source, target);
+    }
+}

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/java/org/apache/geronimo/repository/jdbm/RepositoryCopierTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/java/org/apache/geronimo/repository/jdbm/RepositoryCopierTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-jdbm/src/test/java/org/apache/geronimo/repository/jdbm/RepositoryCopierTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/pom.xml?rev=424845&view=auto
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/pom.xml (added)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/pom.xml Sun Jul 23 15:41:23 2006
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2006 The Apache Software Foundation
+
+    Licensed 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.
+-->
+
+<!-- $Rev$ $Date$ -->
+
+<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.geronimo.modules</groupId>
+        <artifactId>geronimo-repository-providers</artifactId>
+        <version>1.2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <artifactId>geronimo-repository-maven1</artifactId>
+    <name>Geronimo Repository Providers :: Maven 1</name>
+    <packaging>jar</packaging>
+    
+</project>

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven1/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/pom.xml?rev=424845&view=auto
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/pom.xml (added)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/pom.xml Sun Jul 23 15:41:23 2006
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2006 The Apache Software Foundation
+
+    Licensed 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.
+-->
+
+<!-- $Rev$ $Date$ -->
+
+<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.geronimo.modules</groupId>
+        <artifactId>geronimo-repository-providers</artifactId>
+        <version>1.2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <artifactId>geronimo-repository-maven2</artifactId>
+    <name>Geronimo Repository Providers :: Maven 2</name>
+    <packaging>jar</packaging>
+    
+</project>

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/geronimo-repository-maven2/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/pom.xml?rev=424845&r1=424844&r2=424845&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/pom.xml (original)
+++ geronimo/sandbox/svkmerge/geronimo-repository/geronimo-repository-providers/pom.xml Sun Jul 23 15:41:23 2006
@@ -33,6 +33,8 @@
     <packaging>pom</packaging>
     
     <modules>
+        <module>geronimo-repository-maven1</module>
+        <module>geronimo-repository-maven2</module>
         <module>geronimo-repository-jdbm</module>
     </modules>