You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ivy-commits@incubator.apache.org by xa...@apache.org on 2007/03/06 15:03:05 UTC

svn commit: r515137 - in /incubator/ivy/core/trunk: src/java/org/apache/ivy/core/resolve/ test/java/org/apache/ivy/plugins/conflict/ test/repositories/IVY-407/ test/repositories/IVY-407/MyCompany/ test/repositories/IVY-407/MyCompany/A/ test/repositorie...

Author: xavier
Date: Tue Mar  6 07:03:00 2007
New Revision: 515137

URL: http://svn.apache.org/viewvc?view=rev&rev=515137
Log:
FIX: latest conflict with latest-time strategy and transitive eviction (IVY-407)

Added:
    incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivy-latest-time-transitivity.xml
    incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivyconf-latest-time-transitivity.xml
    incubator/ivy/core/trunk/test/repositories/IVY-407/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/ivy-1.0.0.xml
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/lib/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/lib/A-1.0.0.jar
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/thirdparty/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/thirdparty/A-1.0.0.tar.gz   (with props)
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/ivy-1.0.0.xml
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/lib/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/lib/B-1.0.0.jar
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/thirdparty/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/thirdparty/B-1.0.0.tar.gz   (with props)
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.0.xml
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.1.xml
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.2.xml
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.0.jar
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.1.jar
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.2.jar
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.0.tar.gz   (with props)
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.1.tar.gz   (with props)
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.2.tar.gz   (with props)
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/ivy-1.0.0.xml
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/lib/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/lib/D-1.0.0.jar
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/thirdparty/
    incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/thirdparty/D-1.0.0.tar.gz   (with props)
Modified:
    incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
    incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/LatestConflictManagerTest.java

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java?view=diff&rev=515137&r1=515136&r2=515137
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java Tue Mar  6 07:03:00 2007
@@ -1091,4 +1091,19 @@
     public int hashCode() {
         return getId().hashCode();
     }
+
+    /**
+     * Returns a collection of Nodes in conflict for which conflict has been detected
+     * but conflict resolution hasn't been done yet
+     * @param rootModuleConf
+     * @param mid the module id for which pending conflicts should be found
+     * @return a Collection of IvyNode in pending conflict
+     */
+	public Collection getPendingConflicts(String rootModuleConf, ModuleId mid) {
+		return _eviction.getPendingConflicts(rootModuleConf, mid);
+	}
+
+	public void setPendingConflicts(ModuleId moduleId, String rootModuleConf, Collection conflicts) {
+		_eviction.setPendingConflicts(moduleId, rootModuleConf, conflicts);
+	}
 }

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java?view=diff&rev=515137&r1=515136&r2=515137
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java Tue Mar  6 07:03:00 2007
@@ -114,6 +114,7 @@
     private IvyNode _node;
 
     private Map _selectedDeps = new HashMap(); // Map (ModuleIdConf -> Set(Node)) // map indicating for each dependency which node has been selected
+    private Map _pendingConflicts = new HashMap(); // Map (ModuleIdConf -> Set(Node)) // map indicating for each dependency which nodes are in pending conflict (conflict detected but not yet resolved)
 
     private Map _evictedDeps = new HashMap(); // Map (ModuleIdConf -> Set(Node)) // map indicating for each dependency which node has been evicted
     private Map _evictedRevs = new HashMap(); // Map (ModuleIdConf -> Set(ModuleRevisionId)) // map indicating for each dependency which revision has been evicted
@@ -305,5 +306,22 @@
         // we didn't find this mrid in the selected ones for the root: it has been previously evicted
         return new EvictionData(rootModuleConf, ancestor, _node.getRoot().getConflictManager(_node.getModuleId()), selectedNodes);
     }
+
+	public Collection getPendingConflicts(String rootModuleConf, ModuleId mid) {
+        Collection resolved = (Collection)_pendingConflicts.get(new ModuleIdConf(mid, rootModuleConf));
+        Set ret = new HashSet();
+        if (resolved != null) {
+            for (Iterator iter = resolved.iterator(); iter.hasNext();) {
+                IvyNode node = (IvyNode)iter.next();
+                ret.add(node.getRealNode());
+            }
+        }
+        return ret;
+	}
+
+	public void setPendingConflicts(ModuleId moduleId, String rootModuleConf, Collection conflicts) {
+        ModuleIdConf moduleIdConf = new ModuleIdConf(moduleId, rootModuleConf);
+        _pendingConflicts.put(moduleIdConf, new HashSet(conflicts));
+	}
 
 }

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java?view=diff&rev=515137&r1=515136&r2=515137
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java Tue Mar  6 07:03:00 2007
@@ -578,17 +578,52 @@
     private void resolveConflict(VisitNode node) {
         resolveConflict(node, node.getParent(), Collections.EMPTY_SET);
     }
