You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2014/08/27 17:38:33 UTC

[2/6] git commit: Multiple fixes:

Multiple fixes:

MINDEXER-84 updater bug
MINDEXER-85 POM reading
MINDEXER-86 legacy transport format removed
MINDEXER-41 unique by GAVCE from now on


Project: http://git-wip-us.apache.org/repos/asf/maven-indexer/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-indexer/commit/22fbfe07
Tree: http://git-wip-us.apache.org/repos/asf/maven-indexer/tree/22fbfe07
Diff: http://git-wip-us.apache.org/repos/asf/maven-indexer/diff/22fbfe07

Branch: refs/heads/master
Commit: 22fbfe07ae012e1c2c115dc9ebed1dc3dae14b8a
Parents: b071123
Author: Tamas Cservenak <ta...@cservenak.net>
Authored: Sun Jun 29 19:28:03 2014 +0200
Committer: Tamas Cservenak <ta...@cservenak.net>
Committed: Sun Jun 29 19:28:03 2014 +0200

----------------------------------------------------------------------
 .../apache/maven/index/cli/NexusIndexerCli.java |  26 +-
 indexer-core/pom.xml                            |   2 +-
 .../org/apache/maven/index/ArtifactContext.java |  92 +-----
 .../org/apache/maven/index/ArtifactInfo.java    |  38 +--
 .../MinimalArtifactInfoIndexCreator.java        |  21 +-
 .../incremental/DefaultIncrementalHandler.java  |  74 ++---
 .../index/incremental/IncrementalHandler.java   |   6 +-
 .../maven/index/locator/ArtifactLocator.java    |  11 +-
 .../maven/index/packer/DefaultIndexPacker.java  | 301 ++-----------------
 .../maven/index/packer/IndexPackingRequest.java |  32 +-
 .../index/updater/DefaultIndexUpdater.java      | 122 --------
 .../maven/index/updater/IndexDataReader.java    |  18 ++
 .../maven/index/updater/IndexDataWriter.java    |  13 +-
 .../index/AbstractRepoNexusIndexerTest.java     |   2 +-
 ...rrentUseWithMergedContextPublishingTest.java |  15 +-
 .../index/DefaultIndexNexusIndexerTest.java     |  33 +-
 .../maven/index/FullIndexNexusIndexerTest.java  |  34 ++-
 .../index/Index20081108RegressionTest.java      | 288 ------------------
 .../maven/index/Nexus1179NexusIndexerTest.java  |   6 +-
 .../maven/index/Nexus13NexusIndexerTest.java    |  29 +-
 .../Nexus1911IncrementalMergedCtxTest.java      |   1 +
 .../maven/index/Nexus1911IncrementalTest.java   | 121 ++++++--
 .../maven/index/Nexus687NexusIndexerTest.java   |   2 +-
 .../maven/index/Nexus737NexusIndexerTest.java   |   2 +-
 .../apache/maven/index/NexusIndexerTest.java    |  42 ++-
 .../maven/index/SearchWithAnEmptyIndexTest.java |  13 +-
 .../DefaultIncrementalHandlerTest.java          |  58 ++--
 .../packer/NEXUS4149TransferFormatTest.java     |  15 +-
 .../index/updater/AbstractIndexUpdaterTest.java |  14 +-
 .../maven/index/updater/IndexDataTest.java      |  19 +-
 .../nexus-maven-repository-index.20081108.zip   | Bin 22383 -> 0 bytes
 .../testQueryCreatorNGSearch/case05.txt         |   2 +-
 .../testQueryCreatorNGSearch/case06.txt         |   2 +-
 pom.xml                                         |  27 +-
 34 files changed, 462 insertions(+), 1019 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java
----------------------------------------------------------------------
diff --git a/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java b/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java
index 1f5e061..5f09659 100644
--- a/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java
+++ b/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java
@@ -33,6 +33,7 @@ import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
+import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.maven.index.ArtifactContext;
 import org.apache.maven.index.ArtifactInfo;
@@ -95,8 +96,6 @@ public class NexusIndexerCli
 
     public static final char INCREMENTAL_CHUNK_KEEP_COUNT = 'k';
 
-    public static final char LEGACY = 'l';
-
     public static final char UNPACK = 'u';
 
     private static final long MB = 1024 * 1024;
@@ -206,9 +205,6 @@ public class NexusIndexerCli
         options.addOption( OptionBuilder.withLongOpt( "type" ).hasArg() //
         .withDescription( "Indexer type (default, min, full or coma separated list of custom types)." ).create( TYPE ) );
 
-        options.addOption( OptionBuilder.withLongOpt( "legacy" ) //
-        .withDescription( "Build legacy .zip index file" ).create( LEGACY ) );
-
         options.addOption( OptionBuilder.withLongOpt( "unpack" ) //
         .withDescription( "Unpack an index file" ).create( UNPACK ) );
 
@@ -297,8 +293,6 @@ public class NexusIndexerCli
 
         boolean createIncrementalChunks = cli.hasOption( CREATE_INCREMENTAL_CHUNKS );
 
-        boolean createLegacyIndex = cli.hasOption( LEGACY );
-
         boolean debug = cli.hasOption( DEBUG );
 
         boolean quiet = cli.hasOption( QUIET );
@@ -332,11 +326,6 @@ public class NexusIndexerCli
             {
                 System.err.printf( "Will create baseline file.\n" );
             }
-
-            if ( createLegacyIndex )
-            {
-                System.err.printf( "Will also create legacy .zip index file.\n" );
-            }
         }
 
         NexusIndexer indexer = plexus.lookup( NexusIndexer.class );
@@ -352,6 +341,7 @@ public class NexusIndexerCli
             null, // index update url
             indexers );
 
+        final IndexSearcher indexSearcher = context.acquireIndexSearcher();
         try
         {
             IndexPacker packer = plexus.lookup( IndexPacker.class );
@@ -360,20 +350,13 @@ public class NexusIndexerCli
 
             indexer.scan( context, listener, true );
 
-            IndexPackingRequest request = new IndexPackingRequest( context, outputFolder );
+            IndexPackingRequest request = new IndexPackingRequest( context, indexSearcher.getIndexReader(), outputFolder );
 
             request.setCreateChecksumFiles( createChecksums );
 
             request.setCreateIncrementalChunks( createIncrementalChunks );
 
-            if ( createLegacyIndex )
-            {
-                request.setFormats( Arrays.asList( IndexFormat.FORMAT_LEGACY, IndexFormat.FORMAT_V1 ) );
-            }
-            else
-            {
-                request.setFormats( Arrays.asList( IndexFormat.FORMAT_V1 ) );
-            }
+            request.setFormats( Arrays.asList( IndexFormat.FORMAT_V1 ) );
 
             if ( chunkCount != null )
             {
@@ -389,6 +372,7 @@ public class NexusIndexerCli
         }
         finally
         {
+            context.releaseIndexSearcher( indexSearcher );
             indexer.removeIndexingContext( context, false );
         }
     }

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/pom.xml
----------------------------------------------------------------------
diff --git a/indexer-core/pom.xml b/indexer-core/pom.xml
index 6343faa..ca90740 100644
--- a/indexer-core/pom.xml
+++ b/indexer-core/pom.xml
@@ -45,7 +45,7 @@ under the License.
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
     </dependency>
