Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 185494 Details for
Bug 332672
Provide API to query the differences between branches
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Patch v2
clipboard.txt (text/plain), 28.86 KB, created by
Eike Stepper
on 2010-12-19 06:28:18 EST
(
hide
)
Description:
Patch v2
Filename:
MIME Type:
Creator:
Eike Stepper
Created:
2010-12-19 06:28:18 EST
Size:
28.86 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.emf.cdo >Index: src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java,v >retrieving revision 1.31 >diff -u -r1.31 CDOPushTransaction.java >--- src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java 11 Oct 2010 06:36:24 -0000 1.31 >+++ src/org/eclipse/emf/cdo/transaction/CDOPushTransaction.java 19 Dec 2010 11:28:00 -0000 >@@ -587,6 +587,14 @@ > return delegate.merge(source, merger); > } > >+ /** >+ * @since 4.0 >+ */ >+ public CDOChangeSetData compare(CDOBranchPoint source) >+ { >+ return delegate.compare(source); >+ } >+ > public CDOSavepoint setSavepoint() > { > return delegate.setSavepoint(); >Index: src/org/eclipse/emf/cdo/view/CDOView.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOView.java,v >retrieving revision 1.23 >diff -u -r1.23 CDOView.java >--- src/org/eclipse/emf/cdo/view/CDOView.java 9 Oct 2010 07:33:22 -0000 1.23 >+++ src/org/eclipse/emf/cdo/view/CDOView.java 19 Dec 2010 11:28:01 -0000 >@@ -20,6 +20,7 @@ > import org.eclipse.emf.cdo.common.CDOCommonView; > import org.eclipse.emf.cdo.common.branch.CDOBranch; > import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; >+import org.eclipse.emf.cdo.common.commit.CDOChangeSetData; > import org.eclipse.emf.cdo.common.id.CDOID; > import org.eclipse.emf.cdo.common.revision.CDORevision; > import org.eclipse.emf.cdo.eresource.CDOResource; >@@ -381,6 +382,11 @@ > public CDOQuery createQuery(String language, String queryString, Object context); > > /** >+ * @since 4.0 >+ */ >+ public CDOChangeSetData compare(CDOBranchPoint source); >+ >+ /** > * @since 2.0 > */ > public Options options(); >Index: src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java,v >retrieving revision 1.3 >diff -u -r1.3 DelegatingSessionProtocol.java >--- src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java 18 Nov 2010 08:10:05 -0000 1.3 >+++ src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java 19 Dec 2010 11:28:01 -0000 >@@ -745,15 +745,15 @@ > } > } > >- public Set<CDOID> loadMergeData(CDORevisionAvailabilityInfo ancestorInfo, CDORevisionAvailabilityInfo targetInfo, >- CDORevisionAvailabilityInfo sourceInfo) >+ public Set<CDOID> loadMergeData(CDORevisionAvailabilityInfo targetInfo, CDORevisionAvailabilityInfo sourceInfo, >+ CDORevisionAvailabilityInfo targetBaseInfo, CDORevisionAvailabilityInfo sourceBaseInfo) > { > int attempt = 0; > for (;;) > { > try > { >- return delegate.loadMergeData(ancestorInfo, targetInfo, sourceInfo); >+ return delegate.loadMergeData(targetInfo, sourceInfo, targetBaseInfo, sourceBaseInfo); > } > catch (Exception ex) > { >Index: src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java,v >retrieving revision 1.119 >diff -u -r1.119 CDOTransactionImpl.java >--- src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java 13 Dec 2010 11:31:23 -0000 1.119 >+++ src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java 19 Dec 2010 11:28:02 -0000 >@@ -65,12 +65,8 @@ > import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager; > import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit; > import org.eclipse.emf.cdo.spi.common.revision.CDOIDMapper; >-import org.eclipse.emf.cdo.spi.common.revision.DetachedCDORevision; > import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; >-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache; > import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta; >-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager; >-import org.eclipse.emf.cdo.spi.common.revision.PointerCDORevision; > import org.eclipse.emf.cdo.transaction.CDOCommitContext; > import org.eclipse.emf.cdo.transaction.CDOConflictResolver; > import org.eclipse.emf.cdo.transaction.CDOConflictResolver2; >@@ -401,10 +397,9 @@ > long now = getLastUpdateTime(); > CDOBranchPoint target = getBranch().getPoint(now); > >- CDOBranch sourceBranch = source.getBranch(); > if (source.getTimeStamp() == CDOBranchPoint.UNSPECIFIED_DATE) > { >- source = sourceBranch.getPoint(now); >+ source = source.getBranch().getPoint(now); > } > > if (CDOBranchUtil.isContainedBy(source, target)) >@@ -419,11 +414,11 @@ > CDORevisionAvailabilityInfo sourceInfo = createRevisionAvailabilityInfo(source); > > CDOSessionProtocol sessionProtocol = session.getSessionProtocol(); >- Set<CDOID> ids = sessionProtocol.loadMergeData(ancestorInfo, targetInfo, sourceInfo); >+ Set<CDOID> ids = sessionProtocol.loadMergeData(targetInfo, sourceInfo, ancestorInfo, null); > >- cacheRevisions(ancestorInfo); > cacheRevisions(targetInfo); > cacheRevisions(sourceInfo); >+ cacheRevisions(ancestorInfo); > > CDOChangeSet targetChanges = createChangeSet(ids, ancestorInfo, targetInfo); > CDOChangeSet sourceChanges = createChangeSet(ids, ancestorInfo, sourceInfo); >@@ -438,64 +433,6 @@ > } > } > >- private CDORevisionAvailabilityInfo createRevisionAvailabilityInfo(CDOBranchPoint branchPoint) >- { >- CDORevisionAvailabilityInfo info = new CDORevisionAvailabilityInfo(branchPoint); >- >- InternalCDORevisionManager revisionManager = getSession().getRevisionManager(); >- InternalCDORevisionCache cache = revisionManager.getCache(); >- >- List<CDORevision> revisions = cache.getRevisions(branchPoint); >- for (CDORevision revision : revisions) >- { >- if (revision instanceof PointerCDORevision) >- { >- PointerCDORevision pointer = (PointerCDORevision)revision; >- CDOBranchVersion target = pointer.getTarget(); >- if (target != null) >- { >- revision = cache.getRevisionByVersion(pointer.getID(), target); >- } >- } >- else if (revision instanceof DetachedCDORevision) >- { >- revision = null; >- } >- >- if (revision != null) >- { >- info.addRevision(revision); >- } >- } >- >- return info; >- } >- >- private void cacheRevisions(CDORevisionAvailabilityInfo info) >- { >- InternalCDORevisionManager revisionManager = getSession().getRevisionManager(); >- CDOBranch branch = info.getBranchPoint().getBranch(); >- for (CDORevisionKey key : info.getAvailableRevisions().values()) >- { >- CDORevision revision = (CDORevision)key; >- revisionManager.addRevision(revision); >- >- if (!ObjectUtil.equals(revision.getBranch(), branch)) >- { >- CDOID id = revision.getID(); >- CDORevision firstRevision = revisionManager.getCache().getRevisionByVersion(id, >- branch.getVersion(CDOBranchVersion.FIRST_VERSION)); >- if (firstRevision != null) >- { >- long revised = firstRevision.getTimeStamp() - 1L; >- CDOBranchVersion target = CDOBranchUtil.copyBranchVersion(revision); >- PointerCDORevision pointer = new PointerCDORevision(revision.getEClass(), id, branch, revised, target); >- revisionManager.addRevision(pointer); >- } >- } >- } >- } >- > private CDOChangeSet createChangeSet(Set<CDOID> ids, CDORevisionAvailabilityInfo startInfo, > CDORevisionAvailabilityInfo endInfo) > { >Index: src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java,v >retrieving revision 1.9 >diff -u -r1.9 AbstractCDOView.java >--- src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java 28 Nov 2010 17:54:26 -0000 1.9 >+++ src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java 19 Dec 2010 11:28:02 -0000 >@@ -17,6 +17,8 @@ > import org.eclipse.emf.cdo.CDOState; > import org.eclipse.emf.cdo.common.branch.CDOBranch; > import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; >+import org.eclipse.emf.cdo.common.branch.CDOBranchVersion; >+import org.eclipse.emf.cdo.common.commit.CDOChangeSetData; > import org.eclipse.emf.cdo.common.id.CDOID; > import org.eclipse.emf.cdo.common.id.CDOIDAndVersion; > import org.eclipse.emf.cdo.common.id.CDOIDMeta; >@@ -27,6 +29,7 @@ > import org.eclipse.emf.cdo.common.revision.CDORevision; > import org.eclipse.emf.cdo.common.revision.CDORevisionKey; > import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; >+import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDeltaUtil; > import org.eclipse.emf.cdo.common.util.CDOException; > import org.eclipse.emf.cdo.eresource.CDOResource; > import org.eclipse.emf.cdo.eresource.CDOResourceFolder; >@@ -35,8 +38,13 @@ > import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl; > import org.eclipse.emf.cdo.internal.common.revision.delta.CDORevisionDeltaImpl; > import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil; >+import org.eclipse.emf.cdo.spi.common.commit.CDORevisionAvailabilityInfo; > import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry; >+import org.eclipse.emf.cdo.spi.common.revision.DetachedCDORevision; > import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; >+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache; >+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager; >+import org.eclipse.emf.cdo.spi.common.revision.PointerCDORevision; > import org.eclipse.emf.cdo.transaction.CDOTransaction; > import org.eclipse.emf.cdo.util.CDOURIUtil; > import org.eclipse.emf.cdo.util.CDOUtil; >@@ -60,6 +68,7 @@ > import org.eclipse.emf.internal.cdo.query.CDOQueryImpl; > > import org.eclipse.net4j.util.ImplementationError; >+import org.eclipse.net4j.util.ObjectUtil; > import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump; > import org.eclipse.net4j.util.StringUtil; > import org.eclipse.net4j.util.collection.CloseableIterator; >@@ -80,6 +89,7 @@ > import org.eclipse.emf.ecore.resource.Resource; > import org.eclipse.emf.ecore.resource.ResourceSet; > import org.eclipse.emf.ecore.util.EcoreUtil; >+import org.eclipse.emf.spi.cdo.CDOSessionProtocol; > import org.eclipse.emf.spi.cdo.FSMUtil; > import org.eclipse.emf.spi.cdo.InternalCDOObject; > import org.eclipse.emf.spi.cdo.InternalCDOSession; >@@ -1378,6 +1388,95 @@ > } > } > >+ public CDOChangeSetData compare(CDOBranchPoint source) >+ { >+ InternalCDOSession session = getSession(); >+ synchronized (session.getInvalidationLock()) >+ { >+ long now = getLastUpdateTime(); >+ CDOBranchPoint target = this; >+ >+ if (target.getTimeStamp() == CDOBranchPoint.UNSPECIFIED_DATE) >+ { >+ target = target.getBranch().getPoint(now); >+ } >+ >+ if (source.getTimeStamp() == CDOBranchPoint.UNSPECIFIED_DATE) >+ { >+ source = source.getBranch().getPoint(now); >+ } >+ >+ CDORevisionAvailabilityInfo targetInfo = createRevisionAvailabilityInfo(target); >+ CDORevisionAvailabilityInfo sourceInfo = createRevisionAvailabilityInfo(source); >+ >+ CDOSessionProtocol sessionProtocol = session.getSessionProtocol(); >+ Set<CDOID> ids = sessionProtocol.loadMergeData(targetInfo, sourceInfo, null, null); >+ >+ cacheRevisions(targetInfo); >+ cacheRevisions(sourceInfo); >+ >+ return CDORevisionDeltaUtil.createChangeSetData(ids, sourceInfo, targetInfo); >+ } >+ } >+ >+ protected CDORevisionAvailabilityInfo createRevisionAvailabilityInfo(CDOBranchPoint branchPoint) >+ { >+ CDORevisionAvailabilityInfo info = new CDORevisionAvailabilityInfo(branchPoint); >+ >+ InternalCDORevisionManager revisionManager = getSession().getRevisionManager(); >+ InternalCDORevisionCache cache = revisionManager.getCache(); >+ >+ List<CDORevision> revisions = cache.getRevisions(branchPoint); >+ for (CDORevision revision : revisions) >+ { >+ if (revision instanceof PointerCDORevision) >+ { >+ PointerCDORevision pointer = (PointerCDORevision)revision; >+ CDOBranchVersion target = pointer.getTarget(); >+ if (target != null) >+ { >+ revision = cache.getRevisionByVersion(pointer.getID(), target); >+ } >+ } >+ else if (revision instanceof DetachedCDORevision) >+ { >+ revision = null; >+ } >+ >+ if (revision != null) >+ { >+ info.addRevision(revision); >+ } >+ } >+ >+ return info; >+ } >+ >+ protected void cacheRevisions(CDORevisionAvailabilityInfo info) >+ { >+ InternalCDORevisionManager revisionManager = getSession().getRevisionManager(); >+ CDOBranch branch = info.getBranchPoint().getBranch(); >+ for (CDORevisionKey key : info.getAvailableRevisions().values()) >+ { >+ CDORevision revision = (CDORevision)key; >+ revisionManager.addRevision(revision); >+ >+ if (!ObjectUtil.equals(revision.getBranch(), branch)) >+ { >+ CDOID id = revision.getID(); >+ CDORevision firstRevision = revisionManager.getCache().getRevisionByVersion(id, >+ branch.getVersion(CDOBranchVersion.FIRST_VERSION)); >+ if (firstRevision != null) >+ { >+ long revised = firstRevision.getTimeStamp() - 1L; >+ CDOBranchVersion target = CDOBranchUtil.copyBranchVersion(revision); >+ PointerCDORevision pointer = new PointerCDORevision(revision.getEClass(), id, branch, revised, target); >+ revisionManager.addRevision(pointer); >+ } >+ } >+ } >+ } >+ > @Override > protected void doDeactivate() throws Exception > { >Index: src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java,v >retrieving revision 1.67 >diff -u -r1.67 CDOSessionProtocol.java >--- src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java 18 Nov 2010 08:10:05 -0000 1.67 >+++ src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java 19 Dec 2010 11:28:02 -0000 >@@ -207,10 +207,10 @@ > public CDOChangeSetData[] loadChangeSets(CDOBranchPointRange... ranges); > > /** >- * @since 3.0 >+ * @since 4.0 > */ >- public Set<CDOID> loadMergeData(CDORevisionAvailabilityInfo ancestorInfo, CDORevisionAvailabilityInfo targetInfo, >- CDORevisionAvailabilityInfo sourceInfo); >+ public Set<CDOID> loadMergeData(CDORevisionAvailabilityInfo targetInfo, CDORevisionAvailabilityInfo sourceInfo, >+ CDORevisionAvailabilityInfo targetBaseInfo, CDORevisionAvailabilityInfo sourceBaseInfo); > > /** > * @since 4.0 >#P org.eclipse.emf.cdo.net4j >Index: src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java,v >retrieving revision 1.51 >diff -u -r1.51 CDOClientProtocol.java >--- src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java 18 Nov 2010 08:09:58 -0000 1.51 >+++ src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java 19 Dec 2010 11:28:04 -0000 >@@ -353,10 +353,10 @@ > return send(new LoadChangeSetsRequest(this, ranges)); > } > >- public Set<CDOID> loadMergeData(CDORevisionAvailabilityInfo ancestorInfo, CDORevisionAvailabilityInfo targetInfo, >- CDORevisionAvailabilityInfo sourceInfo) >+ public Set<CDOID> loadMergeData(CDORevisionAvailabilityInfo targetInfo, CDORevisionAvailabilityInfo sourceInfo, >+ CDORevisionAvailabilityInfo targetBaseInfo, CDORevisionAvailabilityInfo sourceBaseInfo) > { >- return send(new LoadMergeDataRequest(this, ancestorInfo, targetInfo, sourceInfo)); >+ return send(new LoadMergeDataRequest(this, targetInfo, sourceInfo, targetBaseInfo, sourceBaseInfo)); > } > > @Override >Index: src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadMergeDataRequest.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadMergeDataRequest.java,v >retrieving revision 1.3 >diff -u -r1.3 LoadMergeDataRequest.java >--- src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadMergeDataRequest.java 18 Dec 2010 19:46:20 -0000 1.3 >+++ src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadMergeDataRequest.java 19 Dec 2010 11:28:04 -0000 >@@ -31,31 +31,48 @@ > */ > public class LoadMergeDataRequest extends CDOClientRequestWithMonitoring<Set<CDOID>> > { >- private CDORevisionAvailabilityInfo ancestorInfo; >- > private CDORevisionAvailabilityInfo targetInfo; > > private CDORevisionAvailabilityInfo sourceInfo; > >- public LoadMergeDataRequest(CDOClientProtocol protocol, CDORevisionAvailabilityInfo ancestorInfo, >- CDORevisionAvailabilityInfo targetInfo, CDORevisionAvailabilityInfo sourceInfo) >+ private CDORevisionAvailabilityInfo targetBaseInfo; >+ >+ private CDORevisionAvailabilityInfo sourceBaseInfo; >+ >+ private int infos; >+ >+ public LoadMergeDataRequest(CDOClientProtocol protocol, CDORevisionAvailabilityInfo targetInfo, >+ CDORevisionAvailabilityInfo sourceInfo, CDORevisionAvailabilityInfo targetBaseInfo, >+ CDORevisionAvailabilityInfo sourceBaseInfo) > { > super(protocol, CDOProtocolConstants.SIGNAL_LOAD_MERGE_DATA); >- this.ancestorInfo = ancestorInfo; > this.targetInfo = targetInfo; > this.sourceInfo = sourceInfo; >+ this.targetBaseInfo = targetBaseInfo; >+ this.sourceBaseInfo = sourceBaseInfo; >+ infos = 2 + (targetBaseInfo != null ? 1 : 0) + (sourceBaseInfo != null ? 1 : 0); > } > > @Override > protected void requesting(CDODataOutput out, OMMonitor monitor) throws IOException > { >- monitor.begin(3); >+ out.writeInt(infos); >+ monitor.begin(infos); > > try > { >- writeRevisionAvailabilityInfo(out, ancestorInfo, monitor.fork()); > writeRevisionAvailabilityInfo(out, targetInfo, monitor.fork()); > writeRevisionAvailabilityInfo(out, sourceInfo, monitor.fork()); >+ >+ if (infos > 2) >+ { >+ writeRevisionAvailabilityInfo(out, targetBaseInfo, monitor.fork()); >+ } >+ >+ if (infos > 3) >+ { >+ writeRevisionAvailabilityInfo(out, sourceBaseInfo, monitor.fork()); >+ } > } > finally > { >@@ -92,9 +109,9 @@ > protected Set<CDOID> confirming(CDODataInput in, OMMonitor monitor) throws IOException > { > Set<CDOID> result = new HashSet<CDOID>(); >- int size = in.readInt(); > >- monitor.begin(size + 3); >+ int size = in.readInt(); >+ monitor.begin(size + infos); > > try > { >@@ -105,9 +122,19 @@ > monitor.worked(); > } > >- readRevisionAvailabilityInfo(in, ancestorInfo, result, monitor.fork()); > readRevisionAvailabilityInfo(in, targetInfo, result, monitor.fork()); > readRevisionAvailabilityInfo(in, sourceInfo, result, monitor.fork()); >+ >+ if (infos > 2) >+ { >+ readRevisionAvailabilityInfo(in, targetBaseInfo, result, monitor.fork()); >+ } >+ >+ if (infos > 3) >+ { >+ readRevisionAvailabilityInfo(in, sourceBaseInfo, result, monitor.fork()); >+ } >+ > return result; > } > finally >@@ -134,10 +161,21 @@ > else > { > CDORevisionKey key = in.readCDORevisionKey(); >- revision = getRevision(key, ancestorInfo); >+ revision = getRevision(key, targetInfo); >+ >+ if (revision == null && sourceInfo != null) >+ { >+ revision = getRevision(key, sourceInfo); >+ } >+ >+ if (revision == null && targetBaseInfo != null) >+ { >+ revision = getRevision(key, targetBaseInfo); >+ } >+ > if (revision == null) > { >- revision = getRevision(key, targetInfo); >+ throw new IllegalStateException("Missing revision: " + key); > } > } > >#P org.eclipse.emf.cdo.server >Index: src/org/eclipse/emf/cdo/internal/server/Repository.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java,v >retrieving revision 1.173 >diff -u -r1.173 Repository.java >--- src/org/eclipse/emf/cdo/internal/server/Repository.java 18 Dec 2010 19:46:32 -0000 1.173 >+++ src/org/eclipse/emf/cdo/internal/server/Repository.java 19 Dec 2010 11:28:05 -0000 >@@ -1087,25 +1087,49 @@ > return CDORevisionDeltaUtil.createChangeSetData(ids, startPoint, endPoint, revisionManager); > } > >- public Set<CDOID> getMergeData(CDORevisionAvailabilityInfo ancestorInfo, CDORevisionAvailabilityInfo targetInfo, >- CDORevisionAvailabilityInfo sourceInfo, OMMonitor monitor) >+ public Set<CDOID> getMergeData(CDORevisionAvailabilityInfo targetInfo, CDORevisionAvailabilityInfo sourceInfo, >+ CDORevisionAvailabilityInfo targetBaseInfo, CDORevisionAvailabilityInfo sourceBaseInfo, OMMonitor monitor) > { >- CDOBranchPoint ancestor = ancestorInfo.getBranchPoint(); >- CDOBranchPoint target = targetInfo.getBranchPoint(); >- CDOBranchPoint source = sourceInfo.getBranchPoint(); >- > monitor.begin(5); > > try > { > IStoreAccessor accessor = StoreThreadLocal.getAccessor(); >- Set<CDOID> ids = accessor.readChangeSet(monitor.fork(), CDOChangeSetSegment.createFrom(ancestor, target)); >- ids.addAll(accessor.readChangeSet(monitor.fork(), CDOChangeSetSegment.createFrom(ancestor, source))); >+ Set<CDOID> ids = new HashSet<CDOID>(); >+ >+ if (targetBaseInfo == null && sourceBaseInfo == null) >+ { >+ ids.addAll(accessor.readChangeSet(monitor.fork(), >+ CDOChangeSetSegment.createFrom(targetInfo.getBranchPoint(), sourceInfo.getBranchPoint()))); >+ } >+ else >+ { >+ CDORevisionAvailabilityInfo sourceBaseInfoToUse = sourceBaseInfo; >+ if (sourceBaseInfoToUse == null) >+ { >+ sourceBaseInfoToUse = targetBaseInfo; >+ } >+ >+ ids.addAll(accessor.readChangeSet(monitor.fork(), >+ CDOChangeSetSegment.createFrom(targetBaseInfo.getBranchPoint(), targetInfo.getBranchPoint()))); >+ >+ ids.addAll(accessor.readChangeSet(monitor.fork(), >+ CDOChangeSetSegment.createFrom(sourceBaseInfoToUse.getBranchPoint(), sourceInfo.getBranchPoint()))); >+ } > >- loadMergeData(ids, ancestorInfo, monitor.fork()); > loadMergeData(ids, targetInfo, monitor.fork()); > loadMergeData(ids, sourceInfo, monitor.fork()); > >+ if (targetBaseInfo != null) >+ { >+ loadMergeData(ids, targetBaseInfo, monitor.fork()); >+ } >+ >+ if (sourceBaseInfo != null) >+ { >+ loadMergeData(ids, sourceBaseInfo, monitor.fork()); >+ } >+ > return ids; > } > finally >Index: src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java,v >retrieving revision 1.57 >diff -u -r1.57 EmbeddedClientSessionProtocol.java >--- src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java 18 Nov 2010 08:10:01 -0000 1.57 >+++ src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java 19 Dec 2010 11:28:05 -0000 >@@ -478,8 +478,8 @@ > throw new UnsupportedOperationException(); > } > >- public Set<CDOID> loadMergeData(CDORevisionAvailabilityInfo ancestorInfo, CDORevisionAvailabilityInfo targetInfo, >- CDORevisionAvailabilityInfo sourceInfo) >+ public Set<CDOID> loadMergeData(CDORevisionAvailabilityInfo targetInfo, CDORevisionAvailabilityInfo sourceInfo, >+ CDORevisionAvailabilityInfo targetBaseInfo, CDORevisionAvailabilityInfo sourceBaseInfo) > { > throw new UnsupportedOperationException(); > } >Index: src/org/eclipse/emf/cdo/spi/server/InternalRepository.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java,v >retrieving revision 1.36 >diff -u -r1.36 InternalRepository.java >--- src/org/eclipse/emf/cdo/spi/server/InternalRepository.java 18 Dec 2010 19:46:31 -0000 1.36 >+++ src/org/eclipse/emf/cdo/spi/server/InternalRepository.java 19 Dec 2010 11:28:05 -0000 >@@ -124,8 +124,8 @@ > /** > * @since 4.0 > */ >- public Set<CDOID> getMergeData(CDORevisionAvailabilityInfo ancestorInfo, CDORevisionAvailabilityInfo targetInfo, >- CDORevisionAvailabilityInfo sourceInfo, OMMonitor monitor); >+ public Set<CDOID> getMergeData(CDORevisionAvailabilityInfo targetInfo, CDORevisionAvailabilityInfo sourceInfo, >+ CDORevisionAvailabilityInfo targetBaseInfo, CDORevisionAvailabilityInfo sourceBaseInfo, OMMonitor monitor); > > /** > * @since 4.0 >#P org.eclipse.emf.cdo.server.net4j >Index: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java,v >retrieving revision 1.6 >diff -u -r1.6 LoadMergeDataIndication.java >--- src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java 18 Dec 2010 19:46:35 -0000 1.6 >+++ src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadMergeDataIndication.java 19 Dec 2010 11:28:06 -0000 >@@ -34,12 +34,16 @@ > */ > public class LoadMergeDataIndication extends CDOServerReadIndicationWithMonitoring > { >- private CDORevisionAvailabilityInfo ancestorInfo; >+ private int infos; > > private CDORevisionAvailabilityInfo targetInfo; > > private CDORevisionAvailabilityInfo sourceInfo; > >+ private CDORevisionAvailabilityInfo targetBaseInfo; >+ >+ private CDORevisionAvailabilityInfo sourceBaseInfo; >+ > public LoadMergeDataIndication(CDOServerProtocol protocol) > { > super(protocol, CDOProtocolConstants.SIGNAL_LOAD_MERGE_DATA); >@@ -48,13 +52,23 @@ > @Override > protected void indicating(CDODataInput in, OMMonitor monitor) throws Exception > { >- monitor.begin(3); >+ infos = in.readInt(); >+ monitor.begin(infos); > > try > { >- ancestorInfo = readRevisionAvailabilityInfo(in, monitor.fork()); > targetInfo = readRevisionAvailabilityInfo(in, monitor.fork()); > sourceInfo = readRevisionAvailabilityInfo(in, monitor.fork()); >+ >+ if (infos > 2) >+ { >+ targetBaseInfo = readRevisionAvailabilityInfo(in, monitor.fork()); >+ } >+ >+ if (infos > 3) >+ { >+ sourceBaseInfo = readRevisionAvailabilityInfo(in, monitor.fork()); >+ } > } > finally > { >@@ -91,12 +105,12 @@ > @Override > protected void responding(CDODataOutput out, OMMonitor monitor) throws Exception > { >- monitor.begin(5); >+ monitor.begin(2 + infos); > > try > { > InternalRepository repository = getRepository(); >- Set<CDOID> ids = repository.getMergeData(ancestorInfo, targetInfo, sourceInfo, monitor.fork()); >+ Set<CDOID> ids = repository.getMergeData(targetInfo, sourceInfo, targetBaseInfo, sourceBaseInfo, monitor.fork()); > > out.writeInt(ids.size()); > for (CDOID id : ids) >@@ -107,9 +121,18 @@ > monitor.worked(); > > Set<CDORevisionKey> writtenRevisions = new HashSet<CDORevisionKey>(); >- writeRevisionAvailabilityInfo(out, ancestorInfo, writtenRevisions, monitor.fork()); > writeRevisionAvailabilityInfo(out, targetInfo, writtenRevisions, monitor.fork()); > writeRevisionAvailabilityInfo(out, sourceInfo, writtenRevisions, monitor.fork()); >+ >+ if (infos > 2) >+ { >+ writeRevisionAvailabilityInfo(out, targetBaseInfo, writtenRevisions, monitor.fork()); >+ } >+ >+ if (infos > 3) >+ { >+ writeRevisionAvailabilityInfo(out, sourceBaseInfo, writtenRevisions, monitor.fork()); >+ } > } > finally > {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 332672
:
185493
| 185494