Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-10-18 07:00:57 +0000
committerEike Stepper2016-10-18 07:00:57 +0000
commit0140fb258a1ff10a3541c0eb74052544c591535a (patch)
tree762a6a3a0884d54e0cd117ee0c3f06af98607e3f /plugins/org.eclipse.emf.cdo.server.net4j/src
parenta943f1e5d33242507402c206faca2bdb1eeba569 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadChangeSetsIndication.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadCommitInfosIndication.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java44
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadObjectLifetimeIndication.java12
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);
}
}

Back to the top