-    
+
     <!-- DI -->
     <dependency>
       <groupId>javax.inject</groupId>

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java b/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java
index 33323ac..c911406 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java
@@ -21,11 +21,7 @@ package org.apache.maven.index;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -39,8 +35,7 @@ import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.util.zip.ZipFacade;
 import org.apache.maven.index.util.zip.ZipHandle;
 import org.apache.maven.model.Model;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 /**
@@ -93,10 +88,15 @@ public class ArtifactContext
         {
             try
             {
-                return new ModelReader().readModel( new FileInputStream( getPom() ) );
+                return new MavenXpp3Reader().read( new FileInputStream( getPom() ), false );
             }
-            catch ( FileNotFoundException e )
+            catch ( IOException e )
+            {
+                e.printStackTrace();
+            }
+            catch ( XmlPullParserException e )
             {
+                e.printStackTrace();
             }
         }
         // Otherwise, check for pom contained in maven generated artifact
@@ -113,11 +113,16 @@ public class ArtifactContext
 
                 if ( handle.hasEntry( embeddedPomPath ) )
                 {
-                    return new ModelReader().readModel( handle.getEntryContent( embeddedPomPath ) );
+                    return new MavenXpp3Reader().read( handle.getEntryContent( embeddedPomPath ), false );
                 }
             }
             catch ( IOException e )
             {
+                e.printStackTrace();
+            }
+            catch ( XmlPullParserException e )
+            {
+                e.printStackTrace();
             }
             finally
             {
@@ -197,73 +202,4 @@ public class ArtifactContext
 
         return doc;
     }
-
-    public static class ModelReader
-    {
-        public Model readModel( InputStream pom )
-        {
-            if ( pom == null )
-            {
-                return null;
-            }
-
-            Model model = new Model();
-
-            Xpp3Dom dom = readPomInputStream( pom );
-
-            if ( dom == null )
-            {
-                return null;
-            }
-
-            if ( dom.getChild( "packaging" ) != null )
-            {
-                model.setPackaging( dom.getChild( "packaging" ).getValue() );
-            }
-            // Special case, packaging should be null instead of default .jar if not set in pom
-            else
-            {
-                model.setPackaging( null );
-            }
-
-            if ( dom.getChild( "name" ) != null )
-            {
-                model.setName( dom.getChild( "name" ).getValue() );
-            }
-
-            if ( dom.getChild( "description" ) != null )
-            {
-                model.setDescription( dom.getChild( "description" ).getValue() );
-            }
-
-            return model;
-        }
-
-        private Xpp3Dom readPomInputStream( InputStream is )
-        {
-            Reader r = new InputStreamReader( is );
-            try
-            {
-                return Xpp3DomBuilder.build( r );
-            }
-            catch ( XmlPullParserException e )
-            {
-            }
-            catch ( IOException e )
-            {
-            }
-            finally
-            {
-                try
-                {
-                    r.close();
-                }
-                catch ( IOException e )
-                {
-                }
-            }
-
-            return null;
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfo.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfo.java b/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfo.java
index ba321af..d9011ec 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfo.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfo.java
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.google.common.base.Strings;
 import org.apache.maven.index.artifact.Gav;
 import org.apache.maven.index.creator.JarFileContentsIndexCreator;
 import org.apache.maven.index.creator.MavenPluginArtifactInfoIndexCreator;
@@ -282,8 +283,6 @@ public class ArtifactInfo
      */
     private String bundleRequireBundle;
 
-    private String uinfo = null;
-
     private final Map<String, String> attributes = new HashMap<String, String>();
 
     private final List<MatchHighlight> matchHighlights = new ArrayList<MatchHighlight>();
@@ -336,18 +335,14 @@ public class ArtifactInfo
 
     public String getUinfo()
     {
-        if ( uinfo == null )
-        {
-            uinfo = new StringBuilder() //
-            .append( groupId ).append( FS ) //
-            .append( artifactId ).append( FS ) //
-            .append( version ).append( FS ) //
-            .append( nvl( classifier ) ) //
-            .append( StringUtils.isEmpty( classifier ) || StringUtils.isEmpty( packaging ) ? "" : FS + packaging ) //
-            .toString(); // extension is stored in the packaging field when classifier is not used
-        }
-
-        return uinfo;
+        return new StringBuilder() //
+        .append( groupId ).append( FS ) //
+        .append( artifactId ).append( FS ) //
+        .append( version ).append( FS ) //
+        .append( nvl( classifier ) ).append( FS ) //
+        .append( fileExtension )
+        // .append( StringUtils.isEmpty( classifier ) || StringUtils.isEmpty( packaging ) ? "" : FS + packaging ) //
+        .toString(); // extension is stored in the packaging field when classifier is not used
     }
 
     public String getRootGroup()
@@ -384,10 +379,12 @@ public class ArtifactInfo
     @Override
     public String toString()
     {
-        return new StringBuilder( groupId ).append( ':' ).append( artifactId ) //
-        .append( ':' ).append( version ) //
-        .append( ':' ).append( classifier ) //
-        .append( ':' ).append( packaging ).toString();
+        final StringBuilder result = new StringBuilder( getUinfo() );
+        if ( !Strings.isNullOrEmpty( getPackaging() ) )
+        {
+            result.append( "[" ).append( getPackaging() ).append( "]" );
+        }
+        return result.toString();
     }
 
     private static final List<Field> DEFAULT_FIELDS = new ArrayList<Field>();
@@ -1005,11 +1002,6 @@ public class ArtifactInfo
         this.bundleRequireBundle = bundleRequireBundle;
     }
 
-    public void setUinfo( String uinfo )
-    {
-        this.uinfo = uinfo;
-    }
-
     public VersionScheme getVersionScheme( )
     {
         return versionScheme;

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java b/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java
index f8543d3..316e4c8 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java
@@ -120,7 +120,7 @@ public class MinimalArtifactInfoIndexCreator
 
         ArtifactInfo ai = ac.getArtifactInfo();
 
-        if ( pom != null )
+        if ( pom != null && pom.isFile() )
         {
             ai.setLastModified( pom.lastModified() );
 
@@ -128,7 +128,7 @@ public class MinimalArtifactInfoIndexCreator
         }
 
         // TODO handle artifacts without poms
-        if ( pom != null )
+        if ( pom != null && pom.isFile() )
         {
             if ( ai.getClassifier() != null )
             {
@@ -181,7 +181,7 @@ public class MinimalArtifactInfoIndexCreator
                 {
                     // default it, since POM is present, is read, but does not contain explicit packaging
                     // TODO: this change breaks junit tests, but not sure why is "null" expected value?
-                    // ai.packaging = "jar";
+                    ai.setPackaging( "jar" );
                 }
             }
         }
@@ -217,11 +217,6 @@ public class MinimalArtifactInfoIndexCreator
             ai.setSize( artifact.length() );
 
             ai.setFileExtension( getExtension( artifact, ac.getGav() ) );
-
-            if ( ai.getPackaging() == null )
-            {
-                ai.setPackaging( ai.getFileExtension() );
-            }
         }
     }
 
