diff options
author | Eike Stepper | 2016-10-18 07:00:57 +0000 |
---|---|---|
committer | Eike Stepper | 2016-10-18 07:00:57 +0000 |
commit | 0140fb258a1ff10a3541c0eb74052544c591535a (patch) | |
tree | 762a6a3a0884d54e0cd117ee0c3f06af98607e3f /plugins/org.eclipse.emf.cdo.server.net4j/src | |
parent | a943f1e5d33242507402c206faca2bdb1eeba569 (diff) | |
download | cdo-0140fb258a1ff10a3541c0eb74052544c591535a.tar.gz cdo-0140fb258a1ff10a3541c0eb74052544c591535a.tar.xz cdo-0140fb258a1ff10a3541c0eb74052544c591535a.zip |
[505654] Support automatic remerging / multiple merges from the same branch
https://bugs.eclipse.org/bugs/show_bug.cgi?id=505654
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.net4j/src')
5 files changed, 43 insertions, 34 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java index a5890bb186..78d7eadfde 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java @@ -31,6 +31,7 @@ import org.eclipse.emf.cdo.etypes.EtypesPackage; import org.eclipse.emf.cdo.server.IPermissionManager; import org.eclipse.emf.cdo.server.IView; import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM; +import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; @@ -128,7 +129,7 @@ public class CommitTransactionIndication extends CDOServerIndicationWithMonitori long lastUpdateTime = in.readLong(); int commitNumber = in.readInt(); String commitComment = in.readString(); - CDOBranchPoint commitMergeSource = in.readBoolean() ? in.readCDOBranchPoint() : null; + CDOBranchPoint commitMergeSource = CDOBranchUtil.readBranchPointOrNull(in); CDOLockState[] locksOnNewObjects = new CDOLockState[in.readInt()]; CDOID[] idsToUnlock = new CDOID[in.readInt()]; diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChangeSetsIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChangeSetsIndication.java index 4e6bf5ec25..8e1640c1ba 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChangeSetsIndication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChangeSetsIndication.java @@ -40,9 +40,7 @@ public class LoadChangeSetsIndication extends CDOServerReadIndication ranges = new CDOBranchPointRange[size]; for (int i = 0; i < ranges.length; i++) { - CDOBranchPoint startPoint = in.readCDOBranchPoint(); - CDOBranchPoint endPoint = in.readCDOBranchPoint(); - ranges[i] = CDOBranchUtil.createRange(startPoint, endPoint); + ranges[i] = CDOBranchUtil.readRange(in); } } diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadCommitInfosIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadCommitInfosIndication.java index cc3cca4bcd..21fe25e028 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadCommitInfosIndication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadCommitInfosIndication.java @@ -11,12 +11,12 @@ package org.eclipse.emf.cdo.server.internal.net4j.protocol; import org.eclipse.emf.cdo.common.branch.CDOBranch; -import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler; import org.eclipse.emf.cdo.common.protocol.CDODataInput; import org.eclipse.emf.cdo.common.protocol.CDODataOutput; import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; +import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil; import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager; import org.eclipse.net4j.util.WrappedException; @@ -69,17 +69,7 @@ public class LoadCommitInfosIndication extends CDOServerReadIndication out.writeLong(commitInfo.getTimeStamp()); out.writeString(commitInfo.getUserID()); out.writeString(commitInfo.getComment()); - - CDOBranchPoint mergeSource = commitInfo.getMergeSource(); - if (mergeSource != null) - { - out.writeBoolean(true); - out.writeCDOBranchPoint(mergeSource); - } - else - { - out.writeBoolean(false); - } + CDOBranchUtil.writeBranchPointOrNull(out, commitInfo.getMergeSource()); } catch (IOException ex) { diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java index ff6eaf4c69..dd1ca82a71 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java @@ -24,6 +24,8 @@ import org.eclipse.emf.cdo.spi.server.InternalRepository; import org.eclipse.net4j.util.om.monitor.OMMonitor; +import org.eclipse.emf.spi.cdo.CDOSessionProtocol.MergeDataResult; + import java.io.IOException; import java.util.Collection; import java.util.HashSet; @@ -124,20 +126,44 @@ public class LoadMergeDataIndication extends CDOServerReadIndicationWithMonitori try { - // if (auto) - // { - // sourceBaseInfo = new CDORevisionAvailabilityInfo(CDOBranchUtil.AUTO_BRANCH_POINT); - // } - InternalRepository repository = getRepository(); - Set<CDOID> ids = repository.getMergeData(targetInfo, sourceInfo, targetBaseInfo, sourceBaseInfo, monitor.fork()); + MergeDataResult result = repository.getMergeData2(targetInfo, sourceInfo, targetBaseInfo, sourceBaseInfo, + monitor.fork()); + + Set<CDOID> targetIDs = result.getTargetIDs(); + Set<CDOID> targetAndSourceIDs = new HashSet<CDOID>(); + Set<CDOID> sourceIDs = result.getSourceIDs(); + + // Write IDs of objects that are changed only in target. + for (CDOID id : targetIDs) + { + if (sourceIDs.remove(id)) + { + targetAndSourceIDs.add(id); + } + else + { + out.writeCDOID(id); + } + } + + out.writeCDOID(null); - out.writeInt(ids.size()); - for (CDOID id : ids) + // Write IDs of objects that are changed in both target and source. + for (CDOID id : targetAndSourceIDs) { out.writeCDOID(id); } + out.writeCDOID(null); + + // Write IDs of objects that are changed only in source. + for (CDOID id : sourceIDs) + { + out.writeCDOID(id); + } + + out.writeCDOID(null); monitor.worked(); if (auto) @@ -168,6 +194,8 @@ public class LoadMergeDataIndication extends CDOServerReadIndicationWithMonitori { writeRevisionAvailabilityInfo(out, sourceBaseInfo, writtenRevisions, monitor.fork()); } + + CDOBranchUtil.writeBranchPointOrNull(out, result.getResultBase()); } finally { diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadObjectLifetimeIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadObjectLifetimeIndication.java index c1fd4d3135..9fbf2966b5 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadObjectLifetimeIndication.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadObjectLifetimeIndication.java @@ -17,6 +17,7 @@ import org.eclipse.emf.cdo.common.protocol.CDODataInput; import org.eclipse.emf.cdo.common.protocol.CDODataOutput; import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM; +import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager; import org.eclipse.net4j.util.om.trace.ContextTracer; @@ -60,15 +61,6 @@ public class LoadObjectLifetimeIndication extends CDOServerReadIndication { InternalCDORevisionManager revisionManager = getRepository().getRevisionManager(); CDOBranchPointRange range = revisionManager.getObjectLifetime(id, branchPoint); - if (range != null) - { - out.writeBoolean(true); - out.writeCDOBranchPoint(range.getStartPoint()); - out.writeCDOBranchPoint(range.getEndPoint()); - } - else - { - out.writeBoolean(false); - } + CDOBranchUtil.writeRangeOrNull(out, range); } } |