Package org.tmatesoft.svn.core.wc2

# Class SvnDiff

java.lang.Object
org.tmatesoft.svn.core.wc2.SvnOperation<Void>
org.tmatesoft.svn.core.wc2.SvnDiff

All Implemented Interfaces:
  `ISvnOperationOptionsProvider`

public class SvnDiff extends SvnOperation<Void>
Represents diff operation. Produces diff output which describes the delta between `target` in its `pegRevision`, as it changed between `startRevision` and `endRevision`, or between first `target` at `startRevision` and second `target` at `endRevision`. Writes the output of the diff to `output` stream.

- If it is diff between `startRevision` and `endRevision` of one `target`:

  `Target` can be either working copy path or URL.

  If `pegRevision` is `invalid`, behaves identically to diff between two targets, using `target`'s path for both targets.
- If it is diff between first `target` and second `target`:

  First and second `targets` can be either working copy path or URL, but cannot be both URLs. If so `UnsupportedOperationException` is thrown.

  Both `targets` must represent the same node kind -- that is, if first `target` is a directory, second `target` must also be, and if first `target` is a file, second `target` must also be.

If this operation object uses `DefaultSVNDiffGenerator` and there was a non-`null` `base path` provided to it, the original path and modified path will have this base path stripped from the front of the respective paths. If the base path is not <null>null</null> but is not a parent path of the target, an exception with the `SVNErrorCode.BAD_RELATIVE_PATH` error code is thrown.

If `noDiffDeleted` or old `ISVNDiffGenerator.isDiffDeleted()` is `true, then no diff output will be generated on deleted files.

Generated headers are encoded using `ISvnDiffGenerator.getEncoding()`.

Diffs output will not be generated for binary files, unless `ISvnDiffGenerator.isForcedBinaryDiff()` is `true`, in which case diffs will be shown regardless of the content types.

If this operation object uses `DefaultSVNDiffGenerator` then a caller can set `SVNDiffOptions` to it which will be used to pass additional options to the diff processes invoked to compare files.

If `depth` is `SVNDepth.INFINITY`, diffs fully recursively. Else if it is `SVNDepth.IMMEDIATES`, diffs the named paths and their file children (if any), and diffs properties of subdirectories, but does not descend further into the subdirectories. Else if `SVNDepth.FILES`, behaves as if for `SVNDepth.IMMEDIATES` except doesn't diff properties of subdirectories. If `SVNDepth.EMPTY`, diffs exactly the named paths but nothing underneath them.

`ignoreAncestry` controls 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.

`changeLists` is a collection of `String` changelist names, used as a restrictive filter on items whose differences are reported; that is, doesn't generate diffs about any item unless it's a member of one of those changelists. If `changeLists` is empty (or `null`), no changelist filtering occurs.

Note: changelist filtering only applies to diffs in which at least one side of the diff represents working copy data.

If both `startRevision` and `endRevision` is either `SVNRevision.WORKING` or `SVNRevision.BASE`, then it will be a url-against-wc; otherwise, a url-against-url diff.

If `startRevision` is neither `SVNRevision.BASE`, nor `SVNRevision.WORKING`, nor `SVNRevision.COMMITTED`, and if, on the contrary, `endRevision` is one of the aforementioned revisions, then a wc-against-url diff is performed; if `endRevision` also is not one of those revision constants, then a url-against-url diff is performed. Otherwise it's a url-against-wc diff.

`SvnOperation.run()` method throws `SVNException` if one of the following is true:

- exception with `SVNErrorCode.CLIENT_BAD_REVISION` error code - if either of `startRevision` and `endRevision` is `invalid`; if both `startRevision` and `endRevision` are either `SVNRevision.WORKING` or `SVNRevision.BASE`
- exception with `SVNErrorCode.FS_NOT_FOUND` error code - `target` can not be found in either `startRevision` or `endRevision`

`

Version:
  1.7
Author:
  TMate Software Ltd.

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`SvnDiff(SvnOperationFactory factory)`

## Method Summary

Modifier and Type
Method
Description
`protected void`
`ensureArgumentsAreValid()`
`org.tmatesoft.svn.core.internal.wc2.ng.ISvnDiffGenerator`
`getDiffGenerator()`
Returns operation's diff generator.
`SVNDiffOptions`
`getDiffOptions()`
Returns the operation's diff options controlling white-spaces and eol-styles.
`SVNRevision`
`getEndRevision()`
`SvnTarget`
`getFirstSource()`
`protected int`
`getMaximumTargetsCount()`
`protected int`
`getMinimumTargetsCount()`
`protected File`
`getOperationalWorkingCopy()`
`OutputStream`
`getOutput()`
Returns output stream where the differences will be written to.
`File`
`getRelativeToDirectory()`
`SvnTarget`
`getSecondSource()`
`SvnTarget`
`getSource()`
Gets the diff's `source` with start and end revisions for one-target type of operation.
`SVNRevision`
`getStartRevision()`
`boolean`
`isChangesWorkingCopy()`
Gets whether the operation changes working copy
`boolean`
`isIgnoreAncestry()`
Returns the paths ancestry should not be noticed while calculating differences.
`boolean`
`isIgnoreContentType()`
`boolean`
`isNoDiffDeleted()`
Returns whether to generate differences for deleted files.
`boolean`
`isRecurseIntoDeletedDirectories()`
`boolean`
`isShowCopiesAsAdds()`
Returns whether to report copies and moves as it were adds.
`boolean`
`isUseGitDiffFormat()`
Returns whether to report in Git diff format.
`void`
`setDiffGenerator(org.tmatesoft.svn.core.internal.wc2.ng.ISvnDiffGenerator diffGenerator)`
Sets operation's diff generator.
`void`
`setDiffGenerator(ISVNDiffGenerator diffGenerator)`
Sets operation's diff generator of type ISVNDiffGenerator.
`void`
`setDiffOptions(SVNDiffOptions diffOptions)`
Sets the operation's diff options controlling white-spaces and eol-styles.
`void`
`setIgnoreAncestry(boolean ignoreAncestry)`
Sets whether or not items being diffed should be checked for relatedness first.
`void`
`setIgnoreContentType(boolean ignoreContentType)`
`void`
`setNoDiffDeleted(boolean noDiffDeleted)`
Sets whether to generate differences for deleted files.
`void`
`setOutput(OutputStream output)`
Sets output stream where the differences will be written to.
`void`
`setRecurseIntoDeletedDirectories(boolean recurseIntoDeletedDirectories)`
`void`
`setRelativeToDirectory(File relativeToDirectory)`
`void`
`setShowCopiesAsAdds(boolean showCopiesAsAdds)`
Sets whether to report copies and moves as it were adds.
`void`
`setSource(SvnTarget source, SVNRevision start, SVNRevision end)`
Sets the diff's `source` with start and end revisions for one-source type of operation.
`void`
`setSources(SvnTarget source1, SvnTarget source2)`
Sets both diff's `sources`.
`void`
`setUseGitDiffFormat(boolean useGitDiffFormat)`
Sets whether to report in Git diff format.

### Methods inherited from class org.tmatesoft.svn.core.wc2.SvnOperation

`addTarget, cancel, ensureEnoughTargets, ensureHomohenousTargets, getApplicableChangelists, getAuthenticationManager, getCanceller, getDepth, getEventHandler, getFirstTarget, getOperationFactory, getOptions, getRepositoryPool, getRevision, getSqliteJournalMode, getTargets, hasFileTargets, hasLocalTargets, hasRemoteTargets, initDefaults, isCancelled, isSleepForTimestamp, isUseParentWcFormat, needsHomohenousTargets, run, setApplicalbeChangelists, setDepth, setRevision, setSingleTarget, setSleepForTimestamp, setSqliteJournalMode`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### SvnDiff

protected SvnDiff(SvnOperationFactory factory)

## Method Details

### setSource

public void setSource(SvnTarget source, SVNRevision start, SVNRevision end)
Sets the diff's `source` with start and end revisions for one-source type of operation.

Parameters:
  `source` - source of the diff
  `start` - start revision of the diff
  `end` - end revision of the diff

### setSources

public void setSources(SvnTarget source1, SvnTarget source2)
Sets both diff's `sources`.

Parameters:
  `source1` - first source of the diff
  `source2` - second source of the diff

### getSource

public SvnTarget getSource()
Gets the diff's `source` with start and end revisions for one-target type of operation.

Returns:
  source of the diff

### getStartRevision

public SVNRevision getStartRevision()

### getEndRevision

public SVNRevision getEndRevision()

### getFirstSource

public SvnTarget getFirstSource()

### getSecondSource

public SvnTarget getSecondSource()

### setRelativeToDirectory

public void setRelativeToDirectory(File relativeToDirectory)

### getRelativeToDirectory

public File getRelativeToDirectory()

### getDiffGenerator

public org.tmatesoft.svn.core.internal.wc2.ng.ISvnDiffGenerator getDiffGenerator()
Returns operation's diff generator. If not set, `DefaultSVNDiffGenerator` is used.

Returns:
  diff generator of the operation

### setDiffGenerator

public void setDiffGenerator(ISVNDiffGenerator diffGenerator)
Sets operation's diff generator of type ISVNDiffGenerator. Used for compatibility with 1.6 version.

Parameters:
  `diffGenerator` - diff generator of the operation of type ISVNDiffGenerator

### setDiffGenerator

public void setDiffGenerator(org.tmatesoft.svn.core.internal.wc2.ng.ISvnDiffGenerator diffGenerator)
Sets operation's diff generator.

Parameters:
  `diffGenerator` - diff generator of the operation

### getDiffOptions

public SVNDiffOptions getDiffOptions()
Returns the operation's diff options controlling white-spaces and eol-styles.

Returns:
  diff options of the operation

### setDiffOptions

public void setDiffOptions(SVNDiffOptions diffOptions)
Sets the operation's diff options controlling white-spaces and eol-styles.

Parameters:
  `diffOptions` - diff options of the operation

### getOutput

public OutputStream getOutput()
Returns output stream where the differences will be written to.

Returns:
  output stream of the diff's result

### setOutput

public void setOutput(OutputStream output)
Sets output stream where the differences will be written to.

Parameters:
  `output` - output stream of the diff's result

### isIgnoreAncestry

public boolean isIgnoreAncestry()
Returns the paths ancestry should not be noticed while calculating differences.

Returns:
  `true` if the paths ancestry should not be noticed while calculating differences, otherwise `false`
See Also:
  - `setIgnoreAncestry(boolean)`

### setIgnoreAncestry

public void setIgnoreAncestry(boolean ignoreAncestry)
Sets whether or not items being diffed should 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 the paths ancestry should not be noticed while calculating differences, otherwise `false`

### isNoDiffDeleted

public boolean isNoDiffDeleted()
Returns whether to generate differences for deleted files. In 1.6 version it was `ISVNDiffGenerator.isDiffDeleted()`.

Returns:
  `true` if deleted files should not be diffed, otherwise `false`

### setNoDiffDeleted

public void setNoDiffDeleted(boolean noDiffDeleted)
Sets whether to generate differences for deleted files. In 1.6 version it was `ISVNDiffGenerator.setDiffDeleted(boolean)`.

Parameters:
  `noDiffDeleted` - `true` if deleted files should not be diffed, otherwise `false`

### isShowCopiesAsAdds

public boolean isShowCopiesAsAdds()
Returns whether to report copies and moves as it were adds.

Returns:
  `true` if copies and moves should be reported as adds, otherwise `false`
Since:
  1.7, SVN 1.7

### setShowCopiesAsAdds

public void setShowCopiesAsAdds(boolean showCopiesAsAdds)
Sets whether to report copies and moves as it were adds.

Parameters:
  `showCopiesAsAdds` - `true` if copies and moves should be reported as adds, otherwise `false`
Since:
  1.7, SVN 1.7

### isIgnoreContentType

public boolean isIgnoreContentType()

### setIgnoreContentType

public void setIgnoreContentType(boolean ignoreContentType)

### isUseGitDiffFormat

public boolean isUseGitDiffFormat()
Returns whether to report in Git diff format.

Returns:
  `true` if report should be in report in Git diff format, otherwise `false`
Since:
  1.7

### setUseGitDiffFormat

public void setUseGitDiffFormat(boolean useGitDiffFormat)
Sets whether to report in Git diff format.

Parameters:
  `useGitDiffFormat` - `true` if report should be in report in Git diff format, otherwise `false`
Since:
  1.7

### isRecurseIntoDeletedDirectories

public boolean isRecurseIntoDeletedDirectories()

### setRecurseIntoDeletedDirectories

public void setRecurseIntoDeletedDirectories(boolean recurseIntoDeletedDirectories)

### getMinimumTargetsCount

protected int getMinimumTargetsCount()

Overrides:
  `getMinimumTargetsCount` in class `SvnOperation<Void>`

### getMaximumTargetsCount

protected int getMaximumTargetsCount()

Overrides:
  `getMaximumTargetsCount` in class `SvnOperation<Void>`

### ensureArgumentsAreValid

protected void ensureArgumentsAreValid() throws SVNException

Overrides:
  `ensureArgumentsAreValid` in class `SvnOperation<Void>`
Throws:
  `SVNException`

### getOperationalWorkingCopy

protected File getOperationalWorkingCopy()

Overrides:
  `getOperationalWorkingCopy` in class `SvnOperation<Void>`

### 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`