Class SvnMerge

java.lang.Object
org.tmatesoft.svn.core.wc2.SvnOperation<Void>
org.tmatesoft.svn.core.wc2.SvnMerge
All Implemented Interfaces:
ISvnOperationOptionsProvider

public class SvnMerge extends SvnOperation<Void>
Represents merge operation. There are three possible cases of merge operation. If revision ranges (ranges) are provided, merges the changes between source in its pegRevision, as it changed between the ranges in to the working copy path defined in operation's target. If revision ranges are not provided, merges changes from firstSource/its pegRevision to secondSource/its pegRevision into the working copy path defined in operation's target. The third case is if reintegrate is true performs a reintegration merge of source at its pegRevision into working copy target.
  • Merge between sources/revision ranges, no reintegration.

    If depth is SVNDepth.INFINITY, merges fully recursively. Else if SVNDepth.IMMEDIATES, merges changes at most to files that are immediate children of target and to directory properties of target and its immediate subdirectory children. Else if SVNDepth.FILES, merges at most to immediate file children of target and to target itself. Else if SVNDepth.EMPTY, applies changes only to target (i.e., directory property changes only).

    If depth is SVNDepth.UNKNOWN, uses the depth of target.

    Uses ignoreAncestry to control whether or not items being diffed will be checked for relatedness first. Unrelated items are typically transmitted to the editor as a deletion of one thing and the addition of another, but if this flag is false, unrelated items will be diffed as if they were related.

    If force is not set and the merge involves deleting locally modified or unversioned items the operation will fail. If force is set such items will be deleted.

    Merge options mergeOptions is a collection of SVNDiffOptions, they are used to pass arguments to the merge processes (internal or external).

    If the caller's ISVNEventHandler is not null, then it will be called once for each merged target.

    If recordOnly is true, the merge isn't actually performed, but the mergeinfo for the revisions which would've been merged is recorded in the working copy (and must be subsequently committed back to the repository).

    If dryRun is true, the merge is carried out, and full notification feedback is provided, but the working copy is not modified.

    • Merge between revision ranges.

      Ranges is a collection of SvnRevisionRange ranges. These ranges may describe additive and/or subtractive merge ranges, they may overlap fully or partially, and/or they may partially or fully negate each other. This range list is not required to be sorted.

    • Merge between two sources.

      FirstSource and secondSource must both represent the same node kind - that is, if firstSource is a directory, secondSource must also be, and if firstSource is a file, secondSource must also be.

  • Reintegration merge.

    This kind of merge should be used for back merging (for example, merging branches back to trunk, in which case merge is carried out by comparing the latest trunk tree with the latest branch tree; i.e. the resulting difference is exactly the branch changes which will go back to trunk).

    Destination target must be a single-revision, SVNDepth.INFINITY, pristine, unswitched working copy - in other words, it must reflect a single revision tree, the "target". The mergeinfo on source must reflect that all of the target has been merged into it.

    The depth of the merge is always SVNDepth.INFINITY.

    If source's pegRevision is null or invalid, then it defaults to SVNRevision.HEAD.

Note: this operation requires repository access.

SvnOperation.run() method throws org.tmatesoft.svn.core.SVNException in the following cases:

Version:
1.7
  • Field Details

    • firstSource

      private SvnTarget firstSource
    • secondSource

      private SvnTarget secondSource
    • ignoreMergeInfo

      private boolean ignoreMergeInfo
    • ignoreAncestry

      private boolean ignoreAncestry
    • force

      private boolean force
    • recordOnly

      private boolean recordOnly
    • dryRun

      private boolean dryRun
    • allowMixedRevisions

      private boolean allowMixedRevisions
    • source

      private SvnTarget source
    • reintegrate

      private boolean reintegrate
    • ranges

      private Collection<SvnRevisionRange> ranges
    • mergeOptions

      private SVNDiffOptions mergeOptions
  • Constructor Details

  • Method Details

    • addRevisionRange

      public void addRevisionRange(SvnRevisionRange range)
      Adds the revision range to collection of revision ranges for merging.
      Parameters:
      range - revision range for merge
      See Also:
    • getRevisionRanges

      public Collection<SvnRevisionRange> getRevisionRanges()
      Returns the collection of SvnRevisionRange ranges. These ranges may describe additive and/or subtractive merge ranges, they may overlap fully or partially, and/or they may partially or fully negate each other. This range list is not required to be sorted.
      Returns:
      revision ranges of the merge
    • setSource

      public void setSource(SvnTarget source, boolean reintegrate)
      Sets source of the merge with reintegrate flag. This source is used in merge between revisions and reintegrate merge.
      Parameters:
      source - of merge
      reintegrate - true if it is reintegrate merge, otherwise false
      See Also:
    • setSources

      public void setSources(SvnTarget source1, SvnTarget source2)
      Sets first and seconds sources of the merge. Those sources are used in merge between two sources.
      Parameters:
      source1 - first source
      source2 - second source
    • getSource

      public SvnTarget getSource()
      Returns source for merge between revisions and reintegrate merge.
      Returns:
      merge source
    • getFirstSource

      public SvnTarget getFirstSource()
      Returns first source for merge between two sources.
      Returns:
      first source of merge
    • getSecondSource

      public SvnTarget getSecondSource()
      Returns second source for merge between two sources.
      Returns:
      first source of merge
    • isReintegrate

      public boolean isReintegrate()
      Returns whether it is reintegrate merge. This kind of merge should be used for back merging (for example, merging branches back to trunk, in which case merge is carried out by comparing the latest trunk tree with the latest branch tree; i.e. the resulting difference is exactly the branch changes which will go back to trunk).
      Returns:
      true if it is reintegrate merge, otherwise false
    • isIgnoreMergeInfo

      public boolean isIgnoreMergeInfo()
    • setIgnoreMergeInfo

      public void setIgnoreMergeInfo(boolean ignoreMergeInfo)
    • isIgnoreAncestry

      public boolean isIgnoreAncestry()
      Returns whether or not items being diffed will be checked for relatedness first. Unrelated items are typically transmitted to the editor as a deletion of one thing and the addition of another, but if this flag is false, unrelated items will be diffed as if they were related.
      Returns:
      true if ancestry should be ignored, otherwise false
    • setIgnoreAncestry

      public void setIgnoreAncestry(boolean ignoreAncestry)
      Sets whether or not items being diffed will be checked for relatedness first. Unrelated items are typically transmitted to the editor as a deletion of one thing and the addition of another, but if this flag is false, unrelated items will be diffed as if they were related.
      Parameters:
      ignoreAncestry - true if ancestry should be ignored, otherwise false
    • isForce

      public boolean isForce()
      Returns whether to fail if merge involves deleting locally modified or unversioned items. If force is true such items will be deleted, otherwise operation will fail.
      Returns:
      true if operation should be forced to run, otherwise false
    • setForce

      public void setForce(boolean force)
      Sets whether to fail if merge involves deleting locally modified or unversioned items. If force is true such items will be deleted, otherwise operation will fail.
      Parameters:
      force - true if operation should be forced to run, otherwise false
    • isRecordOnly

      public boolean isRecordOnly()
      Returns whether the merge isn't actually performed, but the mergeinfo for the revisions which would've been merged is recorded in the working copy (and must be subsequently committed back to the repository).
      Returns:
      true if operation should record only the result of merge - mergeinfo data, otherwise false
    • setRecordOnly

      public void setRecordOnly(boolean recordOnly)
      Sets whether the merge isn't actually performed, but the mergeinfo for the revisions which would've been merged is recorded in the working copy (and must be subsequently committed back to the repository).
      Parameters:
      recordOnly - true if operation should record only the result of merge - mergeinfo data, otherwise false
    • isDryRun

      public boolean isDryRun()
      Returns whether the merge is carried out, and full notification feedback is provided, but the working copy is not modified.
      Returns:
      true if the operation should only find out if a file can be merged successfully, otherwise false
    • setDryRun

      public void setDryRun(boolean dryRun)
      Sets whether the merge is carried out, and full notification feedback is provided, but the working copy is not modified.
      Parameters:
      dryRun - true if the operation should only find out if a file can be merged successfully, otherwise false
    • isAllowMixedRevisions

      public boolean isAllowMixedRevisions()
      Returns whether to allow merge target to have mixed revisions. If set to false and target has mixed revisions, SVNException is thrown with error codes SVNErrorCode.CLIENT_NOT_READY_TO_MERGE or SVNErrorCode.CLIENT_MERGE_UPDATE_REQUIRED.
      Returns:
      true if operation allows merging to mixed-revision working copy, otherwise false
      Since:
      1.7, SVN 1.7
    • setAllowMixedRevisions

      public void setAllowMixedRevisions(boolean allowMixedRevisions)
      Sets whether to allow merge target to have mixed revisions. If set to false and target has mixed revisions, SVNException is thrown with error codes SVNErrorCode.CLIENT_NOT_READY_TO_MERGE or SVNErrorCode.CLIENT_MERGE_UPDATE_REQUIRED.
      Parameters:
      allowMixedRevisions - true if operation allows merging to mixed-revision working copy, otherwise false
      Since:
      1.7, SVN 1.7
    • getMergeOptions

      public SVNDiffOptions getMergeOptions()
      Returns the operation's merge options controlling white-spaces and eol-styles.
      Returns:
      merge options of the operation
    • setMergeOptions

      public void setMergeOptions(SVNDiffOptions mergeOptions)
      Sets the operation's merge options controlling white-spaces and eol-styles.
      Parameters:
      mergeOptions - merge options of the operation
    • isChangesWorkingCopy

      public boolean isChangesWorkingCopy()
      Gets whether the operation changes working copy
      Overrides:
      isChangesWorkingCopy in class SvnOperation<Void>
      Returns:
      true if the operation changes the working copy, otherwise false