Copyright (c) 2006, 2008 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2006, 2008 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.team.core.mapping; import java.io.OutputStream; import org.eclipse.core.resources.IEncodedStorage; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus;
This interface defines a single operation for performing a three-way merge on three instances of IStorage. The merged result is written to an output stream.

Clients must implement this interface when contributing new mergers to the org.eclipse.team.core.storageMergers extension point.

Since:3.2
/** * This interface defines a single operation for performing a three-way merge on three * instances of {@link IStorage}. The merged result is written to an output stream. * <p> * Clients must implement this interface when contributing new mergers to the * <code>org.eclipse.team.core.storageMergers</code> extension point. * </p> * * @since 3.2 */
public interface IStorageMerger {
Indicates the successful completion of the merge operation (value IStatus.OK)
/** * Indicates the successful completion of the merge operation (value <code>IStatus.OK</code>) */
public static final int OK= IStatus.OK;
Indicates that a change conflict prevented the merge from successful completion (value 1)
/** * Indicates that a change conflict prevented the merge from successful completion (value <code>1</code>) */
public static final int CONFLICT= 1;
Status code describing an internal error (value 2)
/** * Status code describing an internal error (value <code>2</code>) */
public static final int INTERNAL_ERROR= 2;
Indicates that at least one of the encodings associated with the input was unsupported (value 3)
/** * Indicates that at least one of the encodings associated with the input was unsupported (value <code>3</code>) */
public static final int UNSUPPORTED_ENCODING= 3;
Performs a merge operation on the given storage instances and writes the merge result to the output stream. On success a status IStatus.OK is returned, on error a status IStatus.ERROR. If the merge operation cannot deal with conflicts, the code of the error status has the value IStreamMerger.CONFLICT. For text oriented mergers the encoding for the input and output is honored if they implement IEncodedStorage. It is the responsibility of callers to close the output stream.

The provided ancestor may be null if this merger returns true from canMergeWithoutAncestor().

Params:
  • output – the byte stream to which the merge result is written; the merger will not close the stream
  • outputEncoding – the encoding to use when writing to the output stream
  • ancestor – the storage from which the common ancestor is read
  • target – the storage containing the target of the merge
  • other – the storage containing the target of the merge
  • monitor – reports progress of the merge operation
Throws:
Returns:returns the completion status of the operation
/** * Performs a merge operation on the given storage instances and writes the merge result to the output stream. * On success a status <code>IStatus.OK</code> is returned, on error a status <code>IStatus.ERROR</code>. * If the merge operation cannot deal with conflicts, the code of the error status has the value <code>IStreamMerger.CONFLICT</code>. * For text oriented mergers the encoding for the input and output is honored if they implement * {@link IEncodedStorage}. * It is the responsibility of callers to close the output stream. * <p> * The provided ancestor may be <code>null</code> if this merger * returns <code>true</code> from {@link #canMergeWithoutAncestor()}. * * @param output the byte stream to which the merge result is written; the merger will not close the stream * @param outputEncoding the encoding to use when writing to the output stream * @param ancestor the storage from which the common ancestor is read * @param target the storage containing the target of the merge * @param other the storage containing the target of the merge * @param monitor reports progress of the merge operation * @return returns the completion status of the operation * @throws CoreException if an error occurs */
IStatus merge(OutputStream output, String outputEncoding, IStorage ancestor, IStorage target, IStorage other, IProgressMonitor monitor) throws CoreException;
Return whether this merger can merge the two contributors without an ancestor. This is typically not possible but may be for some file types (for instances, files that contain a timestamp based list of events).
Returns:whether this merger can merge the two contributors without an ancestor
/** * Return whether this merger can merge the two contributors * without an ancestor. This is typically not possible but may be * for some file types (for instances, files that contain a * timestamp based list of events). * @return whether this merger can merge the two contributors * without an ancestor */
boolean canMergeWithoutAncestor(); }