@@ -252,7 +247,7 @@ public class MinimalArtifactInfoIndexCreator
     public void updateDocument( ArtifactInfo ai, Document doc )
     {
         String info =
-            new StringBuilder().append( ai.getPackaging() ).append( ArtifactInfo.FS ).append(
+            new StringBuilder().append( ArtifactInfo.nvl( ai.getPackaging() )).append( ArtifactInfo.FS ).append(
                 Long.toString( ai.getLastModified() ) ).append( ArtifactInfo.FS ).append( Long.toString( ai.getSize() ) ).append(
                 ArtifactInfo.FS ).append( ai.getSourcesExists().toString() ).append( ArtifactInfo.FS ).append(
                 ai.getJavadocExists().toString() ).append( ArtifactInfo.FS ).append( ai.getSignatureExists().toString() ).append(
@@ -331,9 +326,11 @@ public class MinimalArtifactInfoIndexCreator
 
             ai.setVersion( r[2] );
 
-            if ( r.length > 3 )
+            ai.setClassifier( ArtifactInfo.renvl( r[3] ) );
+
+            if ( r.length > 4 ) 
             {
-                ai.setClassifier( ArtifactInfo.renvl( r[3] ) );
+              ai.setFileExtension( r[4] );
             }
 
             res = true;
@@ -345,7 +342,7 @@ public class MinimalArtifactInfoIndexCreator
         {
             String[] r = ArtifactInfo.FS_PATTERN.split( info );
 
-            ai.setPackaging( r[0] );
+            ai.setPackaging( ArtifactInfo.renvl( r[0] ));
 
             ai.setLastModified( Long.parseLong( r[1] ) );
 

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/incremental/DefaultIncrementalHandler.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/incremental/DefaultIncrementalHandler.java b/indexer-core/src/main/java/org/apache/maven/index/incremental/DefaultIncrementalHandler.java
index 4ddb1aa..75c50dc 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/incremental/DefaultIncrementalHandler.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/incremental/DefaultIncrementalHandler.java
@@ -19,6 +19,18 @@ package org.apache.maven.index.incremental;
  * under the License.
  */
 
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.MultiFields;
+import org.apache.lucene.util.Bits;
+import org.apache.maven.index.ArtifactInfo;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.packer.IndexPackingRequest;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.StringUtils;
+
 import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
@@ -35,20 +47,7 @@ import java.util.Set;
 import java.util.TimeZone;
 import java.util.TreeMap;
 
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.MultiFields;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.util.Bits;
-import org.apache.maven.index.ArtifactInfo;
-import org.apache.maven.index.context.IndexingContext;
-import org.apache.maven.index.packer.IndexPackingRequest;
-import org.apache.maven.index.updater.IndexUpdateRequest;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.StringUtils;
-
-@Component( role = IncrementalHandler.class )
+@Component(role = IncrementalHandler.class)
 public class DefaultIncrementalHandler
     extends AbstractLogEnabled
     implements IncrementalHandler
@@ -143,43 +142,34 @@ public class DefaultIncrementalHandler
         }
     }
 
-    // Note Toni:
     private List<Integer> getIndexChunk( IndexPackingRequest request, Date timestamp )
         throws IOException
     {
         final List<Integer> chunk = new ArrayList<Integer>();
-        final IndexSearcher indexSearcher = request.getContext().acquireIndexSearcher();
-        try
+        final IndexReader r = request.getIndexReader();
+        Bits liveDocs = MultiFields.getLiveDocs( r );
+        for ( int i = 0; i < r.maxDoc(); i++ )
         {
-            final IndexReader r = indexSearcher.getIndexReader();
-            Bits liveDocs = MultiFields.getLiveDocs(r);
-            for ( int i = 0; i < r.maxDoc(); i++ )
+            if ( liveDocs == null || liveDocs.get( i ) )
             {
-                if (liveDocs == null || liveDocs.get(i) )
-                {
-                    Document d = r.document( i );
+                Document d = r.document( i );
 
-                    String lastModified = d.get( ArtifactInfo.LAST_MODIFIED );
+                String lastModified = d.get( ArtifactInfo.LAST_MODIFIED );
 
-                    if ( lastModified != null )
-                    {
-                        Date t = new Date( Long.parseLong( lastModified ) );
+                if ( lastModified != null )
+                {
+                    Date t = new Date( Long.parseLong( lastModified ) );
 
-                        // Only add documents that were added after the last time we indexed
-                        if ( t.after( timestamp ) )
-                        {
-                            chunk.add( i );
-                        }
+                    // Only add documents that were added after the last time we indexed
+                    if ( t.after( timestamp ) )
+                    {
+                        chunk.add( i );
                     }
                 }
             }
-
-            return chunk;
-        }
-        finally
-        {
-            request.getContext().releaseIndexSearcher( indexSearcher );
         }
+
+        return chunk;
     }
 
     private void updateProperties( Properties properties, IndexPackingRequest request )
@@ -236,8 +226,8 @@ public class DefaultIncrementalHandler
             {
                 String[] parts = name.split( "\\." );
 
-                if ( parts.length == 3 && parts[0].equals( IndexingContext.INDEX_FILE_PREFIX )
-                    && parts[2].equals( "gz" ) )
+                if ( parts.length == 3 && parts[0].equals( IndexingContext.INDEX_FILE_PREFIX ) && parts[2].equals(
+                    "gz" ) )
                 {
                     return true;
                 }
@@ -321,8 +311,8 @@ public class DefaultIncrementalHandler
                 String value = remoteProps.getProperty( sKey );
 
                 // If we have the current counter, or the next counter, we are good to go
-                if ( Integer.toString( currentLocalCounter ).equals( value )
-                    || Integer.toString( currentLocalCounter + 1 ).equals( value ) )
+                if ( Integer.toString( currentLocalCounter ).equals( value ) || Integer.toString(
+                    currentLocalCounter + 1 ).equals( value ) )
                 {
                     return true;
                 }

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/incremental/IncrementalHandler.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/incremental/IncrementalHandler.java b/indexer-core/src/main/java/org/apache/maven/index/incremental/IncrementalHandler.java
index ef1efdf..45f63c7 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/incremental/IncrementalHandler.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/incremental/IncrementalHandler.java
@@ -19,13 +19,13 @@ package org.apache.maven.index.incremental;
  * under the License.
  */
 
+import org.apache.maven.index.packer.IndexPackingRequest;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+
 import java.io.IOException;
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.maven.index.packer.IndexPackingRequest;
-import org.apache.maven.index.updater.IndexUpdateRequest;
-
 public interface IncrementalHandler
 {
     List<Integer> getIncrementalUpdates( IndexPackingRequest request, Properties properties )

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/locator/ArtifactLocator.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/locator/ArtifactLocator.java b/indexer-core/src/main/java/org/apache/maven/index/locator/ArtifactLocator.java
index b0f6cef..d27d2a6 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/locator/ArtifactLocator.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/locator/ArtifactLocator.java
@@ -23,11 +23,12 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 
-import org.apache.maven.index.ArtifactContext.ModelReader;
 import org.apache.maven.index.artifact.ArtifactPackagingMapper;
 import org.apache.maven.index.artifact.Gav;
 import org.apache.maven.index.artifact.GavCalculator;
 import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 /**
  * Artifact locator.
@@ -56,7 +57,7 @@ public class ArtifactLocator
         try
         {
             // need to read the pom model to get packaging
-            Model model = new ModelReader().readModel( new FileInputStream( source ) );
+            final Model model = new MavenXpp3Reader().read( new FileInputStream( source ), false );
 
             if ( model == null )
             {
@@ -79,6 +80,12 @@ public class ArtifactLocator
         }
         catch ( IOException e )
         {
+            e.printStackTrace();
+            return null;
+        }
+        catch ( XmlPullParserException e )
+        {
+            e.printStackTrace();
             return null;
         }
     }

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/packer/DefaultIndexPacker.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/packer/DefaultIndexPacker.java b/indexer-core/src/main/java/org/apache/maven/index/packer/DefaultIndexPacker.java
index e028cb1..ba15396 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/packer/DefaultIndexPacker.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/packer/DefaultIndexPacker.java
@@ -19,46 +19,18 @@ package org.apache.maven.index.packer;
  * under the License.
  */
 
-import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
 import java.util.TimeZone;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.document.StoredField;
-import org.apache.lucene.document.StringField;
-import org.apache.lucene.document.TextField;
-import org.apache.lucene.index.CorruptIndexException;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.IndexableField;
-import org.apache.lucene.index.MultiFields;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.FSDirectory;
-import org.apache.lucene.store.IOContext;
-import org.apache.lucene.store.IndexInput;
-import org.apache.lucene.store.LockObtainFailedException;
-import org.apache.lucene.util.Bits;
-import org.apache.maven.index.ArtifactInfo;
-import org.apache.maven.index.context.DefaultIndexingContext;
-import org.apache.maven.index.context.IndexCreator;
-import org.apache.maven.index.context.IndexUtils;
+
 import org.apache.maven.index.context.IndexingContext;
-import org.apache.maven.index.context.NexusIndexWriter;
-import org.apache.maven.index.context.NexusLegacyAnalyzer;
-import org.apache.maven.index.creator.LegacyDocumentUpdater;
 import org.apache.maven.index.incremental.IncrementalHandler;
 import org.apache.maven.index.updater.IndexDataWriter;
 import org.codehaus.plexus.component.annotations.Component;
@@ -69,7 +41,7 @@ import org.codehaus.plexus.util.IOUtil;
 
 /**
  * A default {@link IndexPacker} implementation. Creates the properties, legacy index zip and new gz files.
- * 
+ *
  * @author Tamas Cservenak
  * @author Eugene Kuleshov
  */
@@ -94,13 +66,13 @@ public class DefaultIndexPacker
             if ( !request.getTargetDir().isDirectory() )
             {
                 throw new IllegalArgumentException( //
-                    String.format( "Specified target path %s is not a directory",
-                        request.getTargetDir().getAbsolutePath() ) );
+                                                    String.format( "Specified target path %s is not a directory",
+                                                                   request.getTargetDir().getAbsolutePath() ) );
             }
             if ( !request.getTargetDir().canWrite() )
             {
                 throw new IllegalArgumentException( String.format( "Specified target path %s is not writtable",
-                    request.getTargetDir().getAbsolutePath() ) );
+                                                                   request.getTargetDir().getAbsolutePath() ) );
             }
         }
         else
@@ -138,13 +110,11 @@ public class DefaultIndexPacker
                 }
                 else
                 {
-                    File file =
-                        new File( request.getTargetDir(), //
-                            IndexingContext.INDEX_FILE_PREFIX + "."
-                                + info.getProperty( IndexingContext.INDEX_CHUNK_COUNTER ) + ".gz" );
+                    File file = new File( request.getTargetDir(), //
+                                          IndexingContext.INDEX_FILE_PREFIX + "." + info.getProperty(
+                                              IndexingContext.INDEX_CHUNK_COUNTER ) + ".gz" );
 
-                    writeIndexData( request.getContext(), //
-                        chunk, file );
+                    writeIndexData( request, chunk, file );
 
                     if ( request.isCreateChecksumFiles() )
                     {
@@ -173,37 +143,19 @@ public class DefaultIndexPacker
             timestamp = new Date( 0 ); // never updated
         }
 
-        if ( request.getFormats().contains( IndexPackingRequest.IndexFormat.FORMAT_LEGACY ) )
-        {
-            info.setProperty( IndexingContext.INDEX_LEGACY_TIMESTAMP, format( timestamp ) );
-
-            writeIndexArchive( request.getContext(), legacyFile, request.getMaxIndexChunks() );
-
-            if ( request.isCreateChecksumFiles() )
-            {
-                FileUtils.fileWrite(
-                    new File( legacyFile.getParentFile(), legacyFile.getName() + ".sha1" ).getAbsolutePath(),
-                    DigesterUtils.getSha1Digest( legacyFile ) );
-
-                FileUtils.fileWrite(
-                    new File( legacyFile.getParentFile(), legacyFile.getName() + ".md5" ).getAbsolutePath(),
-                    DigesterUtils.getMd5Digest( legacyFile ) );
-            }
-        }
-
         if ( request.getFormats().contains( IndexPackingRequest.IndexFormat.FORMAT_V1 ) )
         {
             info.setProperty( IndexingContext.INDEX_TIMESTAMP, format( timestamp ) );
 
-            writeIndexData( request.getContext(), null, v1File );
+            writeIndexData( request, null, v1File );
 
             if ( request.isCreateChecksumFiles() )
             {
                 FileUtils.fileWrite( new File( v1File.getParentFile(), v1File.getName() + ".sha1" ).getAbsolutePath(),
-                    DigesterUtils.getSha1Digest( v1File ) );
+                                     DigesterUtils.getSha1Digest( v1File ) );
 
                 FileUtils.fileWrite( new File( v1File.getParentFile(), v1File.getName() + ".md5" ).getAbsolutePath(),
-                    DigesterUtils.getMd5Digest( v1File ) );
+                                     DigesterUtils.getMd5Digest( v1File ) );
             }
         }
 
