diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java | 65 |
1 files changed, 47 insertions, 18 deletions
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 ac206016f6..ff6eaf4c69 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 @@ -18,6 +18,7 @@ import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.common.revision.CDORevisionKey; import org.eclipse.emf.cdo.common.revision.CDORevisionUtil; +import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil; import org.eclipse.emf.cdo.spi.common.commit.CDORevisionAvailabilityInfo; import org.eclipse.emf.cdo.spi.server.InternalRepository; @@ -34,8 +35,6 @@ import java.util.Set; */ public class LoadMergeDataIndication extends CDOServerReadIndicationWithMonitoring { - private int infos; - private CDORevisionAvailabilityInfo targetInfo; private CDORevisionAvailabilityInfo sourceInfo; @@ -44,6 +43,10 @@ public class LoadMergeDataIndication extends CDOServerReadIndicationWithMonitori private CDORevisionAvailabilityInfo sourceBaseInfo; + private int infos; + + private boolean auto; + public LoadMergeDataIndication(CDOServerProtocol protocol) { super(protocol, CDOProtocolConstants.SIGNAL_LOAD_MERGE_DATA); @@ -85,27 +88,33 @@ public class LoadMergeDataIndication extends CDOServerReadIndicationWithMonitori private CDORevisionAvailabilityInfo readRevisionAvailabilityInfo(CDODataInput in, OMMonitor monitor) throws IOException { - CDOBranchPoint branchPoint = in.readCDOBranchPoint(); - CDORevisionAvailabilityInfo info = new CDORevisionAvailabilityInfo(branchPoint); + if (in.readBoolean()) + { + CDOBranchPoint branchPoint = in.readCDOBranchPoint(); + CDORevisionAvailabilityInfo info = new CDORevisionAvailabilityInfo(branchPoint); - int size = in.readInt(); - monitor.begin(size); + int size = in.readInt(); + monitor.begin(size); - try - { - for (int i = 0; i < size; i++) + try { - CDOID id = in.readCDOID(); - info.getAvailableRevisions().put(id, null); - monitor.worked(); - } + for (int i = 0; i < size; i++) + { + CDOID id = in.readCDOID(); + info.getAvailableRevisions().put(id, null); + monitor.worked(); + } - return info; - } - finally - { - monitor.done(); + return info; + } + finally + { + monitor.done(); + } } + + auto = true; + return new CDORevisionAvailabilityInfo(CDOBranchUtil.AUTO_BRANCH_POINT); } @Override @@ -115,6 +124,11 @@ 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()); @@ -126,6 +140,21 @@ public class LoadMergeDataIndication extends CDOServerReadIndicationWithMonitori monitor.worked(); + if (auto) + { + out.writeCDOBranchPoint(targetBaseInfo.getBranchPoint()); + if (targetBaseInfo.getBranchPoint().equals(sourceBaseInfo.getBranchPoint())) + { + out.writeBoolean(false); + infos = 3; + } + else + { + out.writeBoolean(true); + out.writeCDOBranchPoint(sourceBaseInfo.getBranchPoint()); + } + } + Set<CDORevisionKey> writtenRevisions = new HashSet<CDORevisionKey>(); writeRevisionAvailabilityInfo(out, targetInfo, writtenRevisions, monitor.fork()); writeRevisionAvailabilityInfo(out, sourceInfo, writtenRevisions, monitor.fork()); |