diff options
15 files changed, 287 insertions, 23 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java index a1378c4397..940cce5aa7 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java @@ -121,6 +121,11 @@ public interface CDOProtocolConstants */ public static final short SIGNAL_BRANCH_NOTIFICATION = 33; + /** + * @since 3.0 + */ + public static final short SIGNAL_CLONE_REPOSITORY = 34; + // ////////////////////////////////////////////////////////////////////// // Session Management @@ -159,4 +164,27 @@ public interface CDOProtocolConstants * @since 3.0 */ public static final byte REMOTE_SESSION_CUSTOM_DATA = 5; + + // ////////////////////////////////////////////////////////////////////// + // Cloning + + /** + * @since 3.0 + */ + public static final byte CLONING_FINISHED = 0; + + /** + * @since 3.0 + */ + public static final byte CLONING_PACKAGE = 1; + + /** + * @since 3.0 + */ + public static final byte CLONING_BRANCH = 2; + + /** + * @since 3.0 + */ + public static final byte CLONING_REVISION = 3; } diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java new file mode 100644 index 0000000000..952028f720 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOCloningContext.java @@ -0,0 +1,20 @@ +package org.eclipse.emf.cdo.spi.common; + +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; + +/** + * @author Eike Stepper + * @since 3.0 + */ +public interface CDOCloningContext +{ + public long getStartTime(); + + public long getEndTime(); + + public void addPackageUnit(String id); + + public void addBranch(int id); + + public void addRevision(InternalCDORevision revision); +}
\ No newline at end of file diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java index 9d911d5adb..1f398455d1 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java @@ -23,6 +23,7 @@ import org.eclipse.emf.cdo.internal.net4j.messages.Messages; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.session.remote.CDORemoteSession; import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; import org.eclipse.emf.cdo.spi.common.revision.RevisionInfo; @@ -262,6 +263,11 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO return send(new UnsubscribeRemoteSessionsRequest(this)); } + public void cloneRepository(CDOCloningContext context) + { + send(new CloneRepositoryRequest(this, context)); + } + @Override protected SignalReactor createSignalReactor(short signalID) { diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java new file mode 100644 index 0000000000..dc85c8223b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java @@ -0,0 +1,70 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.internal.net4j.protocol; + +import org.eclipse.emf.cdo.common.io.CDODataInput; +import org.eclipse.emf.cdo.common.io.CDODataOutput; +import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; + + +import java.io.IOException; + +/** + * @author Eike Stepper + */ +public class CloneRepositoryRequest extends CDOClientRequest<Boolean> +{ + private CDOCloningContext context; + + public CloneRepositoryRequest(CDOClientProtocol protocol, CDOCloningContext context) + { + super(protocol, CDOProtocolConstants.SIGNAL_OPEN_VIEW); + this.context = context; + } + + @Override + protected void requesting(CDODataOutput out) throws IOException + { + out.writeLong(context.getStartTime()); + out.writeLong(context.getEndTime()); + } + + @Override + protected Boolean confirming(CDODataInput in) throws IOException + { + for (;;) + { + byte opcode = in.readByte(); + switch (opcode) + { + case CDOProtocolConstants.CLONING_FINISHED: + return true; + + case CDOProtocolConstants.CLONING_PACKAGE: + context.addPackageUnit(in.readCDOPackageURI()); + break; + + case CDOProtocolConstants.CLONING_BRANCH: + context.addBranch(in.readInt()); + break; + + case CDOProtocolConstants.CLONING_REVISION: + context.addRevision((InternalCDORevision)in.readCDORevision()); + break; + + default: + throw new IOException("Invalid cloning opcode: " + opcode); + } + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java index e9462c6fe9..cbf42f10ab 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java @@ -256,6 +256,9 @@ public class CDOServerProtocol extends SignalProtocol<InternalSession> implement case CDOProtocolConstants.SIGNAL_REMOTE_MESSAGE: return new RemoteMessageIndication(this); + case CDOProtocolConstants.SIGNAL_CLONE_REPOSITORY: + return new CloneRepositoryIndication(this); + default: return super.createSignalReactor(signalID); } diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java new file mode 100644 index 0000000000..523780c9a7 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CloneRepositoryIndication.java @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.emf.cdo.server.internal.net4j.protocol; + +import org.eclipse.emf.cdo.common.io.CDODataInput; +import org.eclipse.emf.cdo.common.io.CDODataOutput; +import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; +import org.eclipse.emf.cdo.common.revision.CDORevision; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; + +import org.eclipse.net4j.util.WrappedException; + +import java.io.IOException; + +/** + * @author Eike Stepper + */ +public class CloneRepositoryIndication extends CDOServerIndication +{ + private long startTime; + + private long endTime; + + public CloneRepositoryIndication(CDOServerProtocol protocol) + { + super(protocol, CDOProtocolConstants.SIGNAL_CLONE_REPOSITORY); + } + + @Override + protected void indicating(CDODataInput in) throws IOException + { + startTime = in.readLong(); + endTime = in.readLong(); + } + + @Override + protected void responding(final CDODataOutput out) throws IOException + { + getRepository().clone(new CDOCloningContext() + { + public long getStartTime() + { + return startTime; + } + + public long getEndTime() + { + return endTime; + } + + public void addPackageUnit(String id) + { + try + { + out.writeByte(CDOProtocolConstants.CLONING_PACKAGE); + out.writeString(id); + } + catch (IOException ex) + { + throw WrappedException.wrap(ex); + } + } + + public void addBranch(int id) + { + try + { + out.writeByte(CDOProtocolConstants.CLONING_BRANCH); + out.writeInt(id); + } + catch (IOException ex) + { + throw WrappedException.wrap(ex); + } + } + + public void addRevision(InternalCDORevision revision) + { + try + { + out.writeByte(CDOProtocolConstants.CLONING_REVISION); + out.writeCDORevision(revision, CDORevision.UNCHUNKED); + } + catch (IOException ex) + { + throw WrappedException.wrap(ex); + } + } + }); + + out.writeByte(CDOProtocolConstants.CLONING_FINISHED); + } +} diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java index 0a52d1687f..968f1c502c 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java @@ -39,6 +39,7 @@ import org.eclipse.emf.cdo.server.InternalNotificationManager; import org.eclipse.emf.cdo.server.InternalStore; import org.eclipse.emf.cdo.server.StoreThreadLocal; import org.eclipse.emf.cdo.server.IStoreChunkReader.Chunk; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo; @@ -838,6 +839,10 @@ public class Repository extends Container<Object> implements InternalRepository } } + public void clone(CDOCloningContext context) + { + } + @Override public String toString() { diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java index ee00746a71..d400e89b78 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedClientSessionProtocol.java @@ -25,6 +25,7 @@ import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.server.StoreThreadLocal; import org.eclipse.emf.cdo.session.remote.CDORemoteSession; import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta; @@ -396,6 +397,11 @@ public class EmbeddedClientSessionProtocol extends Lifecycle implements CDOSessi throw new UnsupportedOperationException(); } + public void cloneRepository(CDOCloningContext context) + { + throw new UnsupportedOperationException(); + } + @Override protected void doActivate() throws Exception { diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java index b7eb068ebe..8e3a6dd122 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/offline/MasterInterface.java @@ -25,6 +25,8 @@ import org.eclipse.net4j.util.lifecycle.ILifecycle; import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter; import org.eclipse.net4j.util.om.trace.ContextTracer; +import org.eclipse.emf.spi.cdo.InternalCDOSession; + /** * @author Eike Stepper * @since 3.0 @@ -41,7 +43,7 @@ public class MasterInterface extends QueueRunner private CDOSessionConfiguration sessionConfiguration; - private CDOSession session; + private InternalCDOSession session; private IListener deactivationListener = new LifecycleEventAdapter() { @@ -62,21 +64,11 @@ public class MasterInterface extends QueueRunner { if (event instanceof CDOSessionInvalidationEvent) { - CDOSessionInvalidationEvent e = (CDOSessionInvalidationEvent)event; - long timeStamp = e.getTimeStamp(); - if (TRACER.isEnabled()) - { - TRACER.format("Invalidation from master: {0}", CDOCommonUtil.formatTimeStamp(timeStamp)); - } - - masterTimeStamp.setValue(timeStamp); sync(); } } }; - private MutableLong masterTimeStamp = new MutableLong(); - private MutableLong syncedTimeStamp = new MutableLong(); public MasterInterface() @@ -111,7 +103,7 @@ public class MasterInterface extends QueueRunner return State.OFFLINE; } - long masterTimeStamp = getMasterTimeStamp(); + long masterTimeStamp = session.getLastUpdateTime(); long syncedTimeStamp = getSyncedTimeStamp(); if (masterTimeStamp > syncedTimeStamp) { @@ -126,11 +118,6 @@ public class MasterInterface extends QueueRunner return session; } - public long getMasterTimeStamp() - { - return masterTimeStamp.getValue(); - } - public long getSyncedTimeStamp() { return syncedTimeStamp.getValue(); @@ -184,12 +171,11 @@ public class MasterInterface extends QueueRunner TRACER.format("Connecting to master ({0})...", CDOCommonUtil.formatTimeStamp()); } - session = sessionConfiguration.openSession(); + session = (InternalCDOSession)sessionConfiguration.openSession(); OM.LOG.info("Connected to master."); session.addListener(deactivationListener); - masterTimeStamp.setValue(0); syncedTimeStamp.setValue(NEVER_SYNCHRONIZED); session.addListener(invalidationListener); @@ -216,7 +202,7 @@ public class MasterInterface extends QueueRunner public void run() { checkActive(); - long masterTimeStamp = getMasterTimeStamp(); + long masterTimeStamp = session.getLastUpdateTime(); long syncedTimeStamp = getSyncedTimeStamp(); if (masterTimeStamp > syncedTimeStamp) { diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java index 2e08858b98..9adbc8cf84 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java @@ -17,6 +17,7 @@ import org.eclipse.emf.cdo.server.IStoreAccessor; import org.eclipse.emf.cdo.server.ITransaction; import org.eclipse.emf.cdo.server.InternalNotificationManager; import org.eclipse.emf.cdo.server.InternalStore; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry; @@ -82,4 +83,6 @@ public interface InternalRepository extends IRepository, PackageLoader, BranchLo public void notifyWriteAccessHandlers(ITransaction transaction, IStoreAccessor.CommitContext commitContext, OMMonitor monitor); + + public void clone(CDOCloningContext context); } diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java index 0fdbe47474..713ba98974 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java @@ -78,7 +78,7 @@ public class SessionTest extends AbstractCDOTest @Override protected boolean successful() { - return commitTime == session.getLastCommitTime(); + return commitTime == session.getLastUpdateTime(); } }.assertNoTimeOut(); } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java index 2f5a66e94c..635f3b21f7 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java @@ -208,7 +208,7 @@ public interface CDOSession extends CDOCommonSession, IContainer<CDOView> * * @since 3.0 */ - public long getLastCommitTime(); + public long getLastUpdateTime(); /** * Blocks the calling thread until a commit operation with the given time stamp or higher has occured. diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java index e2b7aea663..cc64f6911e 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java @@ -33,6 +33,7 @@ import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.session.CDOSessionInvalidationEvent; import org.eclipse.emf.cdo.session.remote.CDORemoteSession; import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager; @@ -498,7 +499,7 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter return Collections.emptyList(); } - public long getLastCommitTime() + public long getLastUpdateTime() { synchronized (lastUpdateTimeLock) { @@ -724,6 +725,11 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter } } + public void cloneRepository(CDOCloningContext context) + { + getSessionProtocol().cloneRepository(context); + } + public Object getInvalidationLock() { return invalidationLock; @@ -1591,6 +1597,23 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter } } + public void cloneRepository(CDOCloningContext context) + { + int attempt = 0; + for (;;) + { + try + { + delegate.cloneRepository(context); + return; + } + catch (Exception ex) + { + handleException(++attempt, ex); + } + } + } + @Override protected void doActivate() throws Exception { diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java index 59a183c41e..d69f6e3cac 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java @@ -21,6 +21,7 @@ import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster; import org.eclipse.emf.cdo.common.util.CDOCommonUtil; import org.eclipse.emf.cdo.session.remote.CDORemoteSession; import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry.PackageLoader; @@ -134,6 +135,11 @@ public interface CDOSessionProtocol extends CDOProtocol, PackageLoader, BranchLo public boolean unsubscribeRemoteSessions(); /** + * @since 3.0 + */ + public void cloneRepository(CDOCloningContext context); + + /** * @author Eike Stepper */ public final class OpenSessionResult diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java index bff859e79b..4f1b3aa9a5 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java @@ -18,6 +18,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; import org.eclipse.emf.cdo.session.CDORepositoryInfo; import org.eclipse.emf.cdo.session.CDOSession; +import org.eclipse.emf.cdo.spi.common.CDOCloningContext; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch; import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry; @@ -135,4 +136,9 @@ public interface InternalCDOSession extends CDOSession, PackageProcessor, Packag */ public void reviseRevisions(CDOBranchPoint branchPoint, Set<CDOIDAndVersion> dirtyOIDandVersions, Collection<CDOID> detachedOIDs, InternalCDOView excludedView); + + /** + * @since 3.0 + */ + public void cloneRepository(CDOCloningContext context); } |