Repository: ant-ivy
Updated Branches:
  refs/heads/master 5240c8825 -> 3fd058c02


IVY-1141 : dependencies failed using branch attribute (and extra attributes)

Thanks to Stephen Haberman

Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/8e0e1c32
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/8e0e1c32
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/8e0e1c32

Branch: refs/heads/master
Commit: 8e0e1c32ff1ed1da4f09fc9917812e6457e6fef7
Parents: 5240c88
Author: Nicolas Lalevée <[email protected]>
Authored: Sun Sep 6 17:10:47 2015 +0200
Committer: Nicolas Lalevée <[email protected]>
Committed: Sun Sep 6 17:10:56 2015 +0200

----------------------------------------------------------------------
 doc/release-notes.html                          |  1 +
 .../plugins/version/LatestVersionMatcher.java   | 15 +++++-
 .../version/LatestVersionMatcherTest.java       | 53 +++++++++++++++++++-
 3 files changed, 66 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/8e0e1c32/doc/release-notes.html
----------------------------------------------------------------------
diff --git a/doc/release-notes.html b/doc/release-notes.html
index 12624af..0c34994 100644
--- a/doc/release-notes.html
+++ b/doc/release-notes.html
@@ -61,6 +61,7 @@ List of changes since Ivy 2.4.0:
 - FIX: fixdeps remove transitive 'kept' dependencies
 - FIX: PomModuleDescriptorParser should parse licenses from parent POM 
(IVY-1526) (Thanks to Jaikiran Pai)
 - FIX: dynamic revisions are not cached per resolver (IVY-1430) (Thanks to 
Stephen Haberman)
+- FIX: Dependencies failed using branch attribute (and extra attributes) 
(IVY-1141) (Thanks to Stephen Haberman)
 
 - IMPROVEMENT: Optimization: limit the revision numbers scanned if revision 
prefix is specified (Thanks to Ernestas Vaiciukevi&#269;ius)
 

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/8e0e1c32/src/java/org/apache/ivy/plugins/version/LatestVersionMatcher.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/ivy/plugins/version/LatestVersionMatcher.java 
b/src/java/org/apache/ivy/plugins/version/LatestVersionMatcher.java
index ba5b153..5a30b24 100644
--- a/src/java/org/apache/ivy/plugins/version/LatestVersionMatcher.java
+++ b/src/java/org/apache/ivy/plugins/version/LatestVersionMatcher.java
@@ -39,13 +39,26 @@ public class LatestVersionMatcher extends 
AbstractVersionMatcher {
     }
 
     public boolean needModuleDescriptor(ModuleRevisionId askedMrid, 
ModuleRevisionId foundMrid) {
-        List statuses = StatusManager.getCurrent().getStatuses();
+        // if asking for a branch, foundMrid will likely have an invalid value 
that doesn't
+        // come from the module descriptor itself. return true so accept is 
given the real
+        // module descriptor with the correct branch.
+        if (askedMrid.getBranch() != null) {
+            return true;
+        }
+        List<Status> statuses = StatusManager.getCurrent().getStatuses();
         Status lowest = (Status) statuses.get(statuses.size() - 1);
         String latestLowest = "latest." + lowest.getName();
         return !latestLowest.equals(askedMrid.getRevision());
     }
 
     public boolean accept(ModuleRevisionId askedMrid, ModuleDescriptor 
foundMD) {
+        String askedBranch = askedMrid.getBranch();
+        String foundBranch = foundMD.getModuleRevisionId().getBranch();
+        boolean sameBranch = (askedBranch == null) ? foundBranch == null
+                : askedBranch.equals(foundBranch);
+        if (!sameBranch) {
+            return false;
+        }
         String askedStatus = 
askedMrid.getRevision().substring("latest.".length());
         return StatusManager.getCurrent().getPriority(askedStatus) >= 
StatusManager.getCurrent()
                 .getPriority(foundMD.getStatus());

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/8e0e1c32/test/java/org/apache/ivy/plugins/version/LatestVersionMatcherTest.java
----------------------------------------------------------------------
diff --git 
a/test/java/org/apache/ivy/plugins/version/LatestVersionMatcherTest.java 
b/test/java/org/apache/ivy/plugins/version/LatestVersionMatcherTest.java
index 654bf11..f72d899 100644
--- a/test/java/org/apache/ivy/plugins/version/LatestVersionMatcherTest.java
+++ b/test/java/org/apache/ivy/plugins/version/LatestVersionMatcherTest.java
@@ -17,13 +17,14 @@
  */
 package org.apache.ivy.plugins.version;
 
-import junit.framework.TestCase;
-
 import org.apache.ivy.core.IvyContext;
+import org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.module.status.Status;
 import org.apache.ivy.core.module.status.StatusManager;
 
+import junit.framework.TestCase;
+
 public class LatestVersionMatcherTest extends TestCase {
     private LatestVersionMatcher vm = new LatestVersionMatcher();
 
@@ -41,6 +42,13 @@ public class LatestVersionMatcherTest extends TestCase {
         assertNeed("latest.integration", false);
     }
 
+    public void testNeedModuleDescriptorForBranches() throws Exception {
+        assertNeed("latest.release", "trunk", true);
+        assertNeed("latest.milestone", "trunk", true);
+        // different branches will have different latest.integration artifacts
+        assertNeed("latest.integration", "trunk", true);
+    }
+
     public void testNeedModuleDescriptorCustomStatus() throws Exception {
         StatusManager.getCurrent().addStatus(new Status("release", false));
         StatusManager.getCurrent().addStatus(new Status("snapshot", true));
@@ -49,9 +57,50 @@ public class LatestVersionMatcherTest extends TestCase {
         assertNeed("latest.snapshot", false);
     }
 
+    public void testAcceptForStandardStatus() throws Exception {
+        assertAccept("latest.release", "release", true);
+        assertAccept("latest.release", "milestone", false);
+        assertAccept("latest.release", "integration", false);
+    }
+
+    public void testAcceptForSameBranches() throws Exception {
+        assertAccept("latest.release", "trunk", "release", "trunk", true);
+        assertAccept("latest.release", "trunk", "milestone", "trunk", false);
+        assertAccept("latest.release", "trunk", "integration", "trunk", false);
+    }
+
+    public void testAcceptForDifferentBranches() throws Exception {
+        assertAccept("latest.release", "trunk", "release", "feature", false);
+        assertAccept("latest.release", "trunk", "milestone", "feature", false);
+        assertAccept("latest.release", "trunk", "integration", "feature", 
false);
+    }
+
     // assertion helper methods
     private void assertNeed(String askedVersion, boolean b) {
         assertEquals(b, vm.needModuleDescriptor(
             ModuleRevisionId.newInstance("org", "name", askedVersion), null));
     }
+
+    private void assertNeed(String askedVersion, String askedBranch, boolean 
b) {
+        assertEquals(b, vm.needModuleDescriptor(
+            ModuleRevisionId.newInstance("org", "name", askedBranch, 
askedVersion), null));
+    }
+
+    private void assertAccept(String askedVersion, String foundStatus, boolean 
b) {
+        ModuleRevisionId askedMrid = ModuleRevisionId.newInstance("org", 
"name", askedVersion);
+        DefaultModuleDescriptor foundMD = DefaultModuleDescriptor
+                .newDefaultInstance(ModuleRevisionId.newInstance("org", 
"name", null));
+        foundMD.setStatus(foundStatus);
+        assertEquals(b, vm.accept(askedMrid, foundMD));
+    }
+
+    private void assertAccept(String askedVersion, String askedBranch, String 
foundStatus,
+            String foundBranch, boolean b) {
+        ModuleRevisionId askedMrid = ModuleRevisionId.newInstance("org", 
"name", askedBranch,
+            askedVersion);
+        DefaultModuleDescriptor foundMD = 
DefaultModuleDescriptor.newDefaultInstance(
+            ModuleRevisionId.newInstance("org", "name", foundBranch, (String) 
null));
+        foundMD.setStatus(foundStatus);
+        assertEquals(b, vm.accept(askedMrid, foundMD));
+    }
 }

Reply via email to