@@ -245,226 +197,7 @@ public class DefaultIndexPacker
         return properties;
     }
 
-    void writeIndexArchive( IndexingContext context, File targetArchive )
-        throws IOException
-    {
-        writeIndexArchive(context, targetArchive, IndexPackingRequest.MAX_CHUNKS);
-    }
-    
-    void writeIndexArchive( IndexingContext context, File targetArchive, int maxSegments )
-        throws IOException
-    {
-        if ( targetArchive.exists() )
-        {
-            targetArchive.delete();
-        }
-
-        OutputStream os = null;
-
-        try
-        {
-            os = new BufferedOutputStream( new FileOutputStream( targetArchive ), 4096 );
-
-            packIndexArchive( context, os );
-        }
-        finally
-        {
-            IOUtil.close( os );
-        }
-    }
-
-    /**
-     * Pack legacy index archive into a specified output stream
-     */
-    public static void packIndexArchive( IndexingContext context, OutputStream os )
-        throws IOException
-    {
-        packIndexArchive(context, os, IndexPackingRequest.MAX_CHUNKS);
-    }
-    
-    /**
-     * Pack legacy index archive into a specified output stream
-     */
-    public static void packIndexArchive( IndexingContext context, OutputStream os, int maxSegments )
-        throws IOException
-    {
-        File indexArchive = File.createTempFile( "nexus-index", "" );
-
-        File indexDir = new File( indexArchive.getAbsoluteFile().getParentFile(), indexArchive.getName() + ".dir" );
-
-        indexDir.mkdirs();
-
-        FSDirectory fdir = FSDirectory.open( indexDir );
-
-        try
-        {
-            // force the timestamp update
-            IndexUtils.updateTimestamp( context.getIndexDirectory(), context.getTimestamp() );
-            IndexUtils.updateTimestamp( fdir, context.getTimestamp() );
-
-            final IndexSearcher indexSearcher = context.acquireIndexSearcher();
-            try
-            {
-                copyLegacyDocuments( indexSearcher.getIndexReader(), fdir, context, maxSegments);
-            }
-            finally
-            {
-                context.releaseIndexSearcher( indexSearcher );
-            }
-            packDirectory( fdir, os );
-        }
-        finally
-        {
-            IndexUtils.close( fdir );
-            indexArchive.delete();
-            IndexUtils.delete( indexDir );
-        }
-    }
-
-    static void copyLegacyDocuments( IndexReader r, Directory targetdir, IndexingContext context )
-        throws CorruptIndexException, LockObtainFailedException, IOException
-    {
-        copyLegacyDocuments(r, targetdir, context, IndexPackingRequest.MAX_CHUNKS);
-    }
-    
-    static void copyLegacyDocuments( IndexReader r, Directory targetdir, IndexingContext context, int maxSegments)
-        throws CorruptIndexException, LockObtainFailedException, IOException
-    {
-        IndexWriter w = null;
-        Bits liveDocs = MultiFields.getLiveDocs(r);
-        try
-        {
-            w = new NexusIndexWriter( targetdir, new NexusLegacyAnalyzer(), true );
-
-            for ( int i = 0; i < r.maxDoc(); i++ )
-            {
-                if ( liveDocs == null || liveDocs.get(i) )
-                {
-                    Document legacyDocument = r.document( i );
-                    Document updatedLegacyDocument = updateLegacyDocument( legacyDocument, context );
-                    
-                    //Lucene does not return metadata for stored documents, so we need to fix that
-                    for (IndexableField indexableField : updatedLegacyDocument.getFields())
-                    {
-                        if(indexableField.name().equals(DefaultIndexingContext.FLD_DESCRIPTOR))
-                        {
-                            updatedLegacyDocument = new Document();
-                            updatedLegacyDocument.add(new StringField(DefaultIndexingContext.FLD_DESCRIPTOR, DefaultIndexingContext.FLD_DESCRIPTOR_CONTENTS, Field.Store.YES));
-                            updatedLegacyDocument.add( new StringField( DefaultIndexingContext.FLD_IDXINFO, DefaultIndexingContext.VERSION + ArtifactInfo.FS + context.getRepositoryId(), Field.Store.YES) );
-                            break;
-                        }
-                    }
-                    
-                    w.addDocument( updatedLegacyDocument );
-                }
-            }
-
-            w.forceMerge(maxSegments);
-            w.commit();
-        }
-        finally
-        {
-            IndexUtils.close( w );
-        }
-    }
-
-    static Document updateLegacyDocument( Document doc, IndexingContext context )
-    {
-        ArtifactInfo ai = IndexUtils.constructArtifactInfo( doc, context );
-        if ( ai == null )
-        {
-            return doc;
-        }
-
-        Document document = new Document();
-        document.add( new Field( ArtifactInfo.UINFO, ai.getUinfo(), Field.Store.YES, Field.Index.NOT_ANALYZED ) );
-
-        for ( IndexCreator ic : context.getIndexCreators() )
-        {
-            if ( ic instanceof LegacyDocumentUpdater )
-            {
-                ( (LegacyDocumentUpdater) ic ).updateLegacyDocument( ai, document );
-            }
-        }
-
-        return document;
-    }
-
-    static void packDirectory( Directory directory, OutputStream os )
-        throws IOException
-    {
-        ZipOutputStream zos = null;
-        try
-        {
-            zos = new ZipOutputStream( os );
-            zos.setLevel( 9 );
-
-            String[] names = directory.listAll();
-
-            boolean savedTimestamp = false;
-
-            byte[] buf = new byte[8192];
-
-            for ( int i = 0; i < names.length; i++ )
-            {
-                String name = names[i];
-
-                writeFile( name, zos, directory, buf );
-
-                if ( name.equals( IndexUtils.TIMESTAMP_FILE ) )
-                {
-                    savedTimestamp = true;
-                }
-            }
-
-            // FSDirectory filter out the foreign files
-            if ( !savedTimestamp && directory.fileExists( IndexUtils.TIMESTAMP_FILE ) )
-            {
-                writeFile( IndexUtils.TIMESTAMP_FILE, zos, directory, buf );
-            }
-        }
-        finally
-        {
-            IndexUtils.close( zos );
-        }
-    }
-
-    static void writeFile( String name, ZipOutputStream zos, Directory directory, byte[] buf )
-        throws IOException
-    {
-        ZipEntry e = new ZipEntry( name );
-
-        zos.putNextEntry( e );
-
-        IndexInput in = directory.openInput( name, IOContext.DEFAULT );
-
-        try
-        {
-            int toRead = 0;
-
-            int bytesLeft = (int) in.length();
-
-            while ( bytesLeft > 0 )
-            {
-                toRead = ( bytesLeft >= buf.length ) ? buf.length : bytesLeft;
-                bytesLeft -= toRead;
-
-                in.readBytes( buf, 0, toRead, false );
-
-                zos.write( buf, 0, toRead );
-            }
-        }
-        finally
-        {
-            IndexUtils.close( in );
-        }
-
-        zos.flush();
-
-        zos.closeEntry();
-    }
-
-    void writeIndexData( IndexingContext context, List<Integer> docIndexes, File targetArchive )
+    void writeIndexData( IndexPackingRequest request, List<Integer> docIndexes, File targetArchive )
         throws IOException
     {
         if ( targetArchive.exists() )
@@ -479,7 +212,7 @@ public class DefaultIndexPacker
             os = new FileOutputStream( targetArchive );
 
             IndexDataWriter dw = new IndexDataWriter( os );
-            dw.write( context, docIndexes );
+            dw.write( request.getContext(), request.getIndexReader(), docIndexes );
 
             os.flush();
         }
@@ -524,9 +257,9 @@ public class DefaultIndexPacker
 
         if ( request.isCreateChecksumFiles() )
         {
-            FileUtils.fileWrite(
-                new File( targetPropertyFile.getParentFile(), targetPropertyFile.getName() + ".sha1" ).getAbsolutePath(),
-                DigesterUtils.getSha1Digest( targetPropertyFile ) );
+            FileUtils.fileWrite( new File( targetPropertyFile.getParentFile(),
+                                           targetPropertyFile.getName() + ".sha1" ).getAbsolutePath(),
+                                 DigesterUtils.getSha1Digest( targetPropertyFile ) );
 
             FileUtils.fileWrite(
                 new File( targetPropertyFile.getParentFile(), targetPropertyFile.getName() + ".md5" ).getAbsolutePath(),

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/packer/IndexPackingRequest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/packer/IndexPackingRequest.java b/indexer-core/src/main/java/org/apache/maven/index/packer/IndexPackingRequest.java
index 7debc23..0b74ea3 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/packer/IndexPackingRequest.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/packer/IndexPackingRequest.java
@@ -23,8 +23,12 @@ import java.io.File;
 import java.util.Arrays;
 import java.util.Collection;
 
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.search.IndexSearcher;
 import org.apache.maven.index.context.IndexingContext;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * An index packing request.
  */
@@ -32,9 +36,11 @@ public class IndexPackingRequest
 {
     public static final int MAX_CHUNKS = 30;
 
-    private IndexingContext context;
+    private final IndexingContext context;
+
+    private final IndexReader indexReader;
 
-    private File targetDir;
+    private final File targetDir;
 
     private boolean createIncrementalChunks;
 
@@ -46,11 +52,13 @@ public class IndexPackingRequest
 
     private Collection<IndexFormat> formats;
 
-    public IndexPackingRequest( IndexingContext context, File targetDir )
+    public IndexPackingRequest( final IndexingContext context, final IndexReader indexReader, final File targetDir )
     {
-        this.context = context;
+        this.context = checkNotNull(context);
 
-        this.targetDir = targetDir;
+        this.indexReader = checkNotNull( indexReader );
+
+        this.targetDir = checkNotNull( targetDir );
 
         this.createIncrementalChunks = true;
 
@@ -60,7 +68,7 @@ public class IndexPackingRequest
 
         this.useTargetProperties = false;
 
-        this.formats = Arrays.asList( IndexFormat.FORMAT_LEGACY, IndexFormat.FORMAT_V1 );
+        this.formats = Arrays.asList( IndexFormat.FORMAT_V1 );
     }
 
     public IndexingContext getContext()
@@ -68,10 +76,7 @@ public class IndexPackingRequest
         return context;
     }
 
-    public void setContext( IndexingContext context )
-    {
-        this.context = context;
-    }
+    public IndexReader getIndexReader() { return indexReader; }
 
     /**
      * Sets index formats to be created
@@ -94,11 +99,6 @@ public class IndexPackingRequest
         return targetDir;
     }
 
-    public void setTargetDir( File targetDir )
-    {
-        this.targetDir = targetDir;
-    }
-
     public boolean isCreateIncrementalChunks()
     {
         return createIncrementalChunks;
@@ -144,6 +144,6 @@ public class IndexPackingRequest
      */
     public static enum IndexFormat
     {
-        FORMAT_LEGACY, FORMAT_V1;
+        FORMAT_V1;
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java b/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java
index d8fd255..c5226f7 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java
@@ -262,128 +262,6 @@ public class DefaultIndexUpdater
         }
     }
 
-    /**
-     * Unpack legacy index archive into a specified Lucene <code>Directory</code>
-     * 
-     * @param is a <code>ZipInputStream</code> with index data
-     * @param directory Lucene <code>Directory</code> to unpack index data to
-     * @return {@link Date} of the index update or null if it can't be read
-     */
-    public static Date unpackIndexArchive( final InputStream is, final Directory directory,
-                                           final IndexingContext context )
-        throws IOException
-    {
-        File indexArchive = File.createTempFile( "nexus-index", "" );
-
-        File indexDir = new File( indexArchive.getAbsoluteFile().getParentFile(), indexArchive.getName() + ".dir" );
-
-        indexDir.mkdirs();
-
-        FSDirectory fdir = FSDirectory.open( indexDir );
-
-        try
-        {
-            unpackDirectory( fdir, is );
-            copyUpdatedDocuments( fdir, directory, context );
-
-            Date timestamp = IndexUtils.getTimestamp( fdir );
-            IndexUtils.updateTimestamp( directory, timestamp );
-            return timestamp;
-        }
-        finally
-        {
-            IndexUtils.close( fdir );
-            indexArchive.delete();
-            IndexUtils.delete( indexDir );
-        }
-    }
-
-    private static void unpackDirectory( final Directory directory, final InputStream is )
-        throws IOException
-    {
-        byte[] buf = new byte[4096];
-
-        ZipEntry entry;
-
-        ZipInputStream zis = null;
-
-        try
-        {
-            zis = new ZipInputStream( is );
-
-            while ( ( entry = zis.getNextEntry() ) != null )
-            {
-                if ( entry.isDirectory() || entry.getName().indexOf( '/' ) > -1 )
-                {
-                    continue;
-                }
-
-                IndexOutput io = directory.createOutput( entry.getName(), IOContext.DEFAULT );
-                try
-                {
-                    int n = 0;
-
-                    while ( ( n = zis.read( buf ) ) != -1 )
-                    {
-                        io.writeBytes( buf, n );
-                    }
-                }
-                finally
-                {
-                    IndexUtils.close( io );
-                }
-            }
-        }
-        finally
-        {
-            IndexUtils.close( zis );
-        }
-    }
-
-    private static void copyUpdatedDocuments( final Directory sourcedir, final Directory targetdir,
-                                              final IndexingContext context )
-        throws CorruptIndexException, LockObtainFailedException, IOException
-    {
-        IndexWriter w = null;
-        IndexReader r = null;
-        try
-        {
-            r = IndexReader.open( sourcedir );
-            w = new NexusIndexWriter( targetdir, new NexusAnalyzer(), true );
-            Bits liveDocs = MultiFields.getLiveDocs(r);
-
-            for ( int i = 0; i < r.maxDoc(); i++ )
-            {
-                if (liveDocs == null || liveDocs.get(i) )
-                {
-                    Document sourceDocument = r.document( i );
-                    Document targetDocument = IndexUtils.updateDocument( sourceDocument, context );
-                    
-                    //Lucene does not return metadata for stored documents, so we need to fix that
-                    for (IndexableField indexableField : targetDocument.getFields())
-                    {
-                        if(indexableField.name().equals(DefaultIndexingContext.FLD_DESCRIPTOR))
-                        {
-                            targetDocument = new Document();
-                            targetDocument.add(new StringField(DefaultIndexingContext.FLD_DESCRIPTOR, DefaultIndexingContext.FLD_DESCRIPTOR_CONTENTS, Field.Store.YES));
-                            targetDocument.add( new StringField( DefaultIndexingContext.FLD_IDXINFO, DefaultIndexingContext.VERSION + ArtifactInfo.FS + context.getRepositoryId(), Field.Store.YES) );
-                            break;
-                        }
-                    }
-                    w.addDocument( targetDocument );
-                }
-            }
-
-            w.forceMerge(1);
-            w.commit();
-        }
-        finally
-        {
-            IndexUtils.close( w );
-            IndexUtils.close( r );
-        }
-    }
-
     private static void filterDirectory( final Directory directory, final DocumentFilter filter )
         throws IOException
     {

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
index d701347..f76200c 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
@@ -28,11 +28,14 @@ import java.io.InputStream;
 import java.io.UTFDataFormatException;
 import java.util.Date;
 import java.util.zip.GZIPInputStream;
+
+import com.google.common.base.Strings;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Field.Index;
 import org.apache.lucene.document.Field.Store;
 import org.apache.lucene.index.IndexWriter;
+import org.apache.maven.index.ArtifactInfo;
 import org.apache.maven.index.context.IndexUtils;
 import org.apache.maven.index.context.IndexingContext;
 
@@ -138,6 +141,21 @@ public class IndexDataReader
             doc.add( readField() );
         }
 
+        // Fix up UINFO field wrt MINDEXER-41
+        final Field uinfoField = (Field) doc.getField( ArtifactInfo.UINFO );
+        final String info =  doc.get( ArtifactInfo.INFO );
+        if (uinfoField!= null && !Strings.isNullOrEmpty(info)) {
+            final String[] splitInfo = ArtifactInfo.FS_PATTERN.split( info );
+            if ( splitInfo.length > 6 )
+            {
+                final String extension = splitInfo[6];
+                final String uinfoString = uinfoField.stringValue();
+                if (uinfoString.endsWith( ArtifactInfo.FS + ArtifactInfo.NA )) {
+                    uinfoField.setStringValue( uinfoString + ArtifactInfo.FS + ArtifactInfo.nvl( extension ) );
+                }
+            }
+        }
+
         return doc;
     }
 

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
index 4c9e2bb..13ad7ce 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
@@ -84,21 +84,12 @@ public class IndexDataWriter
         this.descriptorWritten = false;
     }
 
-    public int write( IndexingContext context, List<Integer> docIndexes )
+    public int write( IndexingContext context, IndexReader indexReader, List<Integer> docIndexes )
         throws IOException
     {
         writeHeader( context );
 
-        int n = 0;
-        final IndexSearcher indexSearcher = context.acquireIndexSearcher();
-        try
-        {
-            n = writeDocuments( indexSearcher.getIndexReader(), docIndexes );
-        }
-        finally
-        {
-            context.releaseIndexSearcher( indexSearcher );
-        }
+        int n = writeDocuments( indexReader, docIndexes );
 
         writeGroupFields();
 

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/test/java/org/apache/maven/index/AbstractRepoNexusIndexerTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/AbstractRepoNexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/AbstractRepoNexusIndexerTest.java
index 6b1327d..7e2751e 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/AbstractRepoNexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/AbstractRepoNexusIndexerTest.java
@@ -535,7 +535,7 @@ public abstract class AbstractRepoNexusIndexerTest
                 if ( uinfo != null )
                 {
                     String info = document.get( ArtifactInfo.INFO );
-                    assertFalse( info.startsWith( "null" ) );
+                    assertFalse( "Bad:" + info,  info.startsWith( "null" ) );
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/test/java/org/apache/maven/index/ConcurrentUseWithMergedContextPublishingTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/ConcurrentUseWithMergedContextPublishingTest.java b/indexer-core/src/test/java/org/apache/maven/index/ConcurrentUseWithMergedContextPublishingTest.java
index 4483f0f..e4c9908 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/ConcurrentUseWithMergedContextPublishingTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/ConcurrentUseWithMergedContextPublishingTest.java
@@ -19,6 +19,7 @@ package org.apache.maven.index;
  * under the License.
  */
 
+import org.apache.lucene.search.IndexSearcher;
 import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.packer.IndexPacker;
 import org.apache.maven.index.packer.IndexPackingRequest;
@@ -73,11 +74,15 @@ public class ConcurrentUseWithMergedContextPublishingTest
         // it was probably publish rubbish anyway.
         final File publish = new File( repoPublish, "publish-" + counter.getAndIncrement() );
 
-        final IndexPackingRequest request = new IndexPackingRequest( context, publish );
-
-        request.setCreateIncrementalChunks( false );
-
-        packer.packIndex( request );
+        final IndexSearcher indexSearcher = context.acquireIndexSearcher();
+        try
+        {
+            final IndexPackingRequest request = new IndexPackingRequest( context, indexSearcher.getIndexReader(), publish );
+            request.setCreateIncrementalChunks( false );
+            packer.packIndex( request );
+        } finally {
+            context.releaseIndexSearcher( indexSearcher );
+        }
 
         return 1;
     }

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
index 83bf1e4..7d589a6 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
@@ -31,6 +31,7 @@ import java.util.Set;
 
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.FilteredQuery;
+import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.PrefixQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryWrapperFilter;
@@ -43,7 +44,11 @@ import org.apache.maven.index.FlatSearchResponse;
 import org.apache.maven.index.NexusIndexer;
 import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.packer.DefaultIndexPacker;
+import org.apache.maven.index.packer.IndexPacker;
+import org.apache.maven.index.packer.IndexPackingRequest;
 import org.apache.maven.index.updater.DefaultIndexUpdater;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.apache.maven.index.updater.IndexUpdater;
 
 public class DefaultIndexNexusIndexerTest
     extends MinimalIndexNexusIndexerTest
@@ -162,9 +167,22 @@ public class DefaultIndexNexusIndexerTest
     public void testIndexTimestamp()
         throws Exception
     {
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        final File targetDir = File.createTempFile( "testIndexTimestamp", "ut-tmp" );
+        targetDir.delete();
+        targetDir.mkdirs();
 
-        DefaultIndexPacker.packIndexArchive( context, os );
+        final IndexPacker indexPacker = lookup( IndexPacker.class );
+        final IndexSearcher indexSearcher = context.acquireIndexSearcher();
+        try
+        {
+            final IndexPackingRequest request =
+                new IndexPackingRequest( context, indexSearcher.getIndexReader(), targetDir );
+            indexPacker.packIndex( request );
+        }
+        finally
+        {
+            context.releaseIndexSearcher( indexSearcher );
+        }
 
         Thread.sleep( 1000L );
 
@@ -172,11 +190,12 @@ public class DefaultIndexNexusIndexerTest
 
         Directory newIndexDir = FSDirectory.open( newIndex );
 
-        DefaultIndexUpdater.unpackIndexArchive( new ByteArrayInputStream( os.toByteArray() ), newIndexDir, context );
-
         IndexingContext newContext =
             nexusIndexer.addIndexingContext( "test-new", "test", null, newIndexDir, null, null, DEFAULT_CREATORS );
 
+        final IndexUpdater indexUpdater = lookup( IndexUpdater.class );
+        indexUpdater.fetchAndUpdateIndex( new IndexUpdateRequest( newContext, new DefaultIndexUpdater.FileFetcher( targetDir ) ) );
+
         assertEquals( context.getTimestamp().getTime(), newContext.getTimestamp().getTime() );
 
         assertEquals( context.getTimestamp(), newContext.getTimestamp() );
@@ -189,6 +208,8 @@ public class DefaultIndexNexusIndexerTest
         FlatSearchResponse response = nexusIndexer.searchFlat( request );
         Collection<ArtifactInfo> r = response.getResults();
 
+        System.out.println(r);
+
         assertEquals( 2, r.size() );
 
         List<ArtifactInfo> list = new ArrayList<ArtifactInfo>( r );
@@ -211,11 +232,11 @@ public class DefaultIndexNexusIndexerTest
 
         newIndexDir = FSDirectory.open( newIndex );
 
-        DefaultIndexUpdater.unpackIndexArchive( new ByteArrayInputStream( os.toByteArray() ), newIndexDir, context );
-
         newContext =
             nexusIndexer.addIndexingContext( "test-new", "test", null, newIndexDir, null, null, DEFAULT_CREATORS );
 
+        indexUpdater.fetchAndUpdateIndex( new IndexUpdateRequest( newContext, new DefaultIndexUpdater.FileFetcher( targetDir ) ) );
+
         assertEquals( timestamp, newContext.getTimestamp() );
 
         newContext.close( true );

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
index bce9143..dc07273 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
@@ -29,9 +29,11 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queryparser.classic.ParseException;
 import org.apache.lucene.search.FilteredQuery;
+import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.PrefixQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryWrapperFilter;
@@ -40,9 +42,14 @@ import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.packer.DefaultIndexPacker;
+import org.apache.maven.index.packer.IndexPacker;
+import org.apache.maven.index.packer.IndexPackingRequest;
 import org.apache.maven.index.search.grouping.GAGrouping;
 import org.apache.maven.index.search.grouping.GGrouping;
 import org.apache.maven.index.updater.DefaultIndexUpdater;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.apache.maven.index.updater.IndexUpdater;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
@@ -328,9 +335,22 @@ public class FullIndexNexusIndexerTest
     public void testIndexTimestamp()
         throws Exception
     {
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        final File targetDir = File.createTempFile( "testIndexTimestamp", "ut-tmp" );
+        targetDir.delete();
+        targetDir.mkdirs();
 
-        DefaultIndexPacker.packIndexArchive( context, os );
+        final IndexPacker indexPacker = lookup( IndexPacker.class );
+        final IndexSearcher indexSearcher = context.acquireIndexSearcher();
+        try
+        {
+            final IndexPackingRequest request =
+                new IndexPackingRequest( context, indexSearcher.getIndexReader(), targetDir );
+            indexPacker.packIndex( request );
+        }
+        finally
+        {
+            context.releaseIndexSearcher( indexSearcher );
+        }
 
         Thread.sleep( 1000L );
 
@@ -338,11 +358,13 @@ public class FullIndexNexusIndexerTest
 
         Directory newIndexDir = FSDirectory.open( newIndex );
 
-        DefaultIndexUpdater.unpackIndexArchive( new ByteArrayInputStream( os.toByteArray() ), newIndexDir, context );
-
         IndexingContext newContext =
             nexusIndexer.addIndexingContext( "test-new", "test", null, newIndexDir, null, null, DEFAULT_CREATORS );
 
+        final IndexUpdater indexUpdater = lookup( IndexUpdater.class );
+        indexUpdater.fetchAndUpdateIndex( new IndexUpdateRequest( newContext, new DefaultIndexUpdater.FileFetcher( targetDir ) ) );
+
+
         assertEquals( context.getTimestamp().getTime(), newContext.getTimestamp().getTime() );
 
         assertEquals( context.getTimestamp(), newContext.getTimestamp() );
@@ -377,11 +399,11 @@ public class FullIndexNexusIndexerTest
 
         newIndexDir = FSDirectory.open( newIndex );
 
-        DefaultIndexUpdater.unpackIndexArchive( new ByteArrayInputStream( os.toByteArray() ), newIndexDir, context );
-
         newContext =
             nexusIndexer.addIndexingContext( "test-new", "test", null, newIndexDir, null, null, DEFAULT_CREATORS );
 
+        indexUpdater.fetchAndUpdateIndex( new IndexUpdateRequest( newContext, new DefaultIndexUpdater.FileFetcher( targetDir ) ) );
+
         assertEquals( timestamp, newContext.getTimestamp() );
 
         newContext.close( true );

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/test/java/org/apache/maven/index/Index20081108RegressionTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/Index20081108RegressionTest.java b/indexer-core/src/test/java/org/apache/maven/index/Index20081108RegressionTest.java
deleted file mode 100644
index 027ecb2..0000000
--- a/indexer-core/src/test/java/org/apache/maven/index/Index20081108RegressionTest.java
+++ /dev/null
@@ -1,288 +0,0 @@
-package org.apache.maven.index;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0    
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.lucene.index.Term;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.RAMDirectory;
-import org.apache.maven.index.search.grouping.GAGrouping;
-import org.apache.maven.index.updater.DefaultIndexUpdater;
-import org.junit.Ignore;
-
-/**
- * @author Eugene Kuleshov
- */
-@Ignore("Index format too old for Lucene 4")
-public class Index20081108RegressionTest
-    extends AbstractRepoNexusIndexerTest
-{
-    @Override
-    protected void prepareNexusIndexer( NexusIndexer nexusIndexer )
-        throws Exception
-    {
-        context = nexusIndexer.addIndexingContextForced( "test", "test", null, indexDir, null, null, DEFAULT_CREATORS );
-
-        InputStream is = new FileInputStream( getBasedir() + //
-            File.separator + "src" + //
-            File.separator + "test" + //
-            File.separator + "nexus-maven-repository-index.20081108.zip" );
-
-        Directory tempDir = new RAMDirectory();
-        DefaultIndexUpdater.unpackIndexArchive( is, tempDir, context );
-        context.replace( tempDir );
-    }
-
-    public void testExtension()
-        throws Exception
-    {
-        assertEquals( 31, context.getSize() );
-
-        {
-            Query q = nexusIndexer.constructQuery( MAVEN.GROUP_ID, "qdox", SearchType.SCORED );
-            FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( q ) );
-            assertEquals( response.getResults().toString(), 2, response.getTotalHits() );
-
-            List<ArtifactInfo> list = new ArrayList<ArtifactInfo>( response.getResults() );
-            assertEquals( 2, list.size() );
-
-            {
-                ArtifactInfo ai = list.get( 0 );
-                assertEquals( "1.6.1", ai.getVersion() );
-                assertEquals( "jar", ai.getFileExtension() );
-                assertEquals( "jar", ai.getPackaging() );
-            }
-            {
-                ArtifactInfo ai = list.get( 1 );
-                assertEquals( "1.5", ai.getVersion() );
-                assertEquals( "jar", ai.getFileExtension() );
-                assertEquals( "jar", ai.getPackaging() );
-            }
-        }
-        {
-            Query query = new TermQuery( new Term( ArtifactInfo.PACKAGING, "tar.gz" ) );
-            FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( query ) );
-            assertEquals( response.getResults().toString(), 1, response.getTotalHits() );
-
-            ArtifactInfo ai = response.getResults().iterator().next();
-            assertEquals( "tar.gz", ai.getPackaging() );
-            assertEquals( "tar.gz", ai.getFileExtension() );
-        }
-        {
-            Query query = new TermQuery( new Term( ArtifactInfo.PACKAGING, "zip" ) );
-            FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( query ) );
-            assertEquals( response.getResults().toString(), 1, response.getTotalHits() );
-
-            ArtifactInfo ai = response.getResults().iterator().next();
-            assertEquals( "zip", ai.getPackaging() );
-            assertEquals( "zip", ai.getFileExtension() );
-        }
-    }
-
-    @Override
-    public void testRootGroups()
-        throws Exception
-    {
-        Set<String> rootGroups = context.getRootGroups();
-        assertEquals( rootGroups.toString(), 8, rootGroups.size() );
-
-        assertGroup( 2, "qdox", context );
-
-        assertGroup( 1, "proptest", context );
-
-        assertGroup( 1, "junit", context );
-
-        assertGroup( 6, "commons-logging", context );
-
-        assertGroup( 1, "regexp", context );
-
-        assertGroup( 1, "commons-cli", context );
-
-        assertGroup( 15, "org", context );
-
-        assertGroup( 6, "org.slf4j", context );
-
-        assertGroup( 3, "org.testng", context );
-
-        assertGroup( 3, "org.apache", context );
-
-        assertGroup( 1, "org.apache.directory", context );
-        assertGroup( 1, "org.apache.directory.server", context );
-
-        assertGroup( 1, "org.apache.maven", context );
-        assertGroup( 1, "org.apache.maven.plugins", context );
-        assertGroup( 0, "org.apache.maven.plugins.maven-core-it-plugin", context );
-    }
-
-    @Override
-    public void testSearchFlatPaged()
-        throws Exception
-    {
-        FlatSearchRequest request = new FlatSearchRequest( nexusIndexer.constructQuery( MAVEN.GROUP_ID, "org", SearchType.SCORED ) );
-
-        // See MINDEXER-22
-        // Flat search is not pageable
-        // request.setStart( 0 );
-
-        request.setCount( 50 );
-
-        FlatSearchResponse response = nexusIndexer.searchFlat( request );
-
-        assertEquals( response.getResults().toString(), 15, response.getTotalHits() );
-    }
-
-    @Override
-    public void testSearchGroupedProblematicNames()
-        throws Exception
-    {
-
-        // ----------------------------------------------------------------------------
-        // Artifacts with "problematic" names
-        // ----------------------------------------------------------------------------
-        {
-            // "-" in the name
-            Query q = nexusIndexer.constructQuery( MAVEN.ARTIFACT_ID, "commons-logg*", SearchType.SCORED );
-
-            GroupedSearchRequest request = new GroupedSearchRequest( q, new GAGrouping() );
-
-            GroupedSearchResponse response = nexusIndexer.searchGrouped( request );
-
-            Map<String, ArtifactInfoGroup> r = response.getResults();
-
-            assertEquals( 1, r.size() );
-
-            ArtifactInfoGroup ig = r.values().iterator().next();
-
-            assertEquals( "commons-logging : commons-logging", ig.getGroupKey() );
-
-            assertEquals( ig.getArtifactInfos().toString(), 6, ig.getArtifactInfos().size() );
-        }
-
-        {
-            // numbers and "-" in the name
-            Query q = nexusIndexer.constructQuery( MAVEN.ARTIFACT_ID, "jcl104-over-slf4*", SearchType.SCORED );
-
-            GroupedSearchRequest request = new GroupedSearchRequest( q, new GAGrouping() );
-
-            GroupedSearchResponse response = nexusIndexer.searchGrouped( request );
-            Map<String, ArtifactInfoGroup> r = response.getResults();
-
-            assertEquals( 1, r.size() );
-
-            ArtifactInfoGroup ig = r.values().iterator().next();
-
-            assertEquals( ig.getArtifactInfos().toString(), 1, ig.getArtifactInfos().size() );
-
-            assertEquals( "org.slf4j : jcl104-over-slf4j", ig.getGroupKey() );
-        }
-    }
-
-    // See MINDEXER-22
-    // Flat search is not pageable
-//    @Override
-//    public void donttestPaging()
-//        throws Exception
-//    {
-//        // we have 15 artifact for this search
-//        int total = 15;
-//
-//        int pageSize = 4;
-//
-//        Query q = nexusIndexer.constructQuery( MAVEN.GROUP_ID, "org", SearchType.SCORED );
-//
-//        FlatSearchRequest req = new FlatSearchRequest( q );
-//
-//        // have page size of 4, that will make us 4 pages
-//        req.setCount( pageSize );
-//
-//        List<ArtifactInfo> constructedPageList = new ArrayList<ArtifactInfo>();
-//
-//        int offset = 0;
-//
-//        while ( true )
-//        {
-//            req.setStart( offset );
-//
-//            FlatSearchResponse resp = nexusIndexer.searchFlat( req );
-//
-//            Collection<ArtifactInfo> p = resp.getResults();
-//
-//            assertEquals( p.toString(), total, resp.getTotalHits() );
-//
-//            assertEquals( Math.min( pageSize, total - offset ), p.size() );
-//
-//            constructedPageList.addAll( p );
-//
-//            offset += pageSize;
-//
-//            if ( offset > total )
-//            {
-//                break;
-//            }
-//        }
-//
-//        //
-//        FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( q ) );
-//        Collection<ArtifactInfo> onePage = response.getResults();
-//
-//        List<ArtifactInfo> onePageList = new ArrayList<ArtifactInfo>( onePage );
-//
-//        // onePage and constructedPage should hold equal elems in the same order
-//        assertTrue( resultsAreEqual( onePageList, constructedPageList ) );
-//    }
-
-    @Override
-    public void testPurge()
-        throws Exception
-    {
-        // we have 14 artifact for this search
-        Query q = nexusIndexer.constructQuery( MAVEN.GROUP_ID, "org", SearchType.SCORED );
-        FlatSearchRequest request = new FlatSearchRequest( q );
-
-        FlatSearchResponse response1 = nexusIndexer.searchFlat( request );
-        Collection<ArtifactInfo> p1 = response1.getResults();
-
-        assertEquals( 15, p1.size() );
-
-        context.purge();
-
-        FlatSearchResponse response2 = nexusIndexer.searchFlat( request );
-        Collection<ArtifactInfo> p2 = response2.getResults();
-
-        assertEquals( 0, p2.size() );
-    }
-
-    @Override
-    public void testIdentify()
-    {
-        // skip test (sha1 field wasn't stored in the old index format)
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/test/java/org/apache/maven/index/Nexus1179NexusIndexerTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/Nexus1179NexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/Nexus1179NexusIndexerTest.java
index 8d2006c..fc23b79 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/Nexus1179NexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/Nexus1179NexusIndexerTest.java
@@ -68,7 +68,7 @@ public class Nexus1179NexusIndexerTest
         assertEquals( "ant", ai.getGroupId() );
         assertEquals( "ant", ai.getArtifactId() );
         assertEquals( "1.6.5", ai.getVersion() );
-        assertEquals( "jar", ai.getPackaging() );
+        assertEquals( null, ai.getPackaging() ); // coz no POM present
         assertEquals( null, ai.getClassifier() );
         assertEquals( "nexus-1179", ai.getRepository() );
         assertEquals( "jar", ai.getFileExtension() );
@@ -79,7 +79,7 @@ public class Nexus1179NexusIndexerTest
         assertEquals( "ant", ai.getGroupId() );
         assertEquals( "ant", ai.getArtifactId() );
         assertEquals( "1.5.1", ai.getVersion() );
-        assertEquals( null, ai.getPackaging() );
+        assertEquals( "jar", ai.getPackaging() ); // coz POM is present and says so
         assertEquals( null, ai.getClassifier() );
         assertEquals( "nexus-1179", ai.getRepository() );
         assertEquals( "pom", ai.getFileExtension() );
@@ -101,7 +101,7 @@ public class Nexus1179NexusIndexerTest
         assertEquals( "org", ai.getGroupId() );
         assertEquals( "test", ai.getArtifactId() );
         assertEquals( "1.0", ai.getVersion() );
-        assertEquals( null, ai.getPackaging() );
+        assertEquals( "jar", ai.getPackaging() ); // coz POM is present and says so
         assertEquals( null, ai.getClassifier() );
         assertEquals( "nexus-1179", ai.getRepository() );
         assertEquals( "pom", ai.getFileExtension() );

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java
index 21d01b7..c93e9f5 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java
@@ -29,14 +29,19 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.lucene.index.Term;
+import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.packer.DefaultIndexPacker;
+import org.apache.maven.index.packer.IndexPacker;
+import org.apache.maven.index.packer.IndexPackingRequest;
 import org.apache.maven.index.search.grouping.GAGrouping;
 import org.apache.maven.index.updater.DefaultIndexUpdater;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.apache.maven.index.updater.IndexUpdater;
 
 /** http://issues.sonatype.org/browse/NEXUS-13 */
 public class Nexus13NexusIndexerTest
@@ -106,9 +111,22 @@ public class Nexus13NexusIndexerTest
     public void testIndexTimestamp()
         throws Exception
     {
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        final File targetDir = File.createTempFile( "testIndexTimestamp", "ut-tmp" );
+        targetDir.delete();
+        targetDir.mkdirs();
 
-        DefaultIndexPacker.packIndexArchive( context, os );
+        final IndexPacker indexPacker = lookup( IndexPacker.class );
+        final IndexSearcher indexSearcher = context.acquireIndexSearcher();
+        try
+        {
+            final IndexPackingRequest request =
+                new IndexPackingRequest( context, indexSearcher.getIndexReader(), targetDir );
+            indexPacker.packIndex( request );
+        }
+        finally
+        {
+            context.releaseIndexSearcher( indexSearcher );
+        }
 
         Thread.sleep( 1000L );
 
@@ -117,10 +135,9 @@ public class Nexus13NexusIndexerTest
         IndexingContext newContext =
             nexusIndexer.addIndexingContext( "test-new", "nexus-13", null, indexDir, null, null, DEFAULT_CREATORS );
 
-        Directory newIndexDir = new RAMDirectory();
-
-        DefaultIndexUpdater.unpackIndexArchive( new ByteArrayInputStream( os.toByteArray() ), newIndexDir, newContext );
-        newContext.replace( newIndexDir );
+        final IndexUpdater indexUpdater = lookup( IndexUpdater.class );
+        final IndexUpdateRequest updateRequest = new IndexUpdateRequest( newContext, new DefaultIndexUpdater.FileFetcher( targetDir ) );
+        indexUpdater.fetchAndUpdateIndex( updateRequest );
 
         assertEquals( 0, newContext.getTimestamp().getTime() - context.getTimestamp().getTime() );
 

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/22fbfe07/indexer-core/src/test/java/org/apache/maven/index/Nexus1911IncrementalMergedCtxTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/Nexus1911IncrementalMergedCtxTest.java b/indexer-core/src/test/java/org/apache/maven/index/Nexus1911IncrementalMergedCtxTest.java
index 3e72fb3..d52fc87 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/Nexus1911IncrementalMergedCtxTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/Nexus1911IncrementalMergedCtxTest.java
@@ -40,6 +40,7 @@ public class Nexus1911IncrementalMergedCtxTest
         member = context;
 
         indexMergedDir = super.getDirectory( "index/nexus-1911-merged" );
+        indexMergedDir.mkdirs();
 
         context =
             indexer.addMergedIndexingContext( "merged", "merged", member.getRepository(), indexMergedDir, false,