You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2013/12/14 18:06:26 UTC

svn commit: r1550939 - in /ant/ivy/core/trunk: ./ doc/use/ src/java/org/apache/ivy/ant/ src/java/org/apache/ivy/core/cache/ src/java/org/apache/ivy/core/install/ test/java/org/apache/ivy/ant/ test/java/org/apache/ivy/core/cache/ test/java/org/apache/iv...

Author: hibou
Date: Sat Dec 14 17:06:25 2013
New Revision: 1550939

URL: http://svn.apache.org/r1550939
Log:
IVY-1431: Also copy original metadata artifact (e.g. POM) on ivy:install (Thanks to Erwin Tratar)

Modified:
    ant/ivy/core/trunk/CHANGES.txt
    ant/ivy/core/trunk/doc/use/install.html
    ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java
    ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
    ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallEngine.java
    ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallOptions.java
    ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java
    ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java
    ant/ivy/core/trunk/test/java/org/apache/ivy/core/install/InstallTest.java
    ant/ivy/core/trunk/test/repositories/ivysettings.xml

Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Sat Dec 14 17:06:25 2013
@@ -122,6 +122,7 @@ for detailed view of each issue, please 
 	Simon Steiner
 	Johan Stuyts
 	John Tinetti
+	Erwin Tratar
 	Jason Trump
 	Tjeerd Verhagen
 	Richard Vowles
@@ -150,6 +151,7 @@ for detailed view of each issue, please 
 - IMPROVEMENT: Optional <include> ivysettings directives (IVY-1392) (thanks to Yanus Poluektovich)
 - IMPROVEMENT: add support for source bundles from p2 repositories
 - IMPROVEMENT: add support for source URI from OBR repositories
+- IMPROVEMENT: Also copy original metadata artifact (e.g. POM) on ivy:install (IVY-1431) (Thanks to Erwin Tratar)
 
 - FIX: In IvyDE, Ivy fails to parse ivy-settings.xml file if it contains <pgp> element (thanks to Gregory Amerson) (IVY-1441)
 - FIX: ParseException when "Bundle-Description" is present in OSGI MANIFEST.MF (IVY-1438)

Modified: ant/ivy/core/trunk/doc/use/install.html
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/doc/use/install.html?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/doc/use/install.html (original)
+++ ant/ivy/core/trunk/doc/use/install.html Sat Dec 14 17:06:25 2013
@@ -66,6 +66,8 @@ For more details about this task and its
     	<td>No, 'ivy.instance' is taken by default.</td></tr>
     <tr><td>haltonfailure</td><td>true to fail build on unresolved dependencies <span class="since">since 2.0</span></td>
         <td>No, defaults to true</td></tr>
+    <tr><td>installOriginalMetadata</td><td>true to install original metadata (if available). If the module has been originally resolved from a m2 repository, the original metadata is the original POM file <span class="since">since 2.4</span></td>
+        <td>No, defaults to false</td></tr>
 </tbody>
 </table>
 <h1>Examples</h1>

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java Sat Dec 14 17:06:25 2013
@@ -57,6 +57,8 @@ public class IvyInstall extends IvyTask 
 
     private boolean haltOnFailure = true;
 
+    private boolean installOriginalMetadata = false;
+
     public void doExecute() throws BuildException {
         Ivy ivy = getIvyInstance();
         IvySettings settings = ivy.getSettings();
@@ -107,7 +109,8 @@ public class IvyInstall extends IvyTask 
                     .setOverwrite(overwrite)
                     .setConfs(conf.split(","))
                     .setArtifactFilter(FilterHelper.getArtifactTypeFilter(type))
-                    .setMatcherName(matcher));
+                    .setMatcherName(matcher)
+                    .setInstallOriginalMetadata(installOriginalMetadata));
         } catch (Exception e) {
             throw new BuildException("impossible to install " + mrid + ": " + e, e);
         }
@@ -218,4 +221,11 @@ public class IvyInstall extends IvyTask 
         this.conf = conf;
     }
 
+    public boolean isInstallOriginalMetadata() {
+        return installOriginalMetadata;
+    }
+    
+    public void setInstallOriginalMetadata(boolean installOriginalMetadata) {
+        this.installOriginalMetadata = installOriginalMetadata;
+    }
 }

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java Sat Dec 14 17:06:25 2013
@@ -23,11 +23,14 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.text.ParseException;
 import java.util.Date;
 import java.util.Enumeration;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
@@ -39,6 +42,7 @@ import org.apache.ivy.core.module.descri
 import org.apache.ivy.core.module.descriptor.DefaultArtifact;
 import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
 import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
+import org.apache.ivy.core.module.id.ArtifactRevisionId;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.module.id.ModuleRules;
 import org.apache.ivy.core.report.ArtifactDownloadReport;
@@ -465,6 +469,7 @@ public class DefaultRepositoryCacheManag
         PropertiesFile cdf = getCachedDataFile(artifact.getModuleRevisionId());
         cdf.setProperty(getIsLocalKey(artifact), String.valueOf(origin.isLocal()));
         cdf.setProperty(getLocationKey(artifact), origin.getLocation());
+        cdf.setProperty(getOriginalKey(artifact), getPrefixKey(origin.getArtifact()));
         if (origin.getLastChecked() != null) {
             cdf.setProperty(getLastCheckedKey(artifact), origin.getLastChecked().toString());
         }
@@ -478,9 +483,13 @@ public class DefaultRepositoryCacheManag
         cdf.remove(getLocationKey(artifact));
         cdf.remove(getIsLocalKey(artifact));
         cdf.remove(getLastCheckedKey(artifact));
+        cdf.remove(getOriginalKey(artifact));
         cdf.save();
     }
 
+    private static final Pattern ARTIFACT_KEY_PATTERN = 
+            Pattern.compile(".*:(.*)#(.*)#(.*)#(.*)(\\.location)?");
+    
     public ArtifactOrigin getSavedArtifactOrigin(Artifact artifact) {
         ModuleRevisionId mrid = artifact.getModuleRevisionId();
         if (!lockMetadataArtifact(mrid)) {
@@ -493,6 +502,7 @@ public class DefaultRepositoryCacheManag
             String local = cdf.getProperty(getIsLocalKey(artifact));
             String lastChecked = cdf.getProperty(getLastCheckedKey(artifact));
             String exists = cdf.getProperty(getExistsKey(artifact));
+            String original = cdf.getProperty(getOriginalKey(artifact));
 
             boolean isLocal = Boolean.valueOf(local).booleanValue();
 
@@ -501,6 +511,72 @@ public class DefaultRepositoryCacheManag
                 return ArtifactOrigin.unkwnown(artifact);
             }
 
+            if (original != null) {
+                // original artifact key artifact:[name]#[type]#[ext]#[hashcode]
+                java.util.regex.Matcher m = ARTIFACT_KEY_PATTERN.matcher(original);
+                if (m.matches()) {
+                    String origName = m.group(1); 
+                    String origType = m.group(2); 
+                    String origExt = m.group(3); 
+
+                    ArtifactRevisionId originArtifactId = ArtifactRevisionId.newInstance(
+                        artifact.getModuleRevisionId(), origName, origType, origExt);
+                    // second check: verify the hashcode of the cached artifact
+                    if (m.group(4).equals("" + originArtifactId.hashCode())) {
+                        try {
+                            artifact = new DefaultArtifact(originArtifactId, 
+                                artifact.getPublicationDate(), new URL(location), true);
+                        } catch (MalformedURLException e) {
+                            Message.debug(e);
+                        }
+                    }
+                }
+            } else {
+                // Fallback if cached with old version:
+                
+                // if the origin artifact has another extension (e.g. .pom) then make a synthetic
+                // origin artifact for it
+                if (!location.endsWith("." + artifact.getExt())) {
+                    // try to find other cached artifact info with same location. This must be the
+                    // origin. We must parse the key as we do not know for sure what the original 
+                    // artifact is named.
+                    Iterator it = cdf.entrySet().iterator();
+                    String ownLocationKey = getLocationKey(artifact);
+                    while (it.hasNext()) {
+                        Map.Entry entry = (Map.Entry) it.next();
+                        if (entry.getValue().equals(location)
+                                && !ownLocationKey.equals(entry.getKey())) {
+                            // found a match, key is artifact:[name]#[type]#[ext]#[hashcode].location
+                            java.util.regex.Matcher m = ARTIFACT_KEY_PATTERN.matcher(
+                                (String) entry.getKey());
+                            if (m.matches()) {
+                                String origName = m.group(1); 
+                                String origType = m.group(2); 
+                                String origExt = m.group(3); 
+
+                                // first check: the type should end in .original
+                                if (!origType.endsWith(".original")) {
+                                    continue;
+                                }
+                                
+                                ArtifactRevisionId originArtifactId = ArtifactRevisionId.newInstance(
+                                    artifact.getModuleRevisionId(), origName, origType, origExt);
+                                // second check: verify the hashcode of the cached artifact
+                                if (m.group(4).equals("" + originArtifactId.hashCode())) {
+                                    try {
+                                        artifact = new DefaultArtifact(originArtifactId, 
+                                            artifact.getPublicationDate(), new URL(location), true);
+                                    } catch (MalformedURLException e) {
+                                        Message.debug(e);
+                                    }
+                                }
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+            
             ArtifactOrigin origin = new ArtifactOrigin(artifact, isLocal, location);
             if (lastChecked != null) {
                 origin.setLastChecked(Long.valueOf(lastChecked));
@@ -578,6 +654,18 @@ public class DefaultRepositoryCacheManag
         return prefix + ".exists";
     }
 
+    /**
+     * Returns the key used to identify the original artifact.
+     * 
+     * @param artifact
+     *            the artifact to generate the key from. Cannot be null.
+     * @return the key to be used to reference the original artifact.
+     */
+    private String getOriginalKey(Artifact artifact) {
+        String prefix = getPrefixKey(artifact);
+        return prefix + ".original";
+    }
+
     private PropertiesFile getCachedDataFile(ModuleDescriptor md) {
         return getCachedDataFile(md.getResolvedModuleRevisionId());
     }
@@ -675,6 +763,17 @@ public class DefaultRepositoryCacheManag
                             madr.setSize(ivyFile.length());
                             madr.setArtifactOrigin(
                                 getSavedArtifactOrigin(depMD.getMetadataArtifact()));
+                            if (madr.getArtifactOrigin().isExists()) {
+                                if (madr.getArtifactOrigin().isLocal() 
+                                        && madr.getArtifactOrigin().getArtifact().getUrl() != null) {
+                                    madr.setOriginalLocalFile(
+                                        new File(madr.getArtifactOrigin().getArtifact().getUrl().toURI()));
+                                } else {
+                                    // find locally cached file
+                                    madr.setOriginalLocalFile(
+                                        getArchiveFileInCache(madr.getArtifactOrigin().getArtifact()));
+                                }
+                            }
                             return new ResolvedModuleRevision(
                                 resolver, artResolver, depMD, madr);
                         } else {

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallEngine.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallEngine.java?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallEngine.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallEngine.java Sat Dec 14 17:06:25 2013
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.Date;
 
+import org.apache.ivy.core.cache.ArtifactOrigin;
 import org.apache.ivy.core.module.descriptor.Configuration;
 import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor;
 import org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor;
@@ -29,6 +30,7 @@ import org.apache.ivy.core.module.descri
 import org.apache.ivy.core.module.id.ModuleId;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.report.ArtifactDownloadReport;
+import org.apache.ivy.core.report.MetadataArtifactDownloadReport;
 import org.apache.ivy.core.report.ResolveReport;
 import org.apache.ivy.core.resolve.DownloadOptions;
 import org.apache.ivy.core.resolve.IvyNode;
@@ -153,11 +155,28 @@ public class InstallEngine {
                         }
                         
                         // publish metadata
-                        File localIvyFile = dependencies[i]
-                                                    .getModuleRevision().getReport().getLocalFile();
+                        MetadataArtifactDownloadReport artifactDownloadReport = dependencies[i]
+                                .getModuleRevision().getReport();
+                        File localIvyFile = artifactDownloadReport.getLocalFile();
                         toResolver.publish(
                             depmd.getMetadataArtifact(), localIvyFile, options.isOverwrite());
                         
+                        if (options.isInstallOriginalMetadata()) {
+                            if (artifactDownloadReport.getArtifactOrigin() != null
+                                    && artifactDownloadReport.getArtifactOrigin().isExists()
+                                    && !ArtifactOrigin.isUnknown(artifactDownloadReport.getArtifactOrigin())
+                                    && artifactDownloadReport.getArtifactOrigin().getArtifact() != null
+                                    && artifactDownloadReport.getArtifactOrigin().getArtifact()
+                                        .getType().endsWith(".original")
+                                    && !artifactDownloadReport.getArtifactOrigin().getArtifact()
+                                        .getType().equals(depmd.getMetadataArtifact().getType()+".original")) {
+                                // publish original metadata artifact, too, as it has a different type
+                                toResolver.publish(artifactDownloadReport.getArtifactOrigin().getArtifact(),
+                                    artifactDownloadReport.getOriginalLocalFile(), 
+                                    options.isOverwrite());
+                            }
+                        }
+                        
                         // end module publish
                         toResolver.commitPublishTransaction();
                         successfullyPublished  = true;

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallOptions.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallOptions.java?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallOptions.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/install/InstallOptions.java Sat Dec 14 17:06:25 2013
@@ -25,6 +25,7 @@ public class InstallOptions {
     private boolean transitive = true;
     private boolean validate = true;
     private boolean overwrite = false;
+    private boolean installOriginalMetadata = false;
     private String[] confs = {"*"};
     private Filter artifactFilter = FilterHelper.NO_FILTER;
     private String matcherName = PatternMatcher.EXACT;
@@ -71,4 +72,11 @@ public class InstallOptions {
         this.confs = conf;
         return this;
     }
+    public boolean isInstallOriginalMetadata() {
+        return installOriginalMetadata;
+    }
+    public InstallOptions setInstallOriginalMetadata(boolean installOriginalMetadata) {
+        this.installOriginalMetadata = installOriginalMetadata;
+        return this;
+    }
 }

Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java Sat Dec 14 17:06:25 2013
@@ -21,6 +21,9 @@ import java.io.File;
 
 import junit.framework.TestCase;
 
+import org.apache.ivy.core.install.InstallOptions;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
+import org.apache.ivy.core.report.ResolveReport;
 import org.apache.ivy.util.FileUtil;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -181,6 +184,35 @@ public class IvyInstallTest extends Test
 
         assertFalse(new File("build/test/install/org8/mod8.1/a-1.1.txt").exists());        
     }
+
+    public void testInstallWithOriginalMetadata() {
+        project.setProperty("ivy.settings.file", "test/repositories/ivysettings.xml");
+        install.setOrganisation("org.apache");
+        install.setModule("test");
+        install.setRevision("1.0");
+        install.setFrom("test");
+        install.setTo("install");
+        install.setHaltonfailure(false);
+        
+        try {
+            install.execute();
+        } catch (BuildException be) {
+            fail("unknown dependency, failure unexpected (haltonfailure=false). Failure: " + be);
+        }
+        
+        assertFalse(new File("build/test/install/org.apache/test/test-1.0.pom").exists());
+        
+        install.setInstallOriginalMetadata(true);
+        
+        try {
+            install.setOverwrite(true);
+            install.execute();
+        } catch (BuildException be) {
+            fail("unknown dependency, failure unexpected (haltonfailure=false). Failure: " + be);
+        }
+        
+        assertTrue(new File("build/test/install/org.apache/test/test-1.0.pom").exists());
+    }
     
     public void testIVY843() {
         project.setProperty("ivy.settings.file", "test/repositories/ivysettings-IVY843.xml");

Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java Sat Dec 14 17:06:25 2013
@@ -52,7 +52,11 @@ public class DefaultRepositoryCacheManag
         cacheManager.setBasedir(f);
 
         artifact = createArtifact("org", "module", "rev", "name", "type", "ext");
-        origin = new ArtifactOrigin(artifact, true, "/some/where");
+        
+        Artifact originArtifact = createArtifact("org", "module", "rev", "name", "pom.original", "pom");
+        origin = new ArtifactOrigin(originArtifact, true, "file:/some/where.pom");
+
+        cacheManager.saveArtifactOrigin(originArtifact, origin);
         cacheManager.saveArtifactOrigin(artifact, origin);
     }
 
@@ -66,6 +70,7 @@ public class DefaultRepositoryCacheManag
     public void testArtifactOrigin() {
         ArtifactOrigin found = cacheManager.getSavedArtifactOrigin(artifact);
         assertEquals(origin, found);
+        assertEquals("pom", found.getArtifact().getExt());
 
         artifact = createArtifact("org", "module", "rev", "name", "type2", "ext");
         found = cacheManager.getSavedArtifactOrigin(artifact);

Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/core/install/InstallTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/install/InstallTest.java?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/core/install/InstallTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/core/install/InstallTest.java Sat Dec 14 17:06:25 2013
@@ -23,6 +23,7 @@ import junit.framework.TestCase;
 
 import org.apache.ivy.Ivy;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
+import org.apache.ivy.core.report.ResolveReport;
 import org.apache.ivy.plugins.matcher.PatternMatcher;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Delete;
@@ -52,6 +53,28 @@ public class InstallTest extends TestCas
         assertFalse(new File("build/test/install/orgfailure/modfailure/modfailure-1.0.jar").exists());
     }
 
+    public void testMaven() throws Exception {
+        Ivy ivy = Ivy.newInstance();
+        ivy.configure(new File("test/repositories/ivysettings.xml"));
+
+        ResolveReport rr = ivy.install(ModuleRevisionId.newInstance("org.apache", "test", "1.0"), ivy.getSettings()
+                .getDefaultResolver().getName(), "install", new InstallOptions());
+
+        assertTrue(new File("build/test/install/org.apache/test/ivy-1.0.xml").exists());
+        assertTrue(new File("build/test/install/org.apache/test/test-1.0.jar").exists());
+        
+        // the original descriptor is not installed
+        assertFalse(new File("build/test/install/org.apache/test/test-1.0.pom").exists());
+
+        ivy.install(ModuleRevisionId.newInstance("org.apache", "test", "1.0"), ivy.getSettings()
+            .getDefaultResolver().getName(), "install", new InstallOptions()
+                .setInstallOriginalMetadata(true)
+                .setOverwrite(true));
+        
+        // the original descriptor is installed now, too
+        assertTrue(new File("build/test/install/org.apache/test/test-1.0.pom").exists());
+    }
+    
     public void testNoValidate() throws Exception {
         Ivy ivy = Ivy.newInstance();
         ivy.configure(new File("test/repositories/ivysettings.xml"));

Modified: ant/ivy/core/trunk/test/repositories/ivysettings.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/ivysettings.xml?rev=1550939&r1=1550938&r2=1550939&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/repositories/ivysettings.xml (original)
+++ ant/ivy/core/trunk/test/repositories/ivysettings.xml Sat Dec 14 17:06:25 2013
@@ -35,6 +35,8 @@
 					<artifact pattern="${ivy.settings.dir}/2/[module]/[artifact].[ext]"/>
 				</filesystem>
 			</dual>
+			<ibiblio name="m2" m2compatible="true" useMavenMetadata="true" 
+			         root="file:${ivy.settings.dir}/m2" />
 		</chain>
 		<filesystem name="install">
 			<ivy pattern="${ivy.basedir}/build/test/install/[organisation]/[module]/[artifact]-[revision].[ext]"/>