On Wed, May 30, 2012 at 5:09 PM, Thomas Mortagne
<[email protected]> wrote:
> On Wed, May 30, 2012 at 4:50 PM, Marius Dumitru Florea
> <[email protected]> wrote:
>> On Wed, May 30, 2012 at 5:29 PM, Thomas Mortagne
>> <[email protected]> wrote:
>>> On Wed, May 30, 2012 at 4:01 PM, Eduard Moraru <[email protected]> wrote:
>>>> On Wed, May 30, 2012 at 4:16 PM, Thomas Mortagne
>>>> <[email protected]>wrote:
>>>>
>>>>> On Wed, May 30, 2012 at 2:55 PM, Eduard Moraru <[email protected]>
>>>>> wrote:
>>>>> > I mentioned Velocity because I saw a DiffScriptService component with
>>>>> > @Named("diff") that has the same method signature as the Java API:
>>>>> >
>>>>> > public <E> DiffResult<E> diff(List<E> previous, List<E> next,
>>>>> > DiffConfiguration<E> configuration)
>>>>> >
>>>>> > See the discussion [1] on the pull request for more details on the
>>>>> Velocity
>>>>> > question.
>>>>> >
>>>>> > Back to my original question (same question as Thomas basically), that's
>>>>> > exactly what I am trying to understand, Vincent... if the
>>>>> > List<String/Character> is the optimal use case and not just String.
>>>>> >
>>>>> > Without a scenario in favour of List<E>, I would go for exposing a 
>>>>> > String
>>>>> > based API (well, just an extra method in this case) as well.
>>>>>
>>>>> You can imagine all sort of use cases with any value so I don't see
>>>>> the point in arbitrary limiting the API to just Strings where the
>>>>> logic is the same whatever the type.
>>>>
>>>>
>>>> Yes, I understand now how it works. If other are interested, please see my
>>>> new comment [1] on the pull request.
>>>>
>>>> Short version: The API compares lists of objects by using Object#equals()
>>>> and does not go into the structure of the compared elements, just reports
>>>> differences of the list itself. You have to structure/break your input to
>>>> the level of granularity that you need for the diff to be relevant to your
>>>> use case.
>>>>
>>>>
>>>>> If you really need a direct use
>>>>> case for existing stuff then just think about producing a diff between
>>>>> two static list properties values, it would be very bad to have to
>>>>> create a String from it first especially since you could have \n in
>>>>> one of the elements.
>>>>>
>>>>> My main concern is to expose a clear API and no String it everything
>>>>> but clear, it's simple yes but it's not the same things. When you
>>>>> provide String you don't have no idea what you are diffing exactly
>>>>> (could be characters, \n, words,  etc.) so having only one method with
>>>>> two strings is just very bad design.
>>>>>
>>>>> Also if you read my mail I did talked about String based APIs but as
>>>>> helpers and I'm would be surely -1 for any attempt to restrict the
>>>>> whole API to it. So the only question here is: is that really needed
>>>>> to expose String based helpers or not.
>>>>>
>>>>
>>>> No, I was never suggesting to drop the generic API, I was just saying that
>>>> the helpers might be a good idea since I imagine that String diff would
>>>> cover most of the usage of this API. Anyway, this is not important for now
>>>> since it is something that can be added later if API clients start
>>>> complaining :)
>>>
>>
>>> That's more or less what I was planning, I'm waiting for my first
>>> client report now, any news Marius ? ;)
>>
>> Yes. Works great! I rewrote my display-oriented diff builders to use
>> the new API. I have 3 remarks about the code:
>>
>> (1). The third parameter you pass to DiffManager when creating a diff,
>> DiffConfiguration, is a bit awkward. At first I though it was a class.
>> Then I looked for an implementation. Then I looked at the test and saw
>> that you pass null. I'm not convinced the configuration is very
>> useful. At least we could add a new signature without the
>> DiffConfiguration parameter. I'm thinking that we could remove it and
>> use instead a ConfigurationSource for global configuration.
>
> The DiffConfiguration and MergeConfiguration are more future stuff in
> which I forgot to put generic map for at least custom setup even if
> the current implementation does not really have much setup
> possibilities. I have some ideas of things to put in
> MergeConfiguration already (priority to current or next version in
> case of conflict, etc.) but did not had time to implement them already
> and DiffConfiguration is mostly here for consistency but I can remove
> it. null is simply supported as "I don't have any configuration".

Actually thoses are not supposed to be interfaces. That's a mistake, I
skipped this part of your question.

>
>>
>> (2) I don't understand what getCurrentMergeResult has to do with
>> MergeConfiguration. I haven't done any merge yet, I just saw this
>> method while looking for a diff configuration implementation and it
>> strike me.
>
> This was actually mostly to indicate to the implementation a kind of
> top logqueue to update along with the current mergeresult. I forgot to
> removed it since I planned to let the API client copy the log from the
> returned merge result if needed intead.
>
>>
>> (3) I think that getUnifiedDiff could be moved outside of DiffResult.
>> I haven't use it since I have my own display-oriented builders (to
>> help me display a diff), but I think it's too specific to be placed
>> inside the DiffResult interface.
>
> It's not really specific IMO, it's just one way to represent a diff
> between two versions. The idea is to provide a bunch of diff
> representations in the DiffResult that the implementation is creating
> the way it fit the best for it. We can imagine some library which
> actually create a unified diff (JDiff do it that way for example) from
> which you would create a lighter patch oriented diff.
>
>>
>> Thanks,
>> Marius
>>
>>>
>>>>
>>>> Thanks,
>>>> Eduard
>>>>
>>>> ----------
>>>> [1] https://github.com/xwiki/xwiki-commons/pull/2/files#r900063
>>>>
>>>>
>>>>> >
>>>>> > Thanks,
>>>>> > Eduard
>>>>> >
>>>>> > ----------
>>>>> > [1] https://github.com/xwiki/xwiki-commons/pull/2/files#L27R58
>>>>> >
>>>>> > On Wed, May 30, 2012 at 3:32 PM, Vincent Massol <[email protected]>
>>>>> wrote:
>>>>> >
>>>>> >>
>>>>> >> On May 30, 2012, at 2:28 PM, Vincent Massol wrote:
>>>>> >>
>>>>> >> >
>>>>> >> > On May 30, 2012, at 2:18 PM, Eduard Moraru wrote:
>>>>> >> >
>>>>> >> >> Hi Thomas,
>>>>> >> >>
>>>>> >> >> On Tue, May 29, 2012 at 5:07 PM, Thomas Mortagne
>>>>> >> >> <[email protected]>wrote:
>>>>> >> >>
>>>>> >> >>> Hi devs,
>>>>> >> >>>
>>>>> >> >>> As I said in another mail I'm working on a diff/merge module to use
>>>>> in
>>>>> >> >>> XWiki, the first target being Extension Manager and document 
>>>>> >> >>> history
>>>>> >> >>> (since both are going to use the same code, see Marius mails).
>>>>> >> >>>
>>>>> >> >>> You can see the detail on
>>>>> >> https://github.com/xwiki/xwiki-commons/pull/2.
>>>>> >> >>>
>>>>> >> >>> TODO/QUESTIONS:
>>>>> >> >>> * improve the generic 3 ways merge to be at least as good as the
>>>>> >> >>> List<String> 3 ways merge and get rid of JDiff
>>>>> >> >>> * not sure where/if I should put String related helpers (things 
>>>>> >> >>> that
>>>>> >> >>> do a diff on two String instead of having to cut List<String> or
>>>>> >> >>> List<Character> and call the diff API etc.)
>>>>> >> >>>
>>>>> >> >>
>>>>> >> >> This looks a bit awkward to use, specially from (but not limited to)
>>>>> >> >> Velocity. When I think of a diff service API, I imagine passing
>>>>> Strings,
>>>>> >> >> not lists of composing strings or list of characters.
>>>>> >> >
>>>>> >> > Thomas is proposing a Java API here AFAIK. For Velocity we never
>>>>> expose
>>>>> >> java API directly;  we use Script Services for that.
>>>>> >>
>>>>> >> Sorry, just realized you wrote "but not limited to" ;)
>>>>> >>
>>>>> >> I'll let Thomas reply since I don't know this diff api yet….
>>>>> >>
>>>>> >> Sorry for the noise
>>>>> >> -Vincent
>>>>> >>
>>>>> >> >
>>>>> >> > Thanks
>>>>> >> > -Vincent
>>>>> >> >
>>>>> >> > PS: FTR I'm a big -1 to model our Java APIs to be easily usable from
>>>>> >> Velocity since that means having suboptimal APIs for the wrong reason 
>>>>> >> ;)
>>>>> >> >
>>>>> >> >> Also, I don`t quite understand the List<String> approach. I can
>>>>> imagine
>>>>> >> the
>>>>> >> >> List<Character> version by breaking a string into characters, but
>>>>> what
>>>>> >> >> would you do for List<String>? You would split a String using "\s"
>>>>> as a
>>>>> >> >> separator?
>>>>> >> >>
>>>>> >> >> Can you please mention a use case where a list oriented API is 
>>>>> >> >> better
>>>>> >> than
>>>>> >> >> a string based one?
>>>>> >> >>
>>>>> >> >> Thanks,
>>>>> >> >> Eduard
>>>>> >> >>
>>>>> >> >>>
>>>>> >> >>> I'm ready to merge it into master so I'm waiting your vote.
>>>>> >> >>>
>>>>> >> >>> Caleb is it OK to put new stuff in master already or should I wait
>>>>> the
>>>>> >> >>> complete release to be done ?
>>>>> >> >>>
>>>>> >> >>> Here is my +1.
>>>>> >> >>>
>>>>> >> >>> Thanks,
>>>>> >> >>> --
>>>>> >> >>> Thomas Mortagne
>>>>> >>
>>>>> >> _______________________________________________
>>>>> >> devs mailing list
>>>>> >> [email protected]
>>>>> >> http://lists.xwiki.org/mailman/listinfo/devs
>>>>> >>
>>>>> > _______________________________________________
>>>>> > devs mailing list
>>>>> > [email protected]
>>>>> > http://lists.xwiki.org/mailman/listinfo/devs
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Thomas Mortagne
>>>>> _______________________________________________
>>>>> devs mailing list
>>>>> [email protected]
>>>>> http://lists.xwiki.org/mailman/listinfo/devs
>>>>>
>>>> _______________________________________________
>>>> devs mailing list
>>>> [email protected]
>>>> http://lists.xwiki.org/mailman/listinfo/devs
>>>
>>>
>>>
>>> --
>>> Thomas Mortagne
>>> _______________________________________________
>>> devs mailing list
>>> [email protected]
>>> http://lists.xwiki.org/mailman/listinfo/devs
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>
>
>
> --
> Thomas Mortagne



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to