Class DefaultCDOMerger
- All Implemented Interfaces:
CDOMerger,CDOMergerBaseAware
- Direct Known Subclasses:
DefaultCDOMerger.PerFeature
The first (target) change set describes the current branch or transaction into which the result will be
applied. In CDOMergingConflictResolver this is the local transaction history. The second (source)
change set describes the branch or repository history being merged.
Ordinary conflict-resolution histories share one start state. Automatic branch remerge can instead select different
source and target bases. The branch transaction path therefore supplies both original base providers plus the actual
result base. The semantic many-valued merger preserves that causal asymmetry so occurrences absent from one side's
base are treated as unobserved rather than synthesized as removals. The richer branch/remerge entry point also
normalizes every returned NEW, CHANGED, and DETACHED goal to the selected result base;
CDOTransactionImpl.applyChangeSet() subsequently reconciles that goal with the actual target state.
CDO's internal producers retain the revision providers needed by the semantic many-valued merger. That richer call-local context provides full base values to distinguish equal list occurrences and the base set-state of unsettable features without storing repository/session state on this reusable merger instance.
- Since:
- 3.0
- Author:
- Eike Stepper
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classIf the meaning of this type isn't clear, there really should be more of a description here...static classIf the meaning of this type isn't clear, there really should be more of a description here...static classIf the meaning of this type isn't clear, there really should be more of a description here...static classIf the meaning of this type isn't clear, there really should be more of a description here...static classIf the meaning of this type isn't clear, there really should be more of a description here...static enumEnumerates the possible resolution preferences that can be used with aDefaultCDOMerger.Nested classes/interfaces inherited from interface org.eclipse.emf.cdo.transaction.CDOMerger
CDOMerger.ConflictException -
Constructor Summary
ConstructorsConstructorDescriptionDefaultCDOMerger(CDOCommonRepository.ListOrdering listOrdering) DefaultCDOMerger(DefaultCDOMerger.ResolutionPreference resolutionPreference) DefaultCDOMerger(DefaultCDOMerger.ResolutionPreference resolutionPreference, CDOCommonRepository.ListOrdering listOrdering) -
Method Summary
Modifier and TypeMethodDescriptionprotected ObjectaddedInSource(CDORevision revision) protected ObjectaddedInSourceAndTarget(CDORevision targetRevision, CDORevision sourceRevision) protected ObjectaddedInTarget(CDORevision revision) protected ObjectchangedInSource(CDORevisionDelta delta) protected ObjectchangedInSource(CDORevisionDelta delta, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision, CDORevision sourceEndRevision) Resolves a one-sided source change as a goal relative to the actual result base.protected ObjectchangedInSourceAndDetachedInTarget(CDORevisionDelta sourceDelta) protected ObjectchangedInSourceAndDetachedInTarget(CDORevisionDelta sourceDelta, CDORevision resultBaseRevision, CDORevision sourceBaseRevision, CDORevision sourceEndRevision) Resolves source-change versus target-detach as a result-base-relative goal.protected ObjectchangedInSourceAndTarget(CDORevisionDelta targetDelta, CDORevisionDelta sourceDelta) protected ObjectchangedInSourceAndTarget(CDORevisionDelta targetDelta, CDORevisionDelta sourceDelta, CDORevision ancestorRevision) Resolves concurrent revision changes with an optional full common-ancestor revision.protected ObjectchangedInSourceAndTarget(CDORevisionDelta targetDelta, CDORevisionDelta sourceDelta, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision) Resolves concurrent revision changes with explicit asymmetric branch/remerge base revisions.protected ObjectchangedInTarget(CDORevisionDelta delta) protected ObjectchangedInTarget(CDORevisionDelta delta, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision, CDORevision targetEndRevision) Resolves a one-sided target change as a goal relative to the actual result base.protected ObjectchangedInTargetAndDetachedInSource(CDORevisionDelta targetDelta) protected ObjectchangedInTargetAndDetachedInSource(CDORevisionDelta targetDelta, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision targetEndRevision) Resolves target-change versus source-detach as a result-base-relative goal.protected Objectprotected Objectprotected Objectprotected booleanprotected booleanmerge(Object targetData, Object sourceData, CDORevision ancestorRevision) Merges the data for one object with the full common-ancestor revision when the producing call path retained it.protected booleanmerge(Object targetData, Object sourceData, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision) Merges one object's data with the result, target, and source base revisions needed by asymmetric branch remerge.protected booleanmerge(Object targetData, Object sourceData, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision, CDORevision targetEndRevision, CDORevision sourceEndRevision) Merges one object's data while keeping every returned goal relative toresultBaseRevision.merge(CDOChangeSet target, CDOChangeSet source) Calculates the changes between a sourcechange setand a targetchange setand returns the result relative to their common ancestor.merge(CDOChangeSet target, CDOChangeSet source, CDORevisionProvider targetBaseProvider, CDORevisionProvider sourceBaseProvider, CDORevisionProvider resultBaseProvider) Merges branch/remerge change sets while preserving their independently selected source and target bases.
-
Constructor Details
-
DefaultCDOMerger
public DefaultCDOMerger() -
DefaultCDOMerger
- Since:
- 4.6
-
DefaultCDOMerger
- Since:
- 4.2
-
DefaultCDOMerger
public DefaultCDOMerger(DefaultCDOMerger.ResolutionPreference resolutionPreference, CDOCommonRepository.ListOrdering listOrdering) - Since:
- 4.6
-
-
Method Details
-
getResolutionPreference
- Since:
- 4.2
-
getListOrdering
- Since:
- 4.6
-
getResult
-
getConflicts
-
merge
public CDOChangeSetData merge(CDOChangeSet target, CDOChangeSet source) throws CDOMerger.ConflictException Description copied from interface:CDOMergerCalculates the changes between a sourcechange setand a targetchange setand returns the result relative to their common ancestor.- Specified by:
mergein interfaceCDOMerger- Throws:
CDOMerger.ConflictException
-
merge
public CDOChangeSetData merge(CDOChangeSet target, CDOChangeSet source, CDORevisionProvider targetBaseProvider, CDORevisionProvider sourceBaseProvider, CDORevisionProvider resultBaseProvider) throws CDOMerger.ConflictException Merges branch/remerge change sets while preserving their independently selected source and target bases.Automatic remerge can legitimately produce list histories with different origin sizes because each history starts at the base that side actually observed. Reconstructing endpoint snapshots relative to the result base would turn an occurrence that one side never observed into a synthetic REMOVE. Instead the original executable histories are retained and the three base providers are propagated to the semantic many-valued merger.
The ordinary two-argument
merge(CDOChangeSet, CDOChangeSet)contract is retained for callers whose two change sets already share their merge base.- Specified by:
mergein interfaceCDOMergerBaseAware- Parameters:
target- the target change set selected by the branch merge calculation.source- the source change set selected by the branch merge calculation.targetBaseProvider- the revision state from whichtargetstarts.sourceBaseProvider- the revision state from whichsourcestarts.resultBaseProvider- the revision state relative to which every returned NEW, CHANGED, or DETACHED goal is defined.- Returns:
- the merged change-set data relative to
resultBaseProvider. - Throws:
CDOMerger.ConflictException- if the configured merger semantics cannot resolve all conflicts.- Since:
- 4.30
-
merge
-
merge
Merges the data for one object with the full common-ancestor revision when the producing call path retained it. The extra revision is an internal execution context; it does not widen the publicCDOMergercontract.- Since:
- 4.30
-
merge
protected boolean merge(Object targetData, Object sourceData, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision) Merges one object's data with the result, target, and source base revisions needed by asymmetric branch remerge. Existing extenders remain on the common-ancestor overload unless they explicitly consume the richer context.- Since:
- 4.30
-
merge
protected boolean merge(Object targetData, Object sourceData, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision, CDORevision targetEndRevision, CDORevision sourceEndRevision) Merges one object's data while keeping every returned goal relative toresultBaseRevision. NEW and DETACHED classifications are first normalized to that base. CHANGED histories keep their own causal bases so semantic list merging does not lose unobserved-occurrence information.- Since:
- 4.30
-
addedInTarget
-
addedInSource
-
addedInSourceAndTarget
-
changedInTarget
-
detachedInTarget
-
changedInTarget
protected Object changedInTarget(CDORevisionDelta delta, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision, CDORevision targetEndRevision) Resolves a one-sided target change as a goal relative to the actual result base.The base implementation treats the selected target endpoint as the complete object-level goal.
DefaultCDOMerger.PerFeaturerefines this behavior so unchanged features stay unobserved and many-valued changes retain occurrence semantics.- Since:
- 4.30
-
changedInSource
-
changedInSource
protected Object changedInSource(CDORevisionDelta delta, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision, CDORevision sourceEndRevision) Resolves a one-sided source change as a goal relative to the actual result base.The base implementation treats the selected source endpoint as the complete object-level goal.
DefaultCDOMerger.PerFeaturerefines this behavior so unchanged features stay unobserved and many-valued changes retain occurrence semantics.- Since:
- 4.30
-
detachedInSource
-
detachedInSourceAndTarget
-
changedInSourceAndTarget
protected Object changedInSourceAndTarget(CDORevisionDelta targetDelta, CDORevisionDelta sourceDelta) -
changedInSourceAndTarget
protected Object changedInSourceAndTarget(CDORevisionDelta targetDelta, CDORevisionDelta sourceDelta, CDORevision ancestorRevision) Resolves concurrent revision changes with an optional full common-ancestor revision. Subclasses that need only deltas retain the established two-argument hook; semantic many-valued merging overrides this overload.- Since:
- 4.30
-
changedInSourceAndTarget
protected Object changedInSourceAndTarget(CDORevisionDelta targetDelta, CDORevisionDelta sourceDelta, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision sourceBaseRevision) Resolves concurrent revision changes with explicit asymmetric branch/remerge base revisions.- Since:
- 4.30
-
changedInSourceAndDetachedInTarget
-
changedInTargetAndDetachedInSource
-
changedInSourceAndDetachedInTarget
protected Object changedInSourceAndDetachedInTarget(CDORevisionDelta sourceDelta, CDORevision resultBaseRevision, CDORevision sourceBaseRevision, CDORevision sourceEndRevision) Resolves source-change versus target-detach as a result-base-relative goal.- Since:
- 4.30
-
changedInTargetAndDetachedInSource
protected Object changedInTargetAndDetachedInSource(CDORevisionDelta targetDelta, CDORevision resultBaseRevision, CDORevision targetBaseRevision, CDORevision targetEndRevision) Resolves target-change versus source-detach as a result-base-relative goal.- Since:
- 4.30
-
getTargetMap
-
getSourceMap
-