Ivy
  1. Ivy
  2. IVY-1170

LatestVersionMatcher.needModuleDescriptor() does not honor custom statuses

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.1.0
    • Fix Version/s: 2.2.0-RC1
    • Component/s: Core
    • Labels:
      None

      Description

      While tracking down some unexpected behavior in our Ivy-based build system, I ran across what looks like a bug in LatestVersionMatcher.needModuleDescriptor(). In that method, it has a hard-coded check for "latest.integration" to determine when to not require a module descriptor and just grab the newest thing.

      public boolean needModuleDescriptor(ModuleRevisionId askedMrid, ModuleRevisionId foundMrid)

      { return !"latest.integration".equals(askedMrid.getRevision()); }

      In our case, we have redefined our status to be the maven-like names:

      <statuses default="snapshot">
      <status name="release" integration="false"/>
      <status name="snapshot" integration="true"/>
      </statuses>

      Where in our case "snapshot" replaces "integration". And this LatestVersionMatcher then fails to allow "latest.snapshot" to grab artifacts w/o module descriptors. (all those old jars that I haven't Ivy-fied yet

      I will work on developing a patch.

        Activity

        Hide
        Carl Quinn added a comment -

        I've attached a patch which makes the choice of the tail for "latest.integration" be dynamically selected from the configured statuses. With a default setup, this will remain "latest.integration", but when a different status is the least released, it will be used instead, such as "latest.snapshot".

        I've included a unit test as well, although it is quite low-level and white box. But all tests continue to pass.

        Let me know if this is ok, or if it needs more work.

        thanks,
        Carl

        Show
        Carl Quinn added a comment - I've attached a patch which makes the choice of the tail for "latest.integration" be dynamically selected from the configured statuses. With a default setup, this will remain "latest.integration", but when a different status is the least released, it will be used instead, such as "latest.snapshot". I've included a unit test as well, although it is quite low-level and white box. But all tests continue to pass. Let me know if this is ok, or if it needs more work. thanks, Carl
        Hide
        Carl Quinn added a comment -

        Could someone take a look at this patch and apply it towards 2.2.0 RC? Or let me know if they see a problem with it?

        We are currently running a locally built Ivy version, and I'd like to get this officialized if possible.

        Show
        Carl Quinn added a comment - Could someone take a look at this patch and apply it towards 2.2.0 RC? Or let me know if they see a problem with it? We are currently running a locally built Ivy version, and I'd like to get this officialized if possible.
        Hide
        Maarten Coene added a comment -

        I'll try to take a look at it

        Show
        Maarten Coene added a comment - I'll try to take a look at it
        Hide
        Maarten Coene added a comment -

        I've applied your patch to SVN trunk with one small modification: I removed the check for status.isIntegration() to see if the moduledescriptor is needed.

        Thanks for the contribution!
        Maarten

        Show
        Maarten Coene added a comment - I've applied your patch to SVN trunk with one small modification: I removed the check for status.isIntegration() to see if the moduledescriptor is needed. Thanks for the contribution! Maarten

          People

          • Assignee:
            Maarten Coene
            Reporter:
            Carl Quinn
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development