Github user aprelev commented on the issue:

    https://github.com/apache/ant-ivy/pull/73
  
    As of now, two sets of dependencies are constructed in a different ways:
    
    - *currently resolved dependecies* are produced by Ivy resolve engine, with 
**both qualified and unqualified attributes** (`super.qualifiedExtraAttributes 
!= super.extraAttributes`), and
    - *previously resolved dependencies* are parsed from last report by 
`XmlReportParser`, with **unqualified attributes only** 
(`super.qualifiedExtraAttributes == super.extraAttributes`).
    
    Set comparison at `ConfigurationResolveReport::checkIfChanged()` invokes 
`ModuleRevisionId::equals()` for individual dependencies comparison, which 
compares `super.qualifiedExtraAttributes` maps as in:
    ```Java
    @Override
    public boolean equals(Object obj) {
      ...
      return other.getRevision().equals(getRevision())
        && !(other.getBranch() == null && getBranch() != null)
        && !(other.getBranch() != null && 
!other.getBranch().equals(getBranch()))
        && other.getModuleId().equals(getModuleId())
        && 
other.getQualifiedExtraAttributes().equals(getQualifiedExtraAttributes()); //< 
here
    }
    ```
    which, obviously, yields a `false`, since keys in 
`other.getQualifiedExtraAttributes()` map are stripped of qualifiers as 
explained above.
    
    That is why I introduced parameterised version of 
`ExtendableItemHelper::getExtraAttributes()` used by `XmlReportParser`, this 
way parsed dependencies have both versions of qualifiers, same as resolved 
dependencies.
    
    As I pointed out in original PR message, issue may instead be solved by 
modifying `ModuleRevisionId::equals()` to use `super.extraAttributes`, provided 
attributes namespaces cannot clash, of course, which will result in ignoring 
qualifiers:
    ```Java
    @Override
    public boolean equals(Object obj) {
      ...
      return other.getRevision().equals(getRevision())
        && !(other.getBranch() == null && getBranch() != null)
        && !(other.getBranch() != null && 
!other.getBranch().equals(getBranch()))
        && other.getModuleId().equals(getModuleId())
        && other.getExtraAttributes().equals(getExtraAttributes()); //< 
ignoring qualifiers
    }
    ```
    At what point do you suggest we check for presense of `':'` in the names of 
attributes? 


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to