Having mistaken binary compatibility for backwards compatibility, I tried
to look at the ecosystem. Sure enough, there is a bunch of custom resolvers
around, but most extend at least RepositoryResolver; here's a list of those
that do it (might be useful for Ivy documentation as well)

https://github.com/fdrueke/ivyp4
https://github.com/massdosage/ivysvn
https://github.com/ohnosequences/ivy-s3-resolver
https://github.com/rajeshja/atg-ivy-resolver
https://github.com/angrycamel/ivydav

There are others that extend URLResover or IBiblioResolver; only SBT
appears to dig deeper, but apparently only because of the lack of proper
typing. In a nutshell, the mitigation I proposed looks adequate (the check
in ChainResolver looks like almost an overkill).

Gintas

2017-07-28 21:26 GMT+02:00 Gintautas Grigelionis <g.grigelio...@gmail.com>:

> Sorry all, I misunderstood the problem, and thanks to Jaikiran and Stefan
> for the discussion.
>
> Third party implementations will be broken because they lack the method
> with the new signature unless they extend the AbstractResolver. And the
> AbstractResolver must work the other way around, provide a default
> implementation that defines the method with new signature in terms of the
> method with the old signature. The SearchEngine should work, though,
> because the loops are refactored so that they take whatever iterable is
> thrown at them. And AFAICS there are no other uses of listTokenValues()
> implemented by resolvers (which are possible extensions of Ivy).
>
> Gintas
>
> 2017-07-28 18:55 GMT+02:00 Stefan Bodewig <bode...@apache.org>:
>
>> On 2017-07-28, Jaikiran Pai wrote:
>>
>> > Ivy has a DependencyResolver interface which is the central piece of
>> > contract/interface for extending Ivy (any external usage for that
>> > matter).
>>
>> I'm not at all familiar with Ivy and the eco system that might exist
>> around it. How likely is it that anybody has implemented this interface
>> in a an extension? And how likely does such an extension not subclass
>> AbstractResolver?
>>
>> Adding methods to an interface usually means a backwards incompatible
>> change that requires a new major version when using semantic versioning
>> (not sure whether Ivy uses semver, Ant itself doesn't).
>>
>> > Instead, what I think we could do is add that method to the
>> > implementing class(es) internally (like the AbstractResolver - the PR
>> > does that already). Of course at some places within our code, if we
>> > want to use the newer generics based method, we will probably end up
>> > doing a type check on the resolver instance to see if it's a
>> > AbstractResolver which has that new method, but I think that should be
>> > fine for now.
>>
>> Alternatively add a new interface with that method that extends
>> DependencyResolver and is implemented by AbstractResolver and check for
>> the new interface rather than AbstractResolver?
>>
>> Stefan
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
>> For additional commands, e-mail: dev-h...@ant.apache.org
>>
>>
>

Reply via email to