> * when updating, jackrabbit at least is using this version history to
>> destroy as little information as possible. so if a field was updated in
>> the updating workspace but not in the one we update from, the changed
>> field is kept.
> 
> I'm not sure if I understand this. Presumably for non-versionable nodes,
> this simply doesn't apply. For versionable nodes, are you saying the update
> operation looks at the version history and doesn't just compare the base
> nodes in both workspaces?
> 
> Imagine this scenario:
> 
> - Create a (mix:referenceable, mix:versionable) Node N in workspace A
> - Create a new version of N (checkin), so you have version 1.1 and the base
> version (I think we can ignore the root version)
(yep, root version has no properties anyways)
> - Clone N into workspace B, giving a node N' in that workspace
>   (look at the version history for either N or N', and you'll see the same
> original version 1.1)
> - Change a property of N, change the same property of N' to a different
> value
> - Now try to update N' with the changes from N... what happens?
> 
> That last part is what I don't understand. I haven't tested it, but I
> thought that the changes from N would overwrite any changes in N'. Are you
> saying that actually the version history is used somehow?

not sure how "conflicts" are handled. but what would be handled
correctly is if after cloning i do N.b = "y" then N.b would not be
overwritten on update N from N'. without versioning, JCR would have no
clue which would be newer if N'.b and N.b are different.

> * jackrabbit currently checks children if they are mix:versionable and
>> if so, skips them. so you could model your content as versionable for
>> things that you do want to synchronize separately.
>> it should be mix:simpleVersionable instead of mix:versionable, i think
>> jukka created a patch for that, but this will at best come in the next
>> 2.6 release. i *think* phpcr-odm is currently using
>> mix:simpleVersionable, but i could be wrong here.
> 
> Do you mean that Jackrabbit skips mix:versionable nodes when performing an
> update? Suppose I have nodes like this, where * means the node is
> versionable:
> 
> /page*
> /page/block-1
> /page/block-2
> /page/sub-page*
> /page/sub-page/block-1
> /page/sub-page/block-2
> 
> If I update "/page" from workspace A to workspace B, then should only the
> following nodes be updated?
> 
> /page*
> /page/block-1
> /page/block-2
> 
> I have tried testing this using the phpcr-api-tests suite, with
> mix:versionable and mix:simpleVersionable, and in both cases any changes to
> "/page/sub-page" are copied across when I update "/page".

note that simpleVersionable is not identical to versionable. jackrabbit
has (or at least had until and including 2.6.0) the bug that it only
skips mix:versionable but not mix:simpleVersionable.

but what you describe is what i would expect from how jukka explained it
to me, yes.

cheers,david
-- 
Liip AG // Agile Web Development // T +41 26 422 25 11
CH-1700 Fribourg // PGP 0xA581808B // www.liip.ch

Reply via email to