-    private void resolveConflict(VisitNode node, VisitNode ancestor, Collection toevict) {
+    /**
+     * Resolves conflict for the given node in the given ancestor.
+     * This method do conflict resolution in ancestor parents recursively,
+     * unless not necessary.
+     * @param node the node for which conflict resolution should be done
+     * @param ancestor the ancestor in which the conflict resolution should be done
+     * @param toevict a collection of IvyNode to evict (as computed by conflict resolution in descendants of ancestor)
+     * @return true if conflict resolution has been done, false it can't be done yet
+     */
+    private boolean resolveConflict(VisitNode node, VisitNode ancestor, Collection toevict) {
         if (ancestor == null || node == ancestor) {
-            return;
+            return true;
         }
         // check if job is not already done
-        if (checkConflictSolved(node, ancestor)) {
-            return;
+        if (checkConflictSolvedEvicted(node, ancestor)) {
+        	// job is done and node is evicted, nothing to do
+            return true;
+        }
+        if (checkConflictSolvedSelected(node, ancestor)) {
+        	// job is done and node is selected, nothing to do for this ancestor, but we still have 
+        	// to check higher levels, for which conflict resolution might have been impossible
+        	// before
+        	if (resolveConflict(node, ancestor.getParent(), toevict)) {
+        		// now that conflict resolution is ok in ancestors
+        		// we just have to check if the node wasn't previously evicted in root ancestor
+        		EvictionData evictionData = node.getEvictionDataInRoot(node.getRootModuleConf(), ancestor);
+        		if (evictionData != null) {
+        			// node has been previously evicted in an ancestor: we mark it as evicted
+        			if (_settings.debugConflictResolution()) {
+        				Message.debug(node+" was previously evicted in root module conf "+node.getRootModuleConf());
+        			}
+
+        			node.markEvicted(evictionData);                
+        			if (_settings.debugConflictResolution()) {
+        				Message.debug("evicting "+node+" by "+evictionData);
+        			}
+        		}
+        		return true;
+        	} else {
+        		return false;
+        	}
         }
         
         // compute conflicts
         Collection resolvedNodes = new HashSet(ancestor.getNode().getResolvedNodes(node.getModuleId(), node.getRootModuleConf()));
+        resolvedNodes.addAll(ancestor.getNode().getPendingConflicts(node.getRootModuleConf(), node.getModuleId()));
         Collection conflicts = computeConflicts(node, ancestor, toevict, resolvedNodes);
         
         if (_settings.debugConflictResolution()) {
@@ -601,8 +636,10 @@
 		if (resolved == null) {
             if (_settings.debugConflictResolution()) {
                 Message.debug("impossible to resolve conflicts for "+node+" in "+ancestor+" yet");
+                Message.debug("setting all nodes as pending conflicts for later conflict resolution: "+conflicts);
             }
-            return;
+            ancestor.getNode().setPendingConflicts(node.getModuleId(), node.getRootModuleConf(), conflicts);
+            return false;
         }
         
         if (_settings.debugConflictResolution()) {
@@ -633,8 +670,9 @@
             evicted.removeAll(resolved);
             evicted.addAll(toevict);
             ancestor.getNode().setEvictedNodes(node.getModuleId(), node.getRootModuleConf(), evicted);
+            ancestor.getNode().setPendingConflicts(node.getModuleId(), node.getRootModuleConf(), Collections.EMPTY_SET);
             
-            resolveConflict(node, ancestor.getParent(), toevict);
+            return resolveConflict(node, ancestor.getParent(), toevict);
         } else {
             // node has been evicted for the current parent
             if (resolved.isEmpty()) {
@@ -652,6 +690,7 @@
             evicted.addAll(toevict);
             evicted.add(node.getNode());
             ancestor.getNode().setEvictedNodes(node.getModuleId(), node.getRootModuleConf(), evicted);
+            ancestor.getNode().setPendingConflicts(node.getModuleId(), node.getRootModuleConf(), Collections.EMPTY_SET);
 
             
             node.markEvicted(ancestor, conflictManager, resolved);
@@ -661,16 +700,17 @@
 
             // if resolved changed we have to go up in the graph
             Collection prevResolved = ancestor.getNode().getResolvedNodes(node.getModuleId(), node.getRootModuleConf());
+            boolean solved = true;
             if (!prevResolved.equals(resolved)) {                
                 ancestor.getNode().setResolvedNodes(node.getModuleId(), node.getRootModuleConf(), resolved);
                 for (Iterator iter = resolved.iterator(); iter.hasNext();) {
                     IvyNode sel = (IvyNode)iter.next();
                     if (!prevResolved.contains(sel)) {
-                        resolveConflict(node.gotoNode(sel), ancestor.getParent(), toevict);
+                        solved &= resolveConflict(node.gotoNode(sel), ancestor.getParent(), toevict);
                     }
                 }
             }
-
+            return solved;
         }
     }
 
@@ -705,29 +745,20 @@
         return conflicts;
     }
 
-    private boolean checkConflictSolved(VisitNode node, VisitNode ancestor) {
+    private boolean checkConflictSolvedSelected(VisitNode node, VisitNode ancestor) {
         if (ancestor.getResolvedRevisions(node.getModuleId()).contains(node.getResolvedId())) {
             // resolve conflict has already be done with node with the same id
-            // => job already done, we just have to check if the node wasn't previously evicted in root ancestor
             if (_settings.debugConflictResolution()) {
                 Message.debug("conflict resolution already done for "+node+" in "+ancestor);
             }
-            EvictionData evictionData = node.getEvictionDataInRoot(node.getRootModuleConf(), ancestor);
-            if (evictionData != null) {
-                // node has been previously evicted in an ancestor: we mark it as evicted
-                if (_settings.debugConflictResolution()) {
-                    Message.debug(node+" was previously evicted in root module conf "+node.getRootModuleConf());
-                }
-
-                node.markEvicted(evictionData);                
-                if (_settings.debugConflictResolution()) {
-                    Message.debug("evicting "+node+" by "+evictionData);
-                }
-            }
             return true;
-        } else if (ancestor.getEvictedRevisions(node.getModuleId()).contains(node.getResolvedId())) {
+        } 
+        return false;
+    }
+
+    private boolean checkConflictSolvedEvicted(VisitNode node, VisitNode ancestor) {
+        if (ancestor.getEvictedRevisions(node.getModuleId()).contains(node.getResolvedId())) {
             // resolve conflict has already be done with node with the same id
-            // => job already done, we just have to check if the node wasn't previously selected in root ancestor
             if (_settings.debugConflictResolution()) {
                 Message.debug("conflict resolution already done for "+node+" in "+ancestor);
             }

Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/LatestConflictManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/LatestConflictManagerTest.java?view=diff&rev=515137&r1=515136&r2=515137
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/LatestConflictManagerTest.java (original)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/LatestConflictManagerTest.java Tue Mar  6 07:03:00 2007
@@ -126,7 +126,50 @@
         }
     }
     
+    /*
+    Test case for issue IVY-407 (with transitivity)
+
+    There are 5 modules A, B, C, D and E.
+		1) publish C-1.0.0, C-1.0.1 and C-1.0.2
+		2) B needs C-1.0.0 : retrieve ok and publish B-1.0.0
+		3) A needs B-1.0.0 and C-1.0.2 : retrieve ok and publish A-1.0.0
+		4) D needs C-1.0.1 : retrieve ok and publish D-1.0.0
+		5) E needs D-1.0.0 and A-1.0.0 (D before A in ivy file) retrieve failed to get C-1.0.2 from A
+		(get apparently C-1.0.1 from D)
+     */
+    public void testLatestTimeTransitivity() throws Exception {
+    	ivy = new Ivy();
+    	ivy.configure(LatestConflictManagerTest.class
+    			.getResource("ivyconf-latest-time-transitivity.xml"));
+    	ivy.getSettings().setVariable("ivy.log.conflict.resolution", "true", true);
+    	ResolveReport report =
+    		ivy.resolve( LatestConflictManagerTest.class.getResource( "ivy-latest-time-transitivity.xml" ), 
+    				getResolveOptions() );
+    	ConfigurationResolveReport defaultReport =
+    		report.getConfigurationReport("default");
+    	Iterator iter = defaultReport.getModuleRevisionIds().iterator();
+    	while (iter.hasNext()) {
+    		ModuleRevisionId mrid = (ModuleRevisionId)iter.next();
+
+    		if (mrid.getName().equals("A")) {
+    			assertEquals("A revision should be 1.0.0", "1.0.0", mrid.getRevision());
+    		}
+    		else if (mrid.getName().equals("D")) {
+    			assertEquals("D revision should be 1.0.0", "1.0.0", mrid.getRevision());
+    		}
+    		// by transitivity
+    		else if (mrid.getName().equals("B")) {
+    			assertEquals("B revision should be 1.0.0", "1.0.0", mrid.getRevision());
+    		}
+    		else if (mrid.getName().equals("C")) {
+    			assertEquals("C revision should be 1.0.2", "1.0.2", mrid.getRevision());
+    		}
+    	}
+    }
+
     private ResolveOptions getResolveOptions() {
-		return new ResolveOptions().setCache(CacheManager.getInstance(ivy.getSettings())).setValidate(false);
+		return new ResolveOptions()
+			.setCache(CacheManager.getInstance(ivy.getSettings()))
+			.setValidate(false);
 	}
 }

Added: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivy-latest-time-transitivity.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivy-latest-time-transitivity.xml?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivy-latest-time-transitivity.xml (added)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivy-latest-time-transitivity.xml Tue Mar  6 07:03:00 2007
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ivy-module version="1.0">
+  <info organisation="MyCompany" module="E" revision="1.0.0" status="release" />
+  <dependencies>
+    <dependency org="MyCompany" name="D" rev="1.0.0" changing="true" />
+    <dependency org="MyCompany" name="A" rev="1.0.0" changing="true" />
+  </dependencies>
+</ivy-module>
\ No newline at end of file

Added: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivyconf-latest-time-transitivity.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivyconf-latest-time-transitivity.xml?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivyconf-latest-time-transitivity.xml (added)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/conflict/ivyconf-latest-time-transitivity.xml Tue Mar  6 07:03:00 2007
@@ -0,0 +1,12 @@
+<ivyconf>
+
+    <conf defaultResolver="test" defaultConflictManager="latest-time" />
+
+    <resolvers>
+       <filesystem name="test" latest="latest-time" checkmodified="true">
+        <artifact pattern="test/repositories/IVY-407/[organisation]/[module]/[type]/[artifact]-[revision].[ext]" />
+        <ivy pattern="test/repositories/IVY-407/[organisation]/[module]/ivy-[revision].xml" />
+      </filesystem>
+   </resolvers>
+
+</ivyconf>

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/ivy-1.0.0.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/ivy-1.0.0.xml?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/ivy-1.0.0.xml (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/ivy-1.0.0.xml Tue Mar  6 07:03:00 2007
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivy-module version="1.0">
+  <info organisation="MyCompany" module="A" revision="1.0.0" status="integration" publication="20070226113607"/>
+  <configurations>
+   <conf name="all"/>
+  </configurations>
+  <publications>
+    <artifact name="A" ext="tar.gz" type="thirdparty" conf="all"/>
+    <artifact name="A" ext="jar" type="lib" conf="all"/>
+  </publications>
+  <dependencies>
+    <dependency org="MyCompany" name="B" rev="1.0.0" changing="true"/>
+    <dependency org="MyCompany" name="C" rev="1.0.2" changing="true"/>
+  </dependencies>
+</ivy-module>

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/lib/A-1.0.0.jar
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/lib/A-1.0.0.jar?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/lib/A-1.0.0.jar (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/lib/A-1.0.0.jar Tue Mar  6 07:03:00 2007
@@ -0,0 +1,3 @@
+
+ 	A.jar REV 1.0.0 DATE February 26 2007 1136
+ 
\ No newline at end of file

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/thirdparty/A-1.0.0.tar.gz
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/thirdparty/A-1.0.0.tar.gz?view=auto&rev=515137
==============================================================================
Binary file - no diff available.

Propchange: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/A/thirdparty/A-1.0.0.tar.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/ivy-1.0.0.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/ivy-1.0.0.xml?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/ivy-1.0.0.xml (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/ivy-1.0.0.xml Tue Mar  6 07:03:00 2007
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivy-module version="1.0">
+  <info organisation="MyCompany" module="B" revision="1.0.0" status="integration" publication="20070226112304"/>
+  <configurations>
+   <conf name="all"/>
+  </configurations>
+  <publications>
+    <artifact name="B" ext="tar.gz" type="thirdparty" conf="all"/>
+    <artifact name="B" ext="jar" type="lib" conf="all"/>
+  </publications>
+  <dependencies>
+    <dependency org="MyCompany" name="C" rev="1.0.0" changing="true"/>
+  </dependencies>
+</ivy-module>

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/lib/B-1.0.0.jar
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/lib/B-1.0.0.jar?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/lib/B-1.0.0.jar (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/lib/B-1.0.0.jar Tue Mar  6 07:03:00 2007
@@ -0,0 +1,3 @@
+
+ 	B.jar REV 1.0.0 DATE February 26 2007 1123
+ 
\ No newline at end of file

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/thirdparty/B-1.0.0.tar.gz
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/thirdparty/B-1.0.0.tar.gz?view=auto&rev=515137
==============================================================================
Binary file - no diff available.

Propchange: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/B/thirdparty/B-1.0.0.tar.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.0.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.0.xml?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.0.xml (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.0.xml Tue Mar  6 07:03:00 2007
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivy-module version="1.0">
+  <info organisation="MyCompany" module="C" revision="1.0.0" status="integration" publication="20070226112211"/>
+  <configurations>
+   <conf name="all"/>
+  </configurations>
+  <publications>
+    <artifact name="C" ext="tar.gz" type="thirdparty" conf="all"/>
+    <artifact name="C" ext="jar" type="lib" conf="all"/>
+  </publications>
+  <dependencies>
+  </dependencies>
+</ivy-module>

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.1.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.1.xml?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.1.xml (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.1.xml Tue Mar  6 07:03:00 2007
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivy-module version="1.0">
+  <info organisation="MyCompany" module="C" revision="1.0.1" status="integration" publication="20070226112225"/>
+  <configurations>
+   <conf name="all"/>
+  </configurations>
+  <publications>
+    <artifact name="C" ext="tar.gz" type="thirdparty" conf="all"/>
+    <artifact name="C" ext="jar" type="lib" conf="all"/>
+  </publications>
+  <dependencies>
+  </dependencies>
+</ivy-module>

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.2.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.2.xml?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.2.xml (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/ivy-1.0.2.xml Tue Mar  6 07:03:00 2007
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivy-module version="1.0">
+  <info organisation="MyCompany" module="C" revision="1.0.2" status="integration" publication="20070226112233"/>
+  <configurations>
+   <conf name="all"/>
+  </configurations>
+  <publications>
+    <artifact name="C" ext="tar.gz" type="thirdparty" conf="all"/>
+    <artifact name="C" ext="jar" type="lib" conf="all"/>
+  </publications>
+  <dependencies>
+  </dependencies>
+</ivy-module>

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.0.jar
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.0.jar?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.0.jar (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.0.jar Tue Mar  6 07:03:00 2007
@@ -0,0 +1,3 @@
+
+ 	C.jar REV 1.0.0 DATE February 26 2007 1122
+ 
\ No newline at end of file

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.1.jar
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.1.jar?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.1.jar (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.1.jar Tue Mar  6 07:03:00 2007
@@ -0,0 +1,3 @@
+
+ 	C.jar REV 1.0.1 DATE February 26 2007 1122
+ 
\ No newline at end of file

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.2.jar
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.2.jar?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.2.jar (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/lib/C-1.0.2.jar Tue Mar  6 07:03:00 2007
@@ -0,0 +1,3 @@
+
+ 	C.jar REV 1.0.2 DATE February 26 2007 1122
+ 
\ No newline at end of file

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.0.tar.gz
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.0.tar.gz?view=auto&rev=515137
==============================================================================
Binary file - no diff available.

Propchange: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.0.tar.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.1.tar.gz
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.1.tar.gz?view=auto&rev=515137
==============================================================================
Binary file - no diff available.

Propchange: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.1.tar.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.2.tar.gz
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.2.tar.gz?view=auto&rev=515137
==============================================================================
Binary file - no diff available.

Propchange: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/C/thirdparty/C-1.0.2.tar.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/ivy-1.0.0.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/ivy-1.0.0.xml?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/ivy-1.0.0.xml (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/ivy-1.0.0.xml Tue Mar  6 07:03:00 2007
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivy-module version="1.0">
+  <info organisation="MyCompany" module="D" revision="1.0.0" status="integration" publication="20070226112331"/>
+  <configurations>
+   <conf name="all"/>
+  </configurations>
+  <publications>
+    <artifact name="D" ext="tar.gz" type="thirdparty" conf="all"/>
+    <artifact name="D" ext="jar" type="lib" conf="all"/>
+  </publications>
+  <dependencies>
+    <dependency org="MyCompany" name="C" rev="1.0.1" changing="true"/>
+  </dependencies>
+</ivy-module>

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/lib/D-1.0.0.jar
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/lib/D-1.0.0.jar?view=auto&rev=515137
==============================================================================
--- incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/lib/D-1.0.0.jar (added)
+++ incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/lib/D-1.0.0.jar Tue Mar  6 07:03:00 2007
@@ -0,0 +1,3 @@
+
+ 	D.jar REV 1.0.0 DATE February 26 2007 1123
+ 
\ No newline at end of file

Added: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/thirdparty/D-1.0.0.tar.gz
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/thirdparty/D-1.0.0.tar.gz?view=auto&rev=515137
==============================================================================
Binary file - no diff available.

Propchange: incubator/ivy/core/trunk/test/repositories/IVY-407/MyCompany/D/thirdparty/D-1.0.0.tar.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream