On Thu, Jan 26, 2012 at 4:56 PM, Michael Dürig <mdue...@apache.org> wrote: > > Thanks for clarifying. > > To summarize (if I got it right) the revision parameter specifies the base > revision for a three way merge of the transient changes into the current > head revision.
correct > > So this can actually be used to implement 1) (see > http://markmail.org/message/e2ipk54t2bhrepab) right? yes cheers stefan > > Michael > > > On 26.1.12 14:31, Stefan Guggisberg wrote: >> >> On Wed, Jan 25, 2012 at 5:40 PM, Michael Dürig<mic...@gmail.com> wrote: >>> >>> >>> Hi, >>> >>> Microkernel.commit() has a revisionId parameter. Could someone (Stefan?) >>> clarify the semantics of this parameter? The Javadoc only says "revision >>> the >>> changes are based on". But it fails to explain the actual effect of that >>> parameter. >> >> >> the revisionId parameter of the commit method provides the >> context of the changes specified by the jsonDiff parameter. >> >> while it's true that all changes are always applied on the >> current HEAD revision, the 'baseRevision' of a commit allows >> for smarter 3-way merges/conflict resolutions. >> >> an example: >> >> assume a node /foo exists in rev0 of the tree and >> sessions s1 and s2 are both based on rev0. >> >> now s1 moves /foo to /bar while s2 sets a property on /foo : >> >> // s1 >> mk.commit("/", ">\"foo\": \"bar\"", rev0, ""); >> // s2 >> mk.commit("/", "^\"foo/prop\" : \"blah\"", rev0, ""); >> >> knowing the context of the commit (-> rev0) allows the >> 2nd commit to apply the property modification on /bar >> instead of throwing a "path not found: /foo" exception. >> >> please note that this specific use case is currently not >> yet implemented in MicroKernelImpl. >> >> cheers >> stefan >> >>> >>